pocketsphinx-5prealpha/0000775000175000017500000000000012560377662012475 500000000000000pocketsphinx-5prealpha/install-sh0000755000175000017500000003325512505035455014415 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-11-20.07; # UTC # 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 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac 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 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac 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 do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 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 problematic for 'test' and other utilities. 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 # 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-writable 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 X"$d" = X && 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-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: pocketsphinx-5prealpha/test/0000775000175000017500000000000012560377662013454 500000000000000pocketsphinx-5prealpha/test/testfuncs.sh.in0000664000175000017500000000234112504317077016343 00000000000000# 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 data=$sourcedir/test/data model=$sourcedir/model programs="$builddir/src/programs" # Automatically report failures on exit failures="" trap "report_failures" 0 run_program() { program="$1" shift $builddir/libtool --mode=execute "$programs/$program" $@ } debug_program() { program="$1" shift $builddir/libtool --mode=execute gdb --args "$programs/$program" $@ } memcheck_program() { program="$1" shift $builddir/libtool --mode=execute valgrind --leak-check=full "$programs/$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 } pocketsphinx-5prealpha/test/data/0000775000175000017500000000000012560377662014365 500000000000000pocketsphinx-5prealpha/test/data/mllr_matrices0000664000175000017500000003531312504317077017062 000000000000001 1 39 1.658844 0.456454 1.697177 -0.140170 -1.700637 -0.023275 -1.618604 0.143187 1.817362 6.739734 -3.744134 -1.678599 -12.395658 0.245658 -0.151918 0.458138 -0.981924 0.450302 -2.627365 3.946000 -4.309544 1.837908 0.327204 0.787412 -3.232846 1.324975 0.133191 0.793986 1.133545 -1.545364 -3.121740 -0.863377 -0.434769 -0.928298 3.488096 2.691280 -2.483173 -1.783346 -6.756420 -0.056027 1.176386 0.287641 -0.144802 0.284521 -0.260954 0.484907 -1.122646 -0.724231 -0.584845 1.147784 3.406667 1.377668 0.024459 0.192060 0.141111 0.120268 0.121169 -0.196597 -0.271003 0.502137 -0.859280 0.553784 -0.707492 0.662394 0.025228 -0.009339 -0.119899 0.173480 0.000935 0.648955 -0.452886 0.226763 -1.066551 -0.963266 0.070098 -0.017840 2.503832 0.047010 0.157176 0.311378 1.142777 0.518243 -0.308155 0.591694 -0.954232 1.302290 -0.268517 0.653788 -0.876877 0.563312 0.197567 -0.012782 -0.072142 0.083440 -0.027713 0.016758 0.117524 -0.213995 -0.104074 -0.517449 0.273125 -0.318904 0.487765 -0.665461 0.071675 0.074136 0.096246 0.391998 -0.225113 0.213461 -1.019168 1.130729 -0.857623 1.251452 -0.813337 0.123039 0.358284 -0.009870 0.063006 0.068939 1.141810 0.065757 -0.071102 0.132762 0.309100 -0.285600 0.562503 -0.822244 -0.564703 0.450190 0.022129 0.034101 -0.152727 -0.091824 0.409105 0.009798 0.127542 0.336276 -0.375199 0.006714 -0.150307 0.110288 -0.046956 -0.063795 0.037174 0.066769 0.093408 -0.285599 -0.378855 0.037653 -0.347682 -0.304429 0.023166 -0.280691 -0.295873 0.253954 0.096691 0.071534 0.081377 0.316997 1.291658 0.457334 0.026353 0.613723 -0.285063 0.252387 1.141488 0.064244 1.154555 -0.018644 0.028998 0.078629 -0.047668 -0.251977 0.001076 -0.317420 0.314838 -0.167854 -0.025921 -0.412723 0.364250 0.125104 0.042674 -0.021141 -0.027400 0.132932 0.309999 0.146450 -0.000990 0.301781 -0.218383 0.187151 0.100916 0.472391 0.111725 0.088015 0.155177 0.258313 0.056165 0.181952 0.887670 0.498853 -0.297063 -0.014585 -0.312201 -0.206012 0.796352 0.707932 -0.020120 -0.019185 -0.020694 0.110800 -0.065325 0.264592 -0.554074 0.069683 -0.654455 0.317734 -0.439290 0.476467 -0.459004 0.018910 -0.006805 0.031230 -0.046219 0.088665 0.055855 -0.104331 0.260519 -0.556230 0.151885 -0.702465 0.561127 0.249457 -0.137819 -0.231923 -0.197729 -0.194776 0.122926 -0.150293 0.749721 -0.406542 0.304467 -0.209206 -0.248758 -0.638003 -0.016376 0.032551 0.035189 0.055405 0.266370 -0.059256 0.279764 -0.115782 0.382164 -0.219417 0.238123 -0.332204 0.667383 -0.009459 -0.011395 -0.026611 -0.188893 -0.084391 0.144474 0.094070 0.262133 -0.291623 0.424523 -0.377022 0.259694 -0.561517 0.128962 -0.061064 -0.061182 -0.017095 0.050781 -0.224141 -0.412514 -0.260257 0.695635 -0.079232 -0.770023 0.338447 -1.536034 0.287502 -0.010852 0.002075 -0.058794 -0.190029 -0.039416 0.034664 0.147390 -0.031168 0.357937 -0.623754 0.330012 -0.355721 0.064675 -0.046165 0.000264 0.043420 0.228470 -0.082547 -0.231811 -0.122882 0.048155 -0.039603 -0.039212 0.415449 -0.688465 0.133058 -0.003032 -0.014400 -0.037674 -0.043037 -0.018392 0.030165 0.556859 -0.605938 1.072558 0.228369 0.115062 -0.155795 -0.487637 -0.019087 -0.025801 -0.173997 0.058212 0.000590 0.092779 -0.116813 -0.104109 -0.104660 0.039615 0.146968 0.049248 -0.245417 -0.030001 -0.058387 -0.032793 -0.144267 0.006351 -0.096749 0.413932 -0.566461 0.518134 -0.483914 0.359838 -0.310722 -0.278555 -0.012348 -0.097663 -0.149738 -0.077464 0.077950 0.462498 -0.155035 0.051336 -0.410632 0.748241 -0.101878 0.499367 -0.245713 -0.005551 -0.058125 -0.022186 0.205425 0.046191 0.211724 -0.296004 -0.010559 -0.040271 0.140500 0.438024 0.174090 -0.304542 0.028655 0.009264 -0.009535 -0.012617 0.114086 0.173844 0.349742 -0.097473 0.236008 -0.239408 0.092980 -0.160397 0.500132 -0.044784 -0.008477 -0.030726 0.057671 0.064954 -0.129124 -0.182460 0.085469 -0.090365 0.537509 0.451381 0.612787 -0.223201 0.013729 0.050173 0.018528 -0.125921 0.041814 -0.074566 0.266291 0.153607 0.533429 -0.359322 0.198747 -0.303807 0.373594 0.001919 0.017933 -0.005163 0.005718 0.234966 0.054941 0.087671 0.080058 -0.142029 0.237429 -0.095788 0.448079 -0.060138 -0.036070 0.015476 -0.186694 0.056422 -0.499497 0.364247 -0.058622 0.162852 -0.199013 -0.075247 -0.883502 0.483471 -0.285353 -0.020073 -0.029303 -0.069133 0.024901 0.028249 -0.004290 0.003234 -0.104477 0.266427 -0.144023 0.361343 -0.159755 -0.069092 -0.031605 -0.013498 -0.140111 0.094955 -0.308054 0.374155 -0.263782 0.299926 -0.309477 0.054591 -0.602868 -0.216990 -0.211422 -0.062189 -0.148736 -0.077555 -0.124126 0.033966 -0.385758 0.005879 -0.143885 -0.064713 -0.685989 0.296506 -0.565712 1.413813 0.001049 -0.005909 -0.029308 0.033646 -0.047543 0.152966 -0.060242 0.286026 -0.076611 -0.076424 -0.076999 -0.140283 -0.020257 -0.015917 -0.064759 -0.048091 0.014858 0.027096 -0.111285 0.127549 -0.133909 0.037310 -0.516408 0.402077 -0.338134 0.349384 0.133129 0.269681 1.253587 -0.054055 0.784806 -0.615812 1.725658 -2.254685 4.248352 -1.900488 3.812829 -1.918648 1.751673 0.797139 -0.151473 -0.202890 -0.321107 -1.614048 -2.057842 -0.214852 -2.380584 1.066966 -1.570130 2.748646 -3.400929 0.706512 -0.023138 -0.258856 1.372326 -0.386137 -0.328617 0.403584 2.345619 -4.924479 5.709802 -3.780240 2.635981 -3.205473 1.769191 0.018613 -0.014085 -0.247080 -0.103040 0.153980 0.388362 -0.205164 0.929807 -0.240945 -0.233319 -0.146365 -0.972308 -0.224435 -0.057767 0.983281 -0.558570 -0.343202 0.367569 -0.303745 0.720323 0.236601 0.922577 -1.403979 1.815979 -1.101758 0.819431 0.058025 -0.004031 0.090215 -0.019406 0.782604 -0.521679 0.011197 0.616386 -0.793517 0.452908 -0.296984 -0.626865 -0.092686 -0.116787 -0.047567 -0.221766 -0.046645 -0.353559 -0.239288 -0.234680 -0.157800 -0.456136 -0.052018 -0.196223 0.392076 -0.354371 0.040327 0.127095 1.009632 0.161981 -0.167650 0.130169 0.072246 -0.368206 0.304671 -0.539048 0.548237 -0.003537 -0.190645 -0.056439 -0.002045 -0.293110 -0.225561 -0.139074 0.236966 0.029825 -0.046754 -0.032776 -0.673517 0.322955 -0.114249 -0.051597 -0.021566 0.000855 0.058337 0.044372 -0.172670 0.077764 0.002605 -0.576961 0.203122 -0.024469 -0.125687 0.149244 0.043963 -0.052529 -0.019201 0.054239 0.854287 -0.020642 -0.192258 0.003495 -0.319712 0.665003 0.018705 -0.336917 -0.299837 -0.350214 0.039694 0.242123 0.058790 0.071467 -0.191944 0.404781 -0.245940 0.292330 -0.056709 0.321804 -0.149767 0.781747 -0.140832 -0.029177 -0.019709 -0.184637 -0.002423 -0.124163 0.302331 -0.051260 -0.022701 -0.685012 -0.182996 -0.039504 0.217396 -0.208887 -0.029531 0.011133 0.141651 0.054636 0.797289 -0.101021 -0.501432 0.147775 -0.461355 0.110514 0.407255 -0.023801 -0.083513 -0.009017 0.054667 -0.032869 -0.185954 -0.109339 0.044033 0.202460 0.081428 -0.187204 -0.318626 -0.049387 -0.117656 0.085127 0.004130 0.012382 0.122078 -0.007934 -0.241201 -0.072283 -0.187125 0.254390 -0.102644 0.526936 -0.746722 -0.091997 -0.318561 -0.004714 0.005820 -0.072693 -0.084527 -0.002701 0.623441 0.370243 -0.787661 0.523045 -0.720008 0.380031 -0.246744 -0.551057 0.014878 -0.032792 0.152815 0.159857 -0.052355 0.245827 -0.079613 0.076532 -0.015456 0.386173 -0.380545 -0.028127 0.002698 -0.015072 -0.007300 -0.098144 0.098511 0.004972 0.181316 -0.445109 -0.027712 -0.501541 0.564003 -0.239253 0.896539 -0.360179 -0.025958 -0.068164 0.050476 -0.034411 0.049004 0.415898 0.391744 0.600179 -0.934427 0.777278 -1.219482 0.632834 0.328995 -0.011732 0.017151 -0.053173 -0.002244 0.027801 -0.331883 -0.430612 0.214908 -0.594459 0.287152 -0.276513 0.946524 -0.478948 0.011709 -0.007112 0.006323 0.033501 0.166296 0.029688 0.111156 -0.124134 0.028571 0.007739 0.368002 -0.010987 0.009470 -0.005658 -0.082734 0.104629 0.031506 -0.039696 -0.184571 -0.228453 0.519967 0.075820 -0.553832 0.232887 -0.179355 -0.162728 0.021892 0.032479 -0.045895 0.088237 -0.170252 0.354847 0.020513 0.025312 0.493983 -0.280034 0.472434 -0.112454 -0.127079 -0.036699 -0.046744 0.030719 -0.086129 -0.197626 -0.223000 -0.184554 -0.207568 -0.059400 -0.213607 -0.291453 -0.321076 -0.060157 0.011848 0.038780 -0.099840 0.029576 0.008287 0.027634 0.231594 0.145058 0.961724 0.201564 -0.040114 -0.082093 -0.087597 -0.053927 -0.062295 -0.069087 0.125518 -0.294582 -0.001219 -0.535369 -0.112926 -0.568997 0.260614 -0.448750 -0.019417 -0.538661 -0.007950 -0.008586 0.145537 0.017333 -0.413017 -0.209247 -0.092618 0.045430 0.253439 0.225701 -0.359848 0.319011 -0.055129 0.029992 -0.061040 -0.054026 -0.137615 0.024252 0.495445 -0.247186 0.470647 -0.691693 0.952482 -0.221612 0.402299 -0.380769 0.007435 -0.050894 0.088012 -0.062145 0.023713 -0.261900 0.090293 -0.234853 0.051203 0.022886 0.370102 0.286874 0.042971 0.030304 0.000218 -0.059965 0.063906 0.072211 0.279799 -0.143078 0.239103 0.026399 -0.052605 -0.086270 -0.121709 0.303559 -0.035408 -0.062444 -0.080890 -0.066495 0.054973 -0.380096 0.079696 -0.269730 0.225087 0.034493 0.636769 -0.061852 -0.057913 0.025820 0.029016 0.053541 0.153253 0.021461 0.229639 -0.153829 0.245487 0.264525 -0.026602 -0.022839 0.303334 0.255775 -0.035553 -0.041412 -0.040367 -0.117226 -0.239726 -0.104981 -0.201733 0.160727 -0.296662 -0.013688 -0.622147 -0.085211 -0.363013 0.019419 0.018462 0.026725 -0.039181 -0.012317 -0.063800 0.319258 -0.247614 0.345329 -0.232750 0.064547 0.869014 -0.086943 -0.048542 -0.053584 -0.120923 -0.079666 -0.280694 -0.056879 -0.284637 0.297171 -0.099356 -0.151459 -0.282217 -0.287162 -0.215486 -0.023662 -0.015440 -0.042136 0.065535 -0.138219 0.029795 -0.069289 -0.086721 -0.039166 0.158163 -0.416983 0.229478 -0.226047 -0.014494 -0.031429 0.039644 0.093255 0.030768 0.161998 -0.251491 0.330786 -0.243659 0.246869 -0.253409 0.024932 1.322383 -0.016098 0.025729 -0.024872 -0.021048 -0.110262 -0.178055 -0.049962 0.085858 0.062212 0.034642 -0.313303 0.207449 -0.294935 0.380709 0.058545 0.590253 -0.485902 1.042622 0.240110 1.861171 0.100722 2.220522 -2.438559 2.765880 -2.628387 2.491592 0.056799 0.197311 0.746412 0.082195 -0.103251 -0.367900 -1.403242 1.251800 -0.464374 0.835054 1.698438 1.728460 0.073902 1.163803 -0.084921 0.700205 -0.773078 -0.004000 0.151872 0.081733 -1.129506 2.546977 -4.397213 3.404705 -3.605930 2.217201 -0.020139 -0.014877 -0.102761 0.069916 -0.091534 -0.080901 0.090621 0.355390 0.464411 -0.392265 0.128245 -0.655977 0.764595 -0.075259 -0.006990 -0.364470 -0.162991 -0.212946 0.161711 -0.082095 -0.021508 -0.131691 -0.271059 -0.478735 0.167899 -0.400739 -0.143816 0.795654 -0.635486 0.511617 -0.130459 0.269092 0.119763 0.787763 -0.143337 -0.331297 0.431448 -1.325655 1.137234 0.034900 0.037774 -0.028967 0.134512 0.138837 0.387994 -0.023791 -0.067366 -0.067673 0.141305 -0.096417 0.242421 -0.164624 0.012871 0.056478 -0.158241 0.151622 -0.025851 0.305490 -0.052050 0.538325 -0.398635 0.532101 -0.939270 0.427962 0.349032 0.102762 0.249983 0.908036 0.427035 0.082546 0.641014 -0.081009 0.276673 -0.217745 0.390875 0.205885 0.838000 -0.629418 0.138930 0.031560 0.020222 0.021441 0.344794 0.574766 0.218822 0.209067 -0.205533 0.310942 -0.015196 0.519464 0.170715 -0.024707 -0.107696 0.048248 0.025135 -0.401447 0.083332 -0.008776 -0.512124 0.846685 -0.854990 0.958565 -0.845788 0.098258 0.186490 0.105755 0.215912 0.687839 0.337114 0.755144 0.062967 0.530109 0.504595 0.239987 0.048304 0.133416 0.059518 -0.026002 0.011772 0.165729 -0.076717 -0.083119 -0.507973 0.052171 -0.411401 0.155695 -0.028555 0.400701 -0.012164 -0.335066 0.033087 0.029259 -0.046459 0.139595 0.139040 0.192380 0.229429 -0.064506 0.270827 -0.052240 0.352482 0.058424 0.213317 -0.008772 0.127075 0.331023 0.014032 0.550002 -0.419428 -0.219983 0.090561 -0.527783 0.228068 0.358638 -0.259885 0.328953 -0.032383 0.002755 0.085088 -0.073435 -0.098399 -0.545326 0.120251 -0.215987 0.426236 -0.125388 0.377588 -0.745462 -0.130919 -0.028214 -0.026560 -0.248934 -0.085767 0.043476 -0.068295 0.038343 0.202672 -0.452467 0.082953 -0.342896 -0.277320 -0.012207 -0.047535 0.025103 0.020587 0.034297 -0.286195 0.097474 0.448829 -0.901263 1.091759 -0.750993 0.806753 -0.832668 -0.323517 -0.045190 -0.008598 -0.137601 0.113753 -0.244757 0.364187 -0.521724 0.385257 -0.918832 0.456303 -1.055420 0.786424 -0.438010 -0.005645 -0.043635 -0.023289 -0.001956 -0.007401 0.150847 0.092639 -0.181448 0.518822 -0.211836 0.244094 -0.619038 -0.071002 -0.097653 -0.094909 -0.093968 -0.009526 -0.176213 0.383592 -0.202526 0.815275 -1.773647 1.285963 -1.661858 1.254459 -0.672293 0.032978 -0.016136 -0.015776 0.087449 -0.098656 0.358922 0.007861 -0.165943 -0.055905 0.022891 -0.212962 0.648178 0.026518 0.003560 -0.000037 0.027865 0.028668 -0.005475 -0.050780 -0.146955 0.125315 -0.614813 0.406390 -0.510886 0.419329 0.017939 0.050398 -0.039417 0.075586 -0.135161 0.018204 0.064242 0.198210 0.299810 0.350333 -0.729255 0.242265 0.076701 0.150063 -0.028340 -0.013182 -0.080058 0.023062 -0.101221 0.081993 -0.203020 0.115732 -0.325958 0.227942 -0.148425 0.304771 0.171976 0.030170 0.057498 0.143975 -0.057096 0.150692 -0.149773 0.319401 -0.048349 0.303607 -0.087335 0.234304 -0.157731 0.624590 -0.017136 0.010075 -0.112238 -0.028520 -0.082552 -0.068455 -0.106426 0.066185 0.635726 0.536498 -0.539102 0.410995 0.058188 -0.042453 -0.009399 0.088182 -0.042313 -0.118277 -0.395909 -0.080116 0.073265 0.288671 0.074380 -0.320571 -0.536042 -0.348979 -0.023787 0.011560 -0.068480 -0.011475 -0.073933 -0.038489 -0.046897 0.142294 -0.363389 0.456289 -0.956072 -0.061846 -0.142285 -0.059334 -0.078546 -0.048081 -0.119949 -0.217278 0.061175 -0.439031 0.452399 -0.595118 1.064058 -0.749515 0.091278 -0.773006 -0.005908 -0.049554 -0.061334 -0.075070 0.078620 -0.141722 -0.040196 0.127271 -0.008270 -0.137200 0.029007 -0.576643 -0.160469 -0.015077 -0.038365 -0.103861 -0.045791 0.108800 -0.024450 -0.028920 -0.052439 -0.372533 0.050836 -0.051437 -0.006959 -0.139741 -0.039275 -0.111173 -0.067715 0.050168 0.003648 -0.355491 -0.324795 0.111460 -0.106547 0.086532 0.898573 -0.422368 -0.200272 0.011846 0.001367 0.091165 -0.130810 0.300025 -0.407578 0.280725 -0.236661 0.371773 -0.240932 0.818204 -0.276554 0.572698 0.029758 0.051064 0.067927 0.016974 0.080807 -0.022943 0.014399 0.028465 -0.463056 0.491361 -0.377016 0.274130 0.159051 0.025733 -0.002275 0.046967 -0.231509 0.368737 -0.585830 0.655725 -0.533738 0.608929 -0.429466 1.065442 0.581402 0.640512 -0.008257 0.026729 -0.031176 0.006308 -0.026405 0.107034 -0.059219 0.057648 -0.250326 0.315452 -0.314817 0.277868 -0.455505 -0.007349 -0.037678 -0.018395 0.037553 -0.035913 0.110593 -0.073643 -0.199658 0.198619 -0.066135 0.192864 0.186765 -0.228186 -0.017311 0.013699 0.067465 -0.003809 0.051932 -0.005442 -0.218120 0.208365 -0.270185 0.510547 -0.390618 0.450523 0.656758 0.482476 0.266383 0.003580 -0.172869 -0.075446 0.040862 -0.042699 -0.043709 0.022595 0.013537 -0.011808 0.013841 -0.036404 -0.138828 0.020497 0.058613 -0.008249 0.003356 0.024817 0.002530 -0.010627 0.000429 0.004809 -0.008194 0.023744 -0.006621 -0.154593 -0.050488 -0.048530 -0.010591 -0.002977 -0.010965 0.018653 -0.007979 0.022647 -0.008024 -0.003117 0.010804 0.031790 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 pocketsphinx-5prealpha/test/data/numbers.raw0000664000175000017500000037334612504317077016503 00000000000000;i~[jM{=CU[@ !5GA^a;6sZ8 : 2gg} 3[& ^ " W  B|Hyoq/ba9qd`SKX{e9"RQPUOe+. ^J2[,-HN1Yp0Y WX>Oe)$Q C{2Hh'#j&*ih/"=n7S<cei~&5zLJ b hrOBg ood~FYmbvsYcDrhw5%A}_v[*gB  dbRs9C!pPqXAi Y*V YxQJ*;UY>*L\MNlt }. p~9;+#7Z*6ne-K/m%WBYnI{?]qU:-uI @pl<:\Yfa5.VA '/^ trj i 2j=WBv1VI;Esnxe9SBLm77e'Wb?i`kS1S-)L&RP{^z5W;A12ziKkE+y_$^=u TJ9o1ro` Dc q0=Czv \ Um \SG*sxqv%wZ|^%`-ZFiF#q=.0z.3Uy^xo3H-[Tz'YC1$l p!>RO<C?M1{yE7`vAOl~XeW( |F\0{1U()aSkXa}U<Ky4 HzO}zGs, r%/w*gf|\N [ J],[xmPF6#@*&AN.KYA^cx]1Ko8d~ \<><(X3MN^> #V)l{Ei/C%R oXPp#AsdXCj$ UxB}h"*C;`kcsDxiHo%Q@U)d8R M1cw3N lXiH WwVdL,E^1&xg#12s| ZpqgbS/9<Ll#_Z%rqO;%% YL%Iu+RH!DW + ['b#4SK^N=:`DG|,N\zLK TIBe,%YB E/Fk0 l2$FcG$SFDAM,C3r2<|8[ "(Iu^q>4N9O?I@& >|pE]D_>YL&\_{KGx l^ zCs([OnNj:!xh 2A\3 (bRLv]6B'<sp`V=x BDJB=[p  ChGFY )NhRKOw[%?V{,&d?`-kNuuxd; WKgBn`}m9^1Dlp)T( #~lTm\X -^l4q */5 y3W"zQr@=gqZzE Bzcbbx~?uP$@UfMY\60BG!m[ o:Gys*lXpl(< D.|;TiVn]h&H8}{&  m~jN%"H80K0xO:a[ RwNDKyvFL"O;%L+:JLMAYP` u<T-%cLZd+3B/5uo3ny^M`j4 o=q`>Z7(gR!24 te%EFz\*1(%0k*n{5e  LyfW%~h)ri 5#zJ//8+"" g/;~L/9 UzI.Ef[1Ml/ShO6 $\CgwSGI;-|:3c\R o,3aKpMKVN~m8)OEyO0LPsnD1-zE+Mx#a6 s!Q"x3?}o!!!I:@!VaqcT,< #cx($<KDU7#dULHgAp8Ug{]bNS019PxzFFA%YmX$_x&6@ >`7>H"ovh|9=|n!Ub-,yBew".BVNMd/1#@#S`!$"\gm?7BK0G~5 (/4g6++xPj6/[vpns`l8 mapd~ROE*P[uhX5adq xYDCNp ~{QNO}] 78*9dx)H~cpgwdExawU11=B6 f}yyQ5C0^D4D1ycLsQ 4UW7626?83yX 6B**\xL!0+&35,YJ4hA*=&FA4'2# .1AUVLC 9*2gFC:)EG_sD/Q4V5 (8/1 (J , st! )M%4-:1 $PI-! bl#5*=O4^l;_}=YqwsqvO.KA<K;XlTpyc{q13<`FQM9Sayyve^?hsB(#^d 7XU/P]p`rsE$  & -72Zj/<zWdJ:YF&Ybkp2 1EZ5SqZUA)*-B !"/*G5"/#&)I@ E<):o9% )% -B++iiwOFhLWqgC#,4 *NE/BN'%^n >Y`JG4,-5!591# .$ 7I"/2Mg]S5%#-* ?5; !6MH!. +0>  iGa/Qz~x;yRZd';0sF !XaZ; bBqWr^Y=ydznfXv%=($ TGDW|8.'*, &;)> 46+ !D:#^cLP_L`hPno`91QL/!@nyldB@PhT7VVdruUriymuhcL:7XQW;,2NLbf.# J`9$A;G# $,~uVo^+OjbyT5KTXr| ~~ & 65&;  A5   ]NCX^emz{nqp>S`zK,7#((9@WgEFnT ," <Wb`Z_gncKQ@;Tlvv|qX)2G:)0=/ FJJm%!_OCHL8j]|9.'-7+  0H3 _L$A[ us,($r'KJefg6m'~='_9cx ]8<550B4J8" =~SNP`kpvUoY9=1&CF#5D);*Eau|ZOw[R]bh{yZmth+&;7Jz_h{]@lw^jB+[}vwevuQ;HI44 )U7 /.V^#8"&23E-@?:Oea4P+'":U.H(   #&&R47ipP29SQ@7k}<NZ0 !=*:  ,~DUtmxG\[i}[mejF$D}Vqbe~pxok\OjxiQ~bl)@h]YE8HLPP]X7=KP56-RoR' AK)S (;&8*"<|J!)3$#,S>3)=)?*! +xvyDV8XL3.AU2#+A# M+SSw@g02y'2pZ_ncI` Hd|^U}2m-w~^3h,0Y*+44DYQ:d1qV_]c';"QOg:36oS2}ws4S8|J4qLFo;zg]Zo*,f![';0msPQiGdr?(OfG4 fH*yqm>`C$ k%GGFq^J3_ j a1 fv FdLh~ L~`uJMZ'cef[62S,~=f_ROv -^- *LVMy7SJB>+XqvsNgRm_jK.*qM*NYV @-?#l<= y L? vDoBYd>ioT8+5%o,T|q9`U e| SD*Wr+ c  x  !3 L vupd3?J$ve(q7pp: mqB__+(w#z X8G6 tN&U&X;CH{&FS4T BZ V&?NT_6} u  J  6 PX}$ ݵ۵<|<%&->"!&&%" 4AQk!,sjm4  } I?  c =cflX2/9 <|B!r=8o3M6VGt.3$E{A"[!<,5U#ClmP/  , PC  !;$ e<, {Q7u u^-^ ER>Wߘ߹g'<#Wd(-$XKFnIx 4lE6o%dk ` M 1 jV;g]Y #[ Z  F1P[Ob+M:M%Qb1/@ -UR _)k)W v. [(I& X+6dL@a : 6   p Q2 $% j | u `Yo2Q}RaIp*F|eX>x3s3dvG$&Q!}"x"L"P{OE,YjWKmmK )D  58 y  fb` -|OT @o88~P&s*o1jdp1$7,+ <!3!l~Dw!V$s!TA 6m:tgalN?/(u $! n ^ dt x%vVlI:DA75~M3ER= n,r]_w(Mi4u_ , j#"G&%fjU6.E}XzD9"u%0/ h 8 + ( _ J;0&v f:&?7cGCKqy @Mhd~a @q;$ Z \ #.!A+f2<{~PE S + ?Tz  ]gW ZH1&W4J~$5EFkM'7|#MtLxwv 2 C!6 ^ &5  t ZIf< M$0Y0 |`PD] I ~ % "s IE0{-Dmg@30 NIs%w~ &md| 8 aFYX H*/ a B(< kM'"[ D"E{  e ! $UF S >i44CKIT&[tW=/  W bV> n  xk|K6vrTXtXwtlZJ2n:Yb@ _2 8bvC3vDXdc\' |t^Rxi%Q~9z4mU   @[ ? wb93$ nj'rz2y??G 0{,@@dtE62+Wr>de2O\!Q:f5Hycx G  @/^z}ShUdOf 7 CIJ!R qPjKVbHTm (~' ^%!STHhJ+-21ahsoZnmJ\|v[ > ' am @  2 C aWd!&#!+=[FpLGY  =r w KI9 wvo"vt$@;FJoyAVvA'' e1 jaR F6 !\m#v#qJ14I{C .   5$OK  , M//2C(D={ GksOx>y C` oBa  xz)6f=n-x-zb O ' z ; >q z '7 - h55YY@u2 Q,SKAXcH 4%S Uz' N L y B4>D7ahg=~c 6 | @  D0 ym#UK+i1l^"rLRW'X% 0 Lj  a r  L!Kv$1<*z)CDc.0d< & W5 'kl ( \.:-H e*AE`GCbDAS / 1t v o p 9P  0(i3I?~"6gP&E/xe )   ]IE  o r]|b^SkQI\&"LT}_:l  a" r pn N 7Uru]r9V s*`9O=[( T x MK D [ V moYl%ExrS*lWIIYaWWwUbZ %> u m == 4    K ^N1SS4UZIyjwU $0 ~~ S+  7 P  5:soHlFw='!: `C, N KGD d ;[Pa4$PopEzv\ec O/e  T  J(3t{}#JW{VR 7%3(!B,8  o   qIAH[*NmG iWD b=2!Fq v2Y(.rNk< z& ]  -k)>1E6~cZ7$#M*+y,RZINw "Z>+ ANB/fl+ qiT-kcwH/q~(mtKrc># Limm)Qw:}]-r]+!%^yIIht@!`AV,3ag 4 )w`l5r-FD7uv*`B 81`D@8q>+]>WZy`u(zXb!<]^pR*F&!y3@~,-"VgRD( z P1Sh C31">(d&1tA/\7D20aU{3T|mHzdWRtZI8LJ-g3n)gy$ijC <SvkMn&YR\NbF|oK& prE|`/T{fdpOiy?7>IUr{x$)F8dw>*  &^%&#vWU& !m <&!I LOIE dxb'G``tO ~q5wG}MWn@d\J)}T/qduRFP RNg?8Dw~D]pTh{BbH*eUcjPmxsBQriPZ5 bG'au|?\agKV d(j*Tha6c]0w7\![uw?H 3WveN{4<3c6Z)gvjw`m ?5L|jx@4ZM1_BR:.#;h3 M96<? %sm}KArd-}n/ 66y+ZK/3cT)tb/P@+]3koV-_YgTaz?(=q Rhgw^_}w ?Hn^l31ha+ ',GaU^WrCd#\Etc(]`6ld7mBCXTu3B}G[' f |!O9E; F~aq3"Sd   yl#I\&zTqN(2hW/-)C4S4Xq!* dS8C8s*,~D\!nH4++%s)[R!z3b1S9Z\L'w*'l[p{<FMA23+^+2ON! TiE575!=1Si*Ty(>wfu7uX<$]K[nz5n0a`2v^vf] iU{p-i>u{d u8{$^0p'qz 31lG>upxn cyUia]Rkkobc: fy FY.Or  [RI%n  ~n]a#$)LL>#:( pzX mc32\nK#IM=dGwDM]c2_d:.N,.bv}h* / vr\(vGj8o:Q|ykR}yt @fW/7):A6Q@c>2P_e% QW9g' B=.VVk Yumlw>+;,:r[#ALy@m fd'~LeXfUby4=]%J;s*[mK p= >b/?~RoFjl=$mTx.%\=x(-s{` q?g,[|g5Eg / n1!B!f,HRTCFWCC-AnhOyOb1r4zwFP~e3?VQ%t WP):ZE*2f ' b & r J / ^tpf":H uQ/XB\-s(Pe lHt-  I~\' # VzvG@ 2<_~w'cE+]<qI D} _i#"r9$ E*0 Az6l! : ~ r zr@\\L_'s   t2Y U I ^ U~-#kb$"%1 : r4k}uj   bmm 3 Rb b # |Lv6)FowW}Y$rQ 6 * db%&q!  F{OV=rj9 ::,Pl  f * < ; {[ K  -.cK *<qv  :" CI}3VXF6,#dbHk~vL\t[*   $5$$yCot_Il#+W( 2 }jC G 6v p  A  ~S51T@MNbX43p^mxABY pSJ{/ k1U$0+4k + / >!'(#(y I^ Z  y*1c5P N 7rf9_ " / ^ C wf .u\\1  J  -7v | A z) 20@ucm^:<QK &)>$#V50@M >D ! * |{ !E qq9_UZ4 _ZzEpe*Dq N87)h&Y D9,0M*E-%>} }l [[i5dL8(N 4+ <`i   <3$=%) YbL\;m?jiZ8Pl* We3@\$Y-&q o) el`V (W" 2 8 & j v  X A opS@-ygW6q5WZvyOed+| #lGG p b bQH!$*n!Ny $mR WSG 9 f)6=9/'@ v N  =@X  B . " {,eJ.FwC[0)IUzi|V i~ 1JnN$$EI r#S&x w l (|@1S#_feq [ &    J 3 t<No tX;OmVvTRbW AVCUqg |> uYnZ  Co7lGZ n N~` P     FT c @clU^;BILsuN4=g7pbqdLpF< _ _N/,I  , PeC@mt%t v)r0`U:A B 0 B ) <   d ;e0d}~Jtc`y,wN}53H^N{ld%Qby#-S % m ~ nx*+k6y:Tcr3 ?IK,$ ; +6 %uH lY=x ? [Q ( A"b 'QnYruMn,` wP(Aya/y$\UXj 44I0D h_eZ431~t Pbat# fBX s k ?%UWnrvfP(9702F[ u ;MeJ EF~j ' nAT}J] 1;c  HJ_e'*p_}Ce5}:s*IU- ,   V T43am=8= B%[Ucy*_>nx W  lQ d : m - _< Rs@Z*Okeq$&5  &  `q fZYE k w4;HpfF:iwmF0.`G:  "(*e w9as {5w =H}i[`? fAT@G$S *   o B N\g >\N3Rw Xijp~\34C>Oj7ai-nr?A XAyh.B r = r8^RW G :t#]"i9&XF~alPr*k?$f\ } 5x B v 34 =JlYHRh!\T@yv}..tWB38)['4 B   *1oS kZhWF Vyc2Z55dkxwZut ;  vf) EfcKq*}&fco-Xa =3TLmC>$@ ./ &+ l 7 n6x\4"?^9Da:xkc    ]+  =:^ <iq S ~ 5 I [ A $~K& $1` zn4 R@; 0 h S 9 D' h (8 H !BoCJF .59 |_l.OK[nSKGo@@ U&5 F) i m # l t} ! GGh(W=;Xr<x}x]a xbA ^{!dT@>c7f SJ$ O8` +rXl~ 0s45CEOT-4l;H) % (1 < 29C*zp!G`_:8&e^X YW Xl+mN]dZ:9=s@d./l&AV%S$'Uyb8Izb'yi#=5$PIz/5d8=+ R7X_7 .TPN?uC1pQ]gG"SX8&b*D4H &Qla)N3 @Ur2EK$R<Ru<-i# ln`rY!TcSlI,"N|&A99at{?\ I4c Ql` ?4FBfa$;nH% ]l}d!rvV0-;<]by)fmI WV |y uw2)!=7?/GGrli O]PJ*N{nRj4<l[q )LXCVo&d_U,$50u{U.-VEtawO|wHnq r;f<x!c ?tG4O& =6*L&xq:p=36il-CSEN:eL.t%>R]{yFs<-cn kG*vn8!X@TpS?z/:Tn MKV [44c/)=L9s3GhB@Er?^~z  3 u`D2'J&'P 2@DK->RPR\_fBXMZ:Hi4_ja59TS)|Jik hjR9}p*"&^R3*  A\ ?-%;O%" }9" .%Q|O|Xf;[9<9"u>}Ak(/0)d)|e DUW 1Y)n}pn-nm@*mz%ggJtC3V\3L=J:olc,#?IJb -d4d/ oGtK(p4g.RuR-^O+eGt EosWWVl`FGh i;t:5T%4 ?EZ-!tou[z `"`Lr .}I#7G6=Q>41;ZwSI`q:T$2 w'qM?S;[n(8>Ij}j G X6/oJEN_5;##:?g< `&stAx 0Z 9xicsQdu,n+MbJj5j at4./4^;PMT50%>j|UuOzSf{`"F[tphal/|Th|kkZ X+VfQP_]xaqIS}C<Ze[hl"Hw!tLODZkdI(KeZe|x-t]7=^kr}*f"r,]LvqlR&{:zQwi^o> 2 _i!CqRissZveg 0,>gY=omgXPUT\(|[ ]4-1YxCZsR^]^6f[RFu 3 -v! t r_U!mI2r<Ine:/=` 8vV! 3  ;   - 6#k!H#A`Kk[rD+w:|I*} #rb I a I(A8wuTxT,~ '  yav^j+.qW;+.$Ogt  Q O1S< G U^UI CpSyxOP[4^7DP X'4!$$!q e` W~WboiIA   w e  \raa$h, / 7R  /k85~]0s{([<6pn `BtHt0oemb jl!7$A$C!uo0 ]tH&V 9Ly, / : J  K   8 )f""qA; +~  :/If]C D*xywQX|j)za)U}; }4} rG!{#"!%3P0tj8Ou    " X f  ( A- 1$M*J!x@ f 6Ls{Jd($ I^z0k2xX2(J-?B;g`cTft #5 #"4 `" QKR4,g) = n - "  yXHrQmN2 /a27 87-I|t\pwY<?<cVNt|.),PCa1~E "!cW, !qFCq#E _ N  X #2{=;;}9 rFpG , |v<"`SW[4p6baAT.:Y8t,o  ;b &8!/ uGW6 .X] q n  ) - WU^Z*j1j ;  j   K O LP.shrND3Eff<}LPjRDprykIEXh, ,0f ^_ W:uThy5nIKr   m  }UpRK > u  k -%WM=|M?w?[gZ+~'+ry3> "zej@u 3Y .!enW87Qy ` a O s q  e &Sxt%Ty^c3\ `    6  0qEY$^Wu )S> ;[Lt{n,;Z-O;,Fja J~% f) ?baX+ - j 7 i  | o00_gna *`  S  0 @L,c!uVK=|a [ 8,L>yYOZ~ 6yYlfnF> 0KW F (/ T6bP_`0 C 8   Z G A  l>PQ p[;E P g})J j M .L@A9-x`u<aH]EiwMA}na:pe8,+ug G ^o5 !N _WBM;'m8\y ( N ' .J e$%QNV,~(a[ H n e  .<Q S@1_~xP>[Y=lh-DBY?T1[{`ta7G ? E"!m i@NJ^bL - Q  q  /6 ^N4+p6E  4 ~ K "y,ch(rnB/ nMhuY^f^hNo3 8 $#T 'gt;+yFJ ? + m V   q 1Trd3 - 8 j D7 Kk#)mq~ .\\+t\~2zV~mG{ #~aPO #D$ pC& `  O O-p $ d 5 EXZbQ\>` V F|P y4 4 }  EI KNnK; s &wPcHDS5 > d_!h l<^U |Y ~d0 _  {EWI0@i ~ C? , e :dGCEdMKC k{9V>S6hqvBB? b onP{)C`ZP`+0? ) 6 jO D_/y+ U (n Y a ^A4" \A7)E3^(;j> nuaiQu1daG` ~U"" k<Nr G5  l[O4 r / f ]{ #=xHA^9:]ef2 x;-c^hz]#$&z$!.UH d90`C[C[~+3 G&!K\ (7T/EP-^% s j  y   ZuLos9ra*t-\|5*Xf( t#))%g!x 69pwV+M; a '^*B)7xnHf= ) !q 2 m  & P / Owx ~.yzgnNyQ*'kZ';M.G&h*/%:b S#)+*<'#*B9:Pt@w ,Sben&R Ai;T-d L P mcvGMW K @ }6p2 q0b!uPMeEEQ_M"y ; (.-&,R' .Y@wA~Ng tt z2 % j, p r: BMII n B As7nYoj`QM^|{0*QRfqX\ku %")+(j#5} $ac8g5U]LBh^ {JiT'^k &8 o!>h WXd# 7 T @< Yx)\{Y53E9#bDmlzVzFpav 9oAEh T%*l+("6Md\[;#bBb  ]0) v' V Igfy  ;z EDG^"f]@ K!/UkL SH){C\[,6JqP =Z^c.cb~0 -8 k')( #OC\ZHW7|lVZ#.m8 2MO~wW} lhD aB '@ W o 'i ;NL7;fO#Ts`s\H !#o+-*$ EmWVXlMU  !1]HF %m&Bg$ e!k s&;Y2f5{ v ? \7lKN:6r- @`I}u9GB&F',-(!! :S?vJ^K;bpc  OS Rt7 tx O7w|U0i\W,fSF=W< ^yi[jeKo);fGD]`'#u2o '+G*K$E}1y7s";"% ACq|qiCe]C / +dW y i-WP*Ea\`:lYq"?:&FU& $))%3? H s}om7\D0;FP] T?#|k+)  0   hf$,"TC6+a)CMyT> 0R8f!A #y)*'  yq3Gy1.  BLP _ Hi;3 y ' ( ^ eL f.:hY j jw,r i9w9,iJ&40|T;~"P%z*L*%2 [AsX_/xox,"8 3K: j[`u59Ai_ h 6 i *i+8  S W[9@MNR4]/!VV Z ryiNt@E}[kQ4%),)u$PSZ]^M!c5<-qt RK ,!< qI$_Nbs5Vb  2  G'vY W() o 2JMx# x 6e\ ;c>tsSUKbZ_"()Q&i  U6cK7"l(sl Vm1yu_#'&!]J) gX[E:|v8Am\ g ; R  v* z]cf*p l 9 q.oe%E a w[ \06|V'oz2L'gs;c# omkrq "!Z\ED isMjp]YpnH9 2 E3(0' r g # @%v=C 4 jNN 5w,` Qc2^Sj'g?n07kO #D"3 H:(=- V@4%  u *3| 3 (4 0z167+u`W7$ ib - K_X"&eMA#CE|wbgI F5iH#=hm`Xdx+ \V="#  :D K <wDooN.KI8>t 4/ ow}mPJ < ]>\{o h /0b@ 'twx|VubpE 05 r*8 c  )dw \ / s, ] rZ)iE n %M ;   mK>B5 cx$w5 !CVH,}"{r9@C{0i68VXPM aEIOb`nUIC'E  O ; S trk5h-<1'>Qe]P]  u SfA9~%dsBTy/q&xIVRD 1EhL9s{E %S' pE4 "}.g*e[ p {  k++:p VUBR? . Y &>:'GmB@`PaR|:"`'epK1"s}_|]W]* NI J| H  l.duujLJTq\f v I { \e0(& ] w"J" [ f  x~[rGbUv`*AS.y6<5 >O>LOO$vTZc D H xc"H pL.j[[=CeVCY  _8YRNtBPN y3. [ QQ/%4<:aUhwfNGvHGoy(8i6RNli0= V+Q qSQ}UU<0p,U|d R $u{K"]\/(a"3 oESXI , &P/=w>\^ns|[[SEI\vYm 3 a adX0 Z"tG 8{[EMoi.q{7'Nv(/zp icSaYpmzp wxPjL&Vq]%MBt@Uye5" , tdsMvkr11 hf9J~mnlO-{I MXyE,&(p Y>xvQn"~h:JV"jnErW/6#)##   >(Iu"H)g.q\u   ^8Ya5*\5N[/&-NO:S-RRFi4`H-g-Wj}B'Xd-, 4 6 |B!N"g22D5(,60 ) 6GyX]WVvk#[)C`6wX,%M9c:2'!IX][A2>hDfWA^uH5wm74N m `? % *Ua5mG,Q an U  @[b_g8/!DL%gmG'hoW-x  z?b@j7>K$#YBTM`^H:XgkpK\y5Z7 LN  Hm n MSQY*a n!HIe;  y qU~}+%Z/0-:57 <T7Y !fch D;AB* 8K * P&1N3|"aCmIx@ 142  *  H vwXGt4kNs + 5 opLS+P_u-b} |=J= | > g>@a?C jQ V(l2`PnvKSA8-O*_.% [+ Z 7  uj<M&fCo}du:' +\"+/ &Y%D  ~8H[t9"K$ I%y}d$F/I=`EdsT,u50GH[f 6 = ~p33 o%+6_&tz^2SJlZ62HlBS3o  (K#EEBm@P.LFcdv5=Gg39D!>  XoSe Y f  \|)lo\E :`JSLmU/>>@_jrMmU 5FkYh ^m4iqH^!;YjG J>`{rT=@jZC$L*qF.[IXe%z9lMSSta{h9j$qG7v;OR~2NQKk 5FB%PD58ae 0 GMme5QUw &Xp-:M-pFeF,],9/KRmd BCTjfx\D_^< # y "dJBB`CxPRw+Svl6|hV=7jv`{XZ<^Qg93_!M\x&S4y $vF?^B^f}!qO9 T*sVqsc}DTH 00w:-3LRrYi:,W,Xzv K.xM0)86%]}: XUqrH+20@]EnSVV7JI7K> g0%\gV!fR,QIT>6*?D-_y\;x(=,X"^=!CxbjNq9:,;NBH?q[QZkI9,_!9)/Q7{o( Dr{&PPu;Ej-5x u7uQ)~VmJ&novf)Jz|TaB$E~yN ^kUo#jc e>_B* k|\ Z vKHGz-b Hy:;r6Uv_*v +Eu?RfF$ 8lVR<uK^II /ZNn-f ?$ c 2 oJ(KSo 1 SxTm~KVhg X lG#D{qM^T 7Vy3q_FMC{+ QR& bv+%i"mO+eZI4aOV = xg`$0rU ! RR^pzLP[jV:=EkhOR;NBzl~m_lg E2Q,[:7 ]! C'YH`^Q%nw3iqNVP ,:jPYqbUm>l&CrS->E sz@ #wxh7$m p1. c  e * $vVQz[e9" :p)Z_ (um[$`z<tw u !*/ JP =Ne;K;g^lG2` g@pV*vZAK+Xp3)# 9eYx"Q } C  W oT3R E^ d |]O8=.!MxqHjF%z5# QV5%T7f4q&L$ QK kh gf *c [M!E[~r_n6\L?D0pQa"Ue *[ [ x 7}< `W"P _TbZsm[vg~.< _Ha a) Qz\<1 u/Kl+C LH, eF==xz .}s?c4Vts1Tg ?/Yty O}"W*I*jY 6 mxk  d[S@v]wO@5&m|Sk { dQ>c jf8KcQx},>JZ{HN0OIcW`x]JNH8V [tVBs TCKc7f #HLkPx;h#vMg?$-B we J$ SZwc f(i&UglPdC`(v)E O 89g!4rg="S%I;;h[<>{`:,ZgGZ-nW.*PI /_g`(!D ED><Hs >%ioqsL |MWvEINf~}s[//^(!t.>pL93SQ :<I%J)(G6kmlcF qt% DKriSIe{D]g  BV(.iwUbc[ts jvk B`*|`Kq,&J3?2_ 4S1a>_M+Gfh|aV %Sf5!;x! (WT%KC=d@XK_aethwYP0W5`0zPAZM/5xKx c5J$U!BNUX%veyIwN0OE; K0u V cUz+AE$QqcKVA ?#R**~ 1 Q\PAY A$y O S,ERH8Y, Y ++UX Ek>oa_Yxgg_=TsbrF~} f wU?T\K ? enT]E n]MyW#$ =t isWs0)F~ gu4-D;8i4r :>CO whu8H& )%.>HOK ixwy6 I:l! F x @ os+Hcl~;:?;/LL-[xW)Y2z;Cp1(C kjlEz44F(VcwxbYSedSYk>8_&c-5(u^w+O6N0  G';B_IxmP4X )t nAG_ r5^52K'hv~Kl"Yso}q5 sal 1F8F @C\[Q&[e_V*> g Wp|Ij0Dd \* i ; 8 Iot*)=YE,7N6 c  twoAp/A>*"p1 H \ wI]16@ bFT7  h Ik f q sOifw5V f_(N$2 `#%D))JM sR,r  [!5 $I =7M%`*|19j\ ]\M! < w{M #y " lO  O=opB%FB@#q1AqIh"5j33- e f#i x A hZz{v](H! W o]Y]?O:riTTBPaNw!xBRBz;~%?giQS 5S" 4-]BP YpR= gqxs yy/./QWp`>%zLrPv-EtOCA"FBb1u=z<*TGiaY>^l@"[XV$a':}'2Rl'&Dp. +Bo}g{pux7dmu}Oc~UCA"'Km~f.5EX+0RkOOgT+tP:H_Ds${L /$>4Cchc-N*LJt.'~B?>]  $$2{UZpU2Sd (2'93-LK'5 Fa98 .A:J+!  %FDP  : zl'6)EYhZfZMbuE1h7:I]CYPCP-:p_/ /5VoO1j~fneC@shMX7;)&fK) YUvtD6IS.3O ;])CC7 IhenE \O Km-a+ w0M rqnyvbGE ! # xycAqPt[14hyj*p{(Ju4/^C'EqTRFrU#D=d YVZ/q6I=,SYdv GT@LTgWQu^D./6!;' K\vwLV(8IZ;WLkm" ,: ! *K"2tBa\}G o} 9b0F *Bah!P # w gzilb(@ $84"{H]D; ]0<c^6Kr;Z* Dhq;j"O9P(?12*5^Jw8 AE0+9t"Y0kD`[ | coH,P= rj {+W 6 /0Mp|:dx  F  eX fP;rj:,t3}z T { AmSJ(+Cޅ|{## \ n V9%hm ag Z T U? T)Sn|[KnaOD2z)V.)W  7 MH9 scQF ,PPk iB <,')Ad,I P \m(+ {V =q  zkG  +/ ^q*  eZ  Q /fb]R| fB.N?zdL+, 'c. [&lK Ov PpoD  TV c $ {p{KRa^i^@7=  C"- :te 1gxWV89(~T Ls1m=x3@T9 EAX{Lg Y0  ;c Z *BEH&H_gRHpxTh^"t8. nU'X u^ ~g \ 2i4=N$ kkCBK }P>).%Q d I1ZGFhj{ `/tg(0'hr:r23Cer~eKkag2]2_6MF-vQTwZC;O x/T~4k_R)J%>$v>xI~6en^r+oI 8TO kGMRCY>:Jd 9 #se8j.Py77MvC)w6g@ ==JAp ])=UuunpwsDV&3mTt%\iG[9g*OrVQd}. S0 hH@9"HJhd,LW.b$tcbUPXh0D,@oi"~EU4!K\_:NIj.0bpGp8 ^/Z}DD|^:]G-k$q^TR L1:zyN8d& rr-l7| BhXcz }GF0 ?($jQGKH_{v$ngk 3SK T.? WS,M?uz@h1WG?pCW(LfYqH]b H9s2uc^~TF.=l+4acOH r|`u&rp6 ~c*6*<RX}9>G47 ,Ve GGV G  9 !JVxi=yP?#.%|LawzE]#h- X/k Q/^'):V usIi1 Wl)9hB:2K+6 y  Y  Y H e )EwD  I" wZu,D\T)2@e@s}5u+w?4kt K'wL@"jN8~ 20  ^Q2VM_'J/6}C24 ii1K >3qQWxo8_.~ai q04"rp1+H . UT  s na=z PW0F~9t7}hQwd B \jy8&v ~ri&y S QN5h C.{q@;j47?k0Y6 ZXk7jG!p?7IVsG8 Ln* W_ p y'h=)MX sGJx n l Pkw4(~:`X0Yp* *O k*BJd*rQ;@HT7.o'M?-9Zgn| JT d5  L,NI 4!_dc@8M $ _ J=TH8t{G_'mwa&#  aqFJIMs!3gI9',@e*]ES/+fYN9fO6ss{& j}i   8j5Bd5xPI,F n  4hA|j<']\`J ps W  Q #6I#6OX hbS 8 k!^ 639'mNUO'% Ro 2:Z,D6S4)kpRg{HNk A a Wkd Zvg8:59GBINu' W@ y O [f aI 9kF"/>uL/&?zMX`TVgdRot@b LJk %lo } Qf\7|8k.yer/_t{uubp  #ShEnwjV0jg  'E Zun{I^%AC}/  Cmix_-3[E&n q ) 9SAs.I)AG4#3n[\  RBjPx$;>zj:d  P H G  FiJipN?cX7g{xEF1Ish3|hiLKx* U % . @ 3h%/!0sC: %;i&%UGt1O b,09_I2vz sa72B/ Fc}IVAp>,d[ibB=oDuI6~d-U]Rl -  \EGwd<9Ifgzfqx<zWCvM. g;-U#(b{skq1O(z}V$g*|M6  nN H'ef]^LQ=F7v6V0''*./1-^V;1/.m[\oC CX"aH"m-&k,hO$ yd~ M|2[.UC-  l G  ?Z5'R_%ADJ zfwbI*sH8P P<)K5$d: OW8y@]R#JwJPODZ\)yheV3C{_L}ysiN6{6.w>+` >'2]L'NJ.Ais?hJx~iVZ[Z`?H0L"'*f2=??L@ (MO^ilo> 1\gJI,/}XX;;84=q{KL"rNBO'4mpzN1 /a *q x@f|hfhsm[?sY}3?sW"~y#} = ZkTgg^Z`, 1-\9#y%6oU%6 x _:'QGLMg!w`CiO=9@qC*hrB|I/+!@cYvO~I_-Dh<s i 1  _t?i x7]cm +PH;D\)6Mf1O9t!n2c-) .AvzL/D%yAW 73H08Hl-l" nPAzRZCx D CHGb=?vm]MZcq-(V=[Sj>5P2(E_S>=zg;5T"l*9=0l@R_x\ zH0CS6/Fx 3Kggrpmc(bP2!&rmj G#i'jLb2j5Q5/bx` qJ^/ wbl[9*@40H/"G>t)?t W%wjn?0,1Jo{ /L3$3< )% 5KXCThm_`SeculWh&^Yod\sjRku=G}ju@1{i].@)#E2Q\EE_la ">09i&9_mV9t{Pr|slvZx^a*lX2h0 ,(%/ iU8grpJ]g[RakOKeVAO4>9*L_`VIJK2MI-$.19BBUVF "<65++,Mfthou]e}x^\qamw|A-ogrj7/dr\918LE`c16bK1B)",hvQHcrWAtgI]YJP*"* ,/15.D)Kb]_Rs|dO>;GTqgrtw_-?SD.EKC.(..63&$' j@ K{@JyGS>,9lulfma~;J%M_zZ!| X E walX[&r/ Ry "z w? jGZP2K q%^A UFv l_5j/= pZ IHyYR carqQ^IoN @ %+ oXq MXJ@%Jl 59Ow 441  I-  45 CB5Ua j ]:P 4 2 VM  / Os: 1U:VcXu*c$Si$ L urCCK H-09C :0F& N {" b OF k  :mx+ YV `z!^[ 0G+dUPy 8 c| qZf ob_>sG/w5  D*iYu&)@@ 9 wag[ D=_DJcYFG$  IF  iaC J)5 d| /;"uvk < L)~e|~JX|H`* VnH' <kq &4fbb& ?>^/,GFj X/Sl E3?Y ]6K34/Vy;i|jr, q R7A|EdPQ| EuBA?VQQ=gX:b2HY#1o8%A:[KJcVVU6htSLx !*SJHniQ sPl~  HS{ p Fh Y]S!hs 7_2yY[^d'%Pws3 KtAP@LZO}.H[X+>% OikG) ODkC,:k` 1R5A]vy[}t,<.c3(5 h_H3qj|TC&n * +~JHN1v#UaW$>+ ?eIA3SkX)i^g. [ S1'#tF.[\THt/p+ |@n+D'dhu+`/ 0Oz4[rz5K[**dRelQg-B?,^gE~4Q0Kc|_%:SU8g 1kl8^[9ojrGl4r/}w\Q4h:H{z"I',k]Tn,@=`Smz" pg*PcP1<>UwBBlre+9&@Uy*j;h0}4Qf/.yx5 F'K f3>}yurpi  r9O#Fj47# *n cVS!63,g#6%iic? @tRin6j~ B2 j{B8;7e~`,|;R}8x{N"yYK'("]zzw-`#Vi*Uw46Aa1D$DQm{Bj/5m9EseUSlYmVf93_H7 H{vGH`OQ^(MYGS_@D f t5 vy^r YYu0R,dk0$4G*@`UVb[uz &R MO{dnpF9 vU +  z zo#.tOR7~81UR {!YRPfKetMY%g"b4z]Y3#2 zG{cU.[JGa@A;  ] 6 zNK\F\:p]OYf;?V=Kb,| %b- | -Wq ~+nY1 j oB>vFo}'M%CYSj;lE_OF` V &5||e{,Dk4] zAY+{, atI3Z 7&z 6&`sjQ[u1i'%;Ab;pUhO n c6 orSC!\MA*vE*-, y<dbgss;p5+$|3(EX~B/y(=`^Y .s`awk.u   WC-s %9I(0 M#=_akUo g>~mQ Vu;$:gvx:>sm8~fNJtx]3'nyy2F>t8gdd6 7 k z4 iJ}"W|A<~C#f*+s 3+Uu 77#<&L2]7IQaVPwRO5@E#]D}UG0(XnuoiS!4^L\U T h r8 4tP_Pt* ##lcC. Yhy>" u.q1H)DR-E/:Po(#~IVx= k_K_l BNV5D&j TM  ^U< }  DC/eL{=;pN)*T0b+{ =N|~P<)]#jrx<0:/;91wj/u[=WHU/[sG7Wpb%`3 /Ua v.c=1rY(~%+AV >O$I05!x KW?s\dU - i\Y.}`p@)~Zn0y8 .DS i><=nnMEP fW1c'J  l h ; l qS4Gx>{tJe$:P .$b(D}@GDTi+x3ZU0}*U'..} kX+D 2 4 d H 8 &h "]&11F\U{-7,o0~pE [$sh(b=HFah}+q'_ hQMt?h-> p1.pU-Tx8 g w  3 /:^-k/V`o3>SY38z$EF]=BmiBUVOY`qjR8H+54@-H+L< +9$1 CY4kC~%O06$N LJ '  FA:/z\!fDcco %uK!?^)$$ ,>_=AzdXs0u$-g-n=w:6JO ejs7co15d2kr O7E< ; ;q?  vY9?O| {YO cdhP-KW m02u-:5-CQQ>Gsn~r[ Qvs}`kW2:{Z\-]MZmAF  `q6PQ)%S2L^lS85g6Pgd,G|V eS :e2P*&eM!tfgFcm7B/rncWaf-RL: @t6hH$U_f#S6a(t"XeSf( ]aKolkf[jN~WXm:49Vr| V p M43=D_lzO)8312gjGo, df Hv4x@)XB!.|[2,t_'H{TPn(gQtv`G1<JT`E|tve"Vx}M7E7^X^x1 dEt- ] #C^'h 9n%r\=Oj ?"Q vvl/-*rGdn:={MSqthPX1mM?@n$[4XU!BR:=k{?t>VMtKvE7AKk2>*7  (cWt_9y>|zM/ juReRebO: WZ7i`!Z )F'p}m@r;sPWszUp4Rt.x{=.-#5_[*7Gq#: vLydf>^)HhxVt6JHsh]@YS0~gfh S"  :xvZ@kYV)i?K4t#F]Vzm&t-!EbJCQ^E5z/IDZKKoY TG{2zb_lHi&%H @x2*^t=$=m)YC~nkO}!j%\3CT*N0O!,hV:aB Bj+wx!#AfbYvk0l+J5Qp>HD ,QO+K/qz<3Z<-3r{gS gfQGPV&<GND>M;0/q3FC+tma}&R82pQcIukY!f$iU&75OF 4Z=p&Mwi5uR5zCV5mhRhX"{[4 |85bP;5@nvF&qX;[{}Y4~,x}fV@ G }^.55Hc?DbXWnO3k > eE==Q'Oc\og}jT)p`_kU'[{[{3zf$$6gy`@P[+syjKj)8|/0*dK*U?IhKjEX Ps@k>`cJ7F'=Mmz"!S@e~L#L#SXBD_W5h_auP:1'=kty4k+xTo?cr`>91:UTH_;wM\hg> k%2SG@ `9@)'3l{jZI eOUng"a\x@gs@G~ZQ7k:E S/HBHgn:RiUcV:{mynKxgD\uP8A& B:AE"g}=i"c"z)/d'u^HFmdz3V2@ *AYq96x%'`7m@Q#]V fx\j9JyQmBGoP#s>WA P5<ld" [ >| n*6tOaqZnD**B(:B9om$' XxzK96f)x:[qTg23VmNaKtS6j)Srj<7i? &5jB@&t-2b5(;a=3I3Y^"a^<w,tkI P;#-RrD;\MOl$vjoS j4duu& bR$ 9 &E'K&df7UGVn\SaB":y[%XZdOWsC#=;9+pZt(_v#C|SG'VlVF` Q*@ ^M@:} @&}Te;Nbw;=rJ_`#%%AivJ`g\xDO&>VH,Isn]8!b 'f\**^,`JtNhO QIzolml0}O>r ."TWLtl8E6(y|Lth*$ &i-M_hB}zH:RN?|{FF3'; QSA(?P0w}}!o h|4 2a +  *WJ.D3r?8r>3?cwjfln tvWNwt8:;68lL8p|v_1 2^pTmL<>8Pna y8VrkEgwqyu_PLqtM -toG:,U 0}U1AK^MD2&m{_.%w]"7TUV9%,Jr l]V6&  !S4}p!=. -q:+L:Gsv^T\tc/Qj#I: 2uv(J- z}Ea|q*38)>MPXkw%@,=oVag$?gT^bMR?tX/Cvtfxrcze|LtvK[>15U[1N XDO$']ztY5/Y*+.;8+ )D&6<!1^VDE0[aJO ZBa[iEC]_O?]I+P58CC9B(\XQK[j)/ GOlqpqzbD7BWy_Htijc;t(  0SYQB^3!ip)<|hwr^Lkn4'So{jM;GTq 9+%VTO3 yx3]y;C7, f5'!tux{kT?=esU'28Wc?3^R(bmq{ JHR" -())    7qyxzbd!D=&RA5K85J7%8CWuvj} 4 zV\6?--;8J[u]-kLNk|R yG $5>=tJ8'1.<1  WtjLIWIENME*   j;1!anh, 8GvR e{)88%.7C@-bnj=4)&2-BbaHE7% ^oMEUXWG3L2LoM:1L4)ZZsU_F<'n=UJqjnqq~mbbM[cA?.bUQff:0'&:5+ Y~zng -102W^cqo 8kw2m2EdR_n^Ys 1Witu/L|wt6'+!Wzxm pA6hPCSIP(4URczqw|cg~sZErUA * kroR]zokI(YBNH>lTZr=D.GtzrJm %%*(:9MaU[Td~aZu=6 !::04& :8C-!9*9B(55%fVB18lFIip~fSYyvqSB*,8xQ)EWYlsm5E~i{{``#ubI]jSQ"+P0?X)5%}ghP}m\`9 %.C;FMjrqbIK02OA=! gO^J9+3+t{@AZRQfqmznF`pIQ~Ko}ifgr2*;5"<34-=5M_x_wt`vzoL^zckir" /0 G.<"22! *h~\ol`gDC$)j`vUz{K%XG-]Tjwh&U[c`d|l) pht^G[rb}ZXH !#'1 {&1L+.E<IXF>z`[SDK7JJ>   /psyTlukdwu*#=t]GREFbV-4##A$>DVj  2?GJIKr}M"&G=*5.C8/hz 30L)+5C=_Y[9/SY}xchA<i}8!'#@%%.6oxzndfL?"6)vPK^%"I$7:QKKRAJ ezr|~|dTTgkziO8#;>_utL~kN15D0>@AD!94,1A67=*:13#0D -F(-ARNHmcirN^b|UKMIk?MfI949TXal6N` .J^T3Ku}dw}psxpZm~~b`'C ctwcC9)/B=@Yj~|v>E._Nts~`hx9FpJYP]y~}o_TIJp L(;I 0?=86!,* bwflxu :=2S66 @;ZUW`_`cxoqEPX+:r{fsW+=VW]RE9  ;I'2--G? !5   ,D?S^C,G^{ox^U:Qrh_XOK5p3!; mxz\{Xi~ey{icQCvou}notlr^v~emMA{g|dRaUK4C/L2QJgdOE@OpzglnIGb~`e<"&% &mw_Vs d_T+`zk~Uo>Gcg`UYQD<>$4Pn]HVae,Sxts~sk:E27]`Q%'Kfvujp{XQ[afv|pftmaMO2?\cc}yhkOw$,5Iidm\kK)E2+@@9#   &5\kTOF4-1#$(.E.0HgV\Ph[h+"nzlg*2b3/QP^goYL`MAKXoiubDT]TcUdlDAB?QPZY3ES-#'CN5IF)7"QbKiz~rM0]jb_AA>>+?[>JYvl,.21(=V44O%." # 9.4*C&! $C<*6unve,HU?NHE6NT ~~`pkb]Rbfmz|bT7C_J2[VPxeDQ>6Y/.]WS7>_elI[}RptzyliVG^uV |hhk~)( $'kya|ti}XQgU]yxeu^kX9!Nd\~ch%84&%=!( qLV{_TfXlliRW\5?37a;!Af~dgo</1)/'' #"7;(+& 5R<"L\HEjczqsbE2+!H>WOJUKTfhmY,HE94<9 ;!-  LhteL?fkB!(DbzcVPN9)K@*)GKXVC]jxh<8AW^drN+6\Q*5<(  AJA@530-:OW=AI.&6'F]C56aT0 "  39.&  <*0.  0(*^VE9CC/XqMJc`{xhpb0@Th# <-IF)!?xoxysdz}{ztyosxwk}w{ceG41  ") /@/%!*OGJC;__cfmfNd\8k|ybYmF@_f`\t8>?> #J07HVnzr~HadbwqobQ25!3-;=H]}jq~jbctQ@Igrk=*L< 8,~k5Lmv}s^Offc^ .0%Swc8yKE^hZY}`Vf`LM:KI7ITYN089[^ +=>I+ $=U2O{dakB WvW45YS]aAG?EEOd\P]UytSTCCN@F_q%  1)%;/ B5Yf>A*!3 1f]qlZ`so:>&&I9Eq&TGVQ`g<35*6-GOESgww8<V'O8 6 )OQ@8FwvdZNNG/'=; 94@7jOLLkpp6 =J}|^Zjs  ./3T; 'R<FFDG=J 4*$ #E*oiEIFEY_rek.P?..UF%'++##42#rl)5@IQ<?]8V01*)NC57Tpo  #   $ZW* }  '8PF3;(.:%CO|K$5E?0)dvqxk7 MaLX4  " /& &xl~bG]psX&]sjP"83-@-zoAA!O+,=-&(<X_\LL`:*0?c0' y~av}`ariyqxwst~{qYW}m|c`aJ>Ebu][DNML~waHYZ[OdjOW\any_d\pw?^{gZuuV@('[hdb$%,'%"4E@% 8),JK*+F. Wdd|[[W1,! !,-Q4C>:qmgu`@fyju|DD5,x{hkxvxr`iR`E   D&/:1&8^Z]ISzbTdRizQ6L#&GViV4]a">E=aB^:#:7MI8?B*TJ&,Oc6 "+G3XgoJh|midvvvqxywvls|Y[]ee`;-`O@$&+#V[  )&")+ #&S?0<NG`b}r6L37/;dohruqTLPOlu\Zf`U}xtAibXcroskm~)1 |yoQN26BD+,90:99:493 +%.& r|~ke]g(4*s)WOHT8$J:8<-O@567Hq_RO,LJ4C%) + y|mT}sUt! 918?>9tgw`Fnmggm|t]UQag`pDTRiS`v~MO104>_   ( ,.,E $# 2 )3(G)?) 098(0"-$@[E  @(2  -5vdgQNVVdQ8EhqxVav}}p~oJA6A`Zu{:NWwqcdbeh{l}rT^m~x>*<%+&&0 +!!++:<B!7CqhfhwxdebL]w[_tqW\Ewl $B.Pdjdf^H$#+ qrzKD]`Y#!/ 12!7$ LN9C>FQ+JPH]3."Iezjh\EBTYWE0[wi`r622Teyjq\MIMWWDWZ\vvmra\I^jzs{rwa2?"8_G(*vsoh=<K9F(*0)AZRN^t]qaQSWQb|tr[{8A<(, =I-& ,#).&$)/&I<)di=FlseYbzo[WplI?TQ/#)$)JZ^jpC,'HbK{qqz}ry|}skv>RaW9IZXUC---%1{wpwr$y C}th-}oEX^Ip(1K@n8>QuT1_b@1RX49|CF K_N@dR8S;iwn[oNX~[-~G|JO@U>iZK )'sx&@0M4 (1.%Q".HJ6?ZS1,)X[<M>>N-$2  7 x`yg.EXznw}WxzxsotY{`Rrjpoqiywx}rO{{WWLRO?PJEMj^tALF=GCgO>>/)UK >>7"43<GA6!;TX7HOE:GXVIL[AG78 2233) bh/F=/5. ! 7CI*9?% @N'B4B;0+'<(#.+7,U,J<cAietTJyu)n K*qEf{}^(3&tXLM iL@xbF,bbFf@&/`:a]!7=&("sYlLZE\&UrYNwsWrFUe#"-2`>ubmr_}z{eu/&1<2-mo25"4-~Lf"^ 9/ ")==)d[BfV?/Pp|@$Zs6~}yD br$/j\hgDQv[7H(l';rx80Z D$rJ]qA\}Raba +#]pocketsphinx-5prealpha/test/data/unreachable.lat0000664000175000017500000000056312504317077017254 00000000000000# getcwd: /this/is/bogus # -logbase 1.000100e+00 # Frames 10 # Nodes 6 (NODEID WORD STARTFRAME FIRST-ENDFRAME LAST-ENDFRAME) 0 10 8 8 1 test 8 5 5 2 unreachable 6 4 4 3 unreachable-from 4 2 2 4 unreachable-to 8 6 6 5 0 5 5 # Initial 5 Final 0 # BestSegAscr 0 (NODEID ENDFRAME ASCORE) # Edges (FROM-NODEID TO-NODEID ASCORE) 1 0 -10 4 3 -10 3 2 -10 5 1 -10 End pocketsphinx-5prealpha/test/data/an4_ci_cont/0000775000175000017500000000000012560377662016545 500000000000000pocketsphinx-5prealpha/test/data/an4_ci_cont/noisedict0000664000175000017500000000007412504317076020361 00000000000000 SIL SIL SIL pocketsphinx-5prealpha/test/data/an4_ci_cont/means0000664000175000017500000003715412504317076017514 00000000000000s3 version 1.0 chksum0 yes endhdr D3"f'׈`'jb<ԇ>=ͲλSlͼ% lj9z{B=~ۘ<=g< >W>81տab=sդ<6_ ==J=_=yM =9Q?6^>f}pus l;ZY={<QD&`!v;L}@L?AǾ{"9> u<%E^ɰ=^={eg?>,`콂X"=RL=<H7~(=MļPg~e=:v=7<>]7@?U7:]="} =7n''=%ƻ=üLRH#=x 9݄>^j==KK=S]<xU͒< 1յҥ<> =j=|/=P^=1*+x%мuf*==&=cKޱ{c<s=[2=_(ONpO=ܘ=)7 ;eAbOUI=+=>iՓ=>= ='q9=6ͮڽ'='=R<0<5>pX=#=آSal4;<(ka= rI =">=]>{7> {_ҽP^=6i=\E'@e>Dd> ν8q|4[\~h}"aa)]Y7T>"H=T=6)v<&=d"=HLF7t[N:Ev̼y =S!i84=X˩:} Ҋݼ=SXZ=ƎX<\Ka&<>F5@24?ȍ>2ҾԱ۽Ҳs-=0e5I?%>6'.>>R\]X7RU=_ս EL< +Z͵L膻eG<~s3?9>J=u±=bu%CJʭ<9x*]>+=t<;^ŕ==??-=6ؾEn뾟2hh<~ =Ӕo<=Ⱦ>ش>K4g%|<^>2= cF` &=Q=v=&[= J%98_!>q=恽o(ƽV@o?7tF:K -xȽDݽ뻼%>oe(D=„p90 OcSW>f=6>p=1>>x=׷$v>ټ\ϽETa==̩H_S=q:%X=r==B=B΅=#b n=PH=0=zi<;<˚>g2Nn_<.ϻVfpu4$uu=k;.&@=)D=e{O:/ =rM>0>Ρ=p%V=Fu05=1o=g_V<-=>4=կ=%@]ʍȼ5<ޓ;;,Y]= ='bJ'K>(>=|>==ds=/=t== F)===PJ[f=3I=6#7o="U=%=<;v;<H>SԐ>k>(>'e=k<_Y=%d=Q=Q<,-@'3=Ww½ )=Gqxn pd7~aȽݫl?N(E8=6>%L,=&;t<0FCVZog@d(%? r搙I?>GW<>Z- ^5=ҕd% >%0>=*?^],fl3\q 1*uѦ?ݿzm =]WS==Xe=<==cR=6<@FcȆ&_>?(^=`<}zB4<=H %;Ö6=r'zƻ<;}f[kлj*T;.;KRG<M=Fd"z#>>=A=O=J==W<&tC߼q2Kc;]b;:<;FU >;`>3P=2>f=@S= D=|~<,<*b<~^K=pM=u=L=iB=K=D}=*=8=@M2G0<Ӆ̦:ڌ8DӼuL>Eg)F^=% *4=9=噥<-=,}<&j!e =@<˓@Z >?|?b> ὚#gG.GNŊ]?m>9>B>O ;;#J!Ye CM^=TV=W<<1$<:=slR@fZ>ƾu=;~g. [ۼl=B b0qIsN?0-=~=(>B&*W<ˡ<|=hnn<:)/%}W<=Yc=!=V;A2#Fļr;!ۻ?7湾ؚ<$ꉽMMV<}=t<`?׼9;#C=̈́<^m .= ܜnJ=2߽ҸbC;;s!6 mׂ<%I@8gp&0>o<I90V©S>1 G><٢?m-h=rl>Ka =.U_Z=}(>+&C =z~"={<7t'@Pʣ?3 :1 >1>RHӾY¾4=F |*b;T^Nzt=;8=)b=!ѡ:!g} >C=uht<=N?:Ej>ZQn4"tD>U+U 7;1?BE `'<7<3?5Q>}=踕*:;9;|f8tl? `6e6p㽾0`8μEԻxվ qy=)=E<=w=~;Aw}Z0E =. :F=0q;%C]Y BƇ?=O>@?rgHN^:]#)#L6gͽBdQ,/'0>@6^>G>\=m=a=њ="=7 1=J=;f=8=<=&<<[ּQ.;IWSn,1q%ٹ,h4!t3C=m@O=AІ=:d< ==КC5d ` /aޟ<.x3Fy//b;6S ?R|.=p =mڣ;PA*=I5oH0r`?P;"PeR02 <=Yk>23py];,4Ľ7oI*=Ι&?=.=4;!мV֢xJ /9<@5KSb=r?0 =[=;d;1ͻr9T6?`0:W<#>ow=ZؽQMüPctM;+P?L~>~Uy=ɽ+DŽbAO>]sV=|2V@@ 3 *?X?^rYl=[˛(]' ~=иMqΜ/xW4>\>@>l)>b== d030<r=h=y=8=$={<;Cg=#^=,G]>AloB==Hb=!<޴Ok^<2"zg">):?eK>>I*U֡(='=bAG=H6>+_g ;2,=ԙ[22WZJtk?q ?Wb=F C a =]<δ4ڤW?IY_ٖw;'e=V=Yv`=#<>A=";;d=\?%?c<>O}ռ $zȽ5e-G{?>e7>cH}1ДsĴKֽ.ƺGM?ơz+@>T^<݉>=,޽[lI'~ɽ?_"oq'K??!Rs?(~G_[S_C^=ݼ՚n=U =̉<%E@l?ʻ?Ee!꽣ӳ{X-wYһk>@=6؝><,=)=%vY<;g{=-^E#;#>.F>P>#H/>=< >r6Ej>>S+=iS(=F<%{l/)M?W?>T=> ?2^; =!Ix Z;B=,h甼hW};D{<\Gs =$ >A=(2=lMU?=t=,`h½ɔÿ4s^Ⱦ[<ѕ =$En<6a4 ;T <9 *D<8;ä;7_r.<~U=Q7azR>xS'>j=}N=H=mA=Ί]Ԥkl<9=+ૼ- ;8^=ݟ=s0=7%w:Ew8u*oλH}"K;[f?>h|>>>qH<&'0=Y㺈&XxoIS7=?=S>,>>̻Ͻ@i„}`q=1>.y?(g;np::`#Ct(}мU^>Ѐ >5G>eicw=<":TC뻬"V p>6ݾ>{>>=<+>ח==ޜ=Vn>:e+_cB4ݽ< >cU;m9>`4=b3>.=r=*=Z< *=:=A=#=h?hQ:gGϙ2&=:=IXu۸=(`^|ҽ,][>C%&a?zW̙ 3.=&=}!.'<ȁz =V<4sʪ:=Cy@9D>4p|Z`<ɗN'=5*5A;B7NJE"?x>=a$:u>=My=.F6߸+=todh@#?%̾YվCto=\'< s>H=RJ w>l_>'Vs)|z>[>޼_a$ˊ=ӎ=w Z=>E=*m63z =5=?bi_bq=-=\@=~?G>i)k) S`0=⑽ddV=YZC<<=Ž<=ʰժ{d=)?yJ(=,=YVQ(ϝ== b,R>ޗ=Ĝb"<3D>}=J= ؼ<0<<;a*Һ_|j@g>:g={&>]q G^==w'< ={x[ٞPᄈR=C.D=SЋd>C<ޏs>UN>k>#<%HpdϹ=s<oڽhk1>炂>-3> <#=wI>+1vԺ>>9><<;j=>=%hJ.L<н =<[< R;|;on!=k8Y#;L 'i<>Ԩ9=V=v ;=X??нa>鸤9ZDx{< Rs\Wb<5<>@=>A#b{=H>HlSǼ<3mϾa]&=лf=Ҽi=%)=̽˅=% 6:<z)ᇾ ?>/7b>a>0[*=|S>@ kiݽʼ<@.>`ʢ=phjI=:IJ==[=w2;?U>?۽69%6n /#B] gm,?C=q<:<ͤvڻ]J<]<: &f b?$?M>.X%mͽH >v'׈sԼ3%H=٠aay=\b==V$=}=_=̼ i<'=[=x<8=)=P@*Eо.>[Y;-J=7Pm&c=Io=k 1 g!E^@Q8Pڛ=8 mc@=g.<:¼-\T;:숖=;>WYt>)W<=y E=yݼ*G?)!;>n=/>ǐ=.A<\b:= (=<[n[?K̯?4h@=$J>:ݽ>`j<<$?>΋Kd==sн[8<`=Gjj2:Z >n\Y>>˧;z99=`=ט;kK5 "?7? +>\0w>⸾W=8=@1Ƽr<`ͷ[ž2>42>\ҽ3'=H=~;qI YQ-HN>%9>ja_>i^5=_<؄J=:|?6Q?7侍(50׽Z>_\y,>i==h>Z>Ы4ʰ=05=u蠾U"Z>734 ?@j>ī5>@1޽)1=z=`ȼ=y$q?!> =U*v`>+=ችv+.Bh#1-=zo=9!Q=D>=Dl=h<="@=5h(<OD;N;K ț$; ;N\:Ja\>0:*=?n^}׼hu30 lnbׁMd!4=r?(@>"==OP=<䚭=(% EF==ƿF?:6Ɠ>;ܻiw]Ľjw1:% ;4B>ԒK?' >sB<Oz-P~ddQ;Nè˟ b\~);'g=0q=N=s=Z=f=p<<*= Ļ+A ZV<4O:s; ;; oe=ē޻<<>U8W4q;Y77< th>S;9̺0p#Լ>GPo>J=2=6=>>R=dF=>X=ɟպ#-`a=O=EJ={=p==c=?y,Dn%. "{JsH>;^=e:*ZBQ=̓Yl=B>+=_=t<==K=R==T@</׽36h}mnJɼ!μ:Ww @OҾ$vo=4=oԠiŧ*<^F Χ cd@kz}U?jA=< A= 7u*V=6=:d=L\='z=>=#<<ҏ=S+6>PFtڼbBCa<[I(NH=2#tkv'0z^{MR?]1T;>ۼ )ý4$h u;|?>ăx6vr>= -&[`b)<"qq/&X:>)?ۧ½jq>4q> i(UT#? NA?be̾."pлw %;Dj=U. ]x5?Cc>:3IR\OpE])=Ya=(=g^ɰ= =1L=ULt?"?St>if>ý;1-]&;&̔7㽷6FM> >i} >= d>+=]= ϽS =:>=茽c^5Ej%pμ} 7.=##._z=M=<{<;.==A?_/L=x >6>0&><Rͽ~!`=7B/wy>>=Z=J0>y >DR={.x=1G=%:>/=V8؆( R:3cC>>h˽*:>X>>2>j='<=\.=@19߾:?VӑI)R.<==:5=؝ =(=G=d#={0;PWhBOw'ǼPfBe<Əv<* ?8l"R=8;0XB.&6孁 !n?f?R;?4=Z&"Tݼ?Q]rWSǻLWb@_?F>K=;&<0^;RC:ă"?!&;b|$:==8Iֽk,þi7=v=vPMP==߿埾2}b)kUq>xv>f=36$詼7%<=Ӌ\=y/@:?p ξz(2-3{u>RDu0㽱v>=}ď>"==Gq,=T=Ue=kFT&-=R> ~y> ;Ik@( =>g!=ɐ9OȽzx5G>;>mf6Z== ;{cU)w'Ҽ҇>[[=03>#WGȒ<&]; p;&E3nS:3eD>=-S񼱎2Z łc ؼKP:;h n?^8<=aHR<=5$f:UG=2SKn@Y=<ƽ{[ <=]f$Ɛ@K?Sn>q> R_`>kO=[> [aν@;ִ,=oW=1=$G D"B>K.<[ؑ= >g@P3= >V>_===<m=+< :{ܺfb>$="|$d=RYN|<9ZO)7\9B;e߻'>0:Hř; -WaѽS[# Ǽ/>.> >vFL=='=„p= t=Pؗ<4a=:r<ᬄN$<=m{=&#+;=5=kך<3K'<$&N(> bF2m;8 ?/bmW\T=A)?EQY>Ӥ>4a>n===R=r=m-=?<<:D<>*'>a==Kt=[l=y= ==X7=,4=@!7?fo>J7>$> ===[=e==~|=рs=1@TV>>/=NK=<*=YQ=P =<^=W>=Fu=?1=Yw9=\#=O=F<C4>F;==^c=0=)d6=CV =8z=v== =(?>=ﮭ= a==3*====<=N<{%>j==5=<:=~=|b$=^Jt=7==E$=^=4>#o=@=O<[h-=vv<~(=hP<=~<ۡ< <D@ 1=|>S<|z=iA=!= %<<~4=i# <<_=[q@j >/e>~a=n=1=ס=ڴ< ==}>0>Kٰ==5~]=n$==<爹<"<<<A9 ?w/>ߎ2>>6 ==vtc=:=_f0==== A?il>^>K>= =s=&,=l=W=RT="L=1=W*@1D>7=n >=p-h=yvP=]#=g =* =:>){=h]>e==~T=@={%=5=#== H@*> >=E;= == =y=d=^7/=A&==@PU'>$)=R=2Yn=ѷM=q%=<|==@<<6L=" =s<m ">== a=k=7T=w?=au,=\4=;<$<=*"@xO?X>C==%=5l=19=A=.(H==+=q#=}?x=we==\9~=Fy==W=y<'< << <+?< ?-F>0='>Ώ=`=T,=U#<+$=<<ҵ<v?JH? ->=e=p ==W=><#(=^<<9=]?[=qd==-|=fް=y-=f=X K==K==r=&>\'=}=W|=A= 2]=a =R=j:<@=-=YA=nO=>Va=c=_=5=je==|\+==0==-=_K=t@?N>!U> U=ɛ=%NU=rA=C=4#={`=:$=M<*<:4A\F>6>=y#>=w=^R=-N=j={T=B==|2A- ?)>ZN=.>o=Q=ʛ==e=u=>K={4=.?@>]>*=܍=@g0=e>= = =Y='}=/= %<"X5?wY=3=oI=3=</<`*<]R<Ŵ ='==t%<@<^<$=!=nM=== ==J9=7<к<b >=I=g=K=U|u=K=~$==&== =@>7>=>(=Aۂ=f==8%= =OBapM>>-|===3Q=^=YdS=Ր==}$=8x@uYL? >e>^^>e=&=̇===,==%G=FD= ?,===Ȑ=t"=#$=&G=d =&<Ȇ<=M<l>2=.=eH=eM<43=$=<{<_{#u=xr=4|C=,=&C==Y<=m< <<==*=)e<<`<q<<'=Ң==8<<<Nj<ɨ<<z3 =YJ=_Pn=X6=@=F<ݼ<>M=@=C=_O=i*==B =P=zN=<=-?p>Jw=n==⊓7Z>F>F=kv=UN=I==)=<*<%>E>==*7=Cz= =5f=1=X:=J_@>|R=>_=v==<^<g> >======)c==="<) =I$A ?>>=~=w=y==t=O=-=/=[?/b>=#=3,=W<<)$<<@{>->=ǿ=(=,<==<<<< Af-W?̠>ln>?>N=Lf=tH=K=R==?=G=?>j>ώ=+=C/=u=4= =KA= <<<1\<ڷ<;>.>W=_=^8=v==<׮>u=E5/==;0=:A=:1===`===o,>l=y!=9=W<N<<}Ȳ=Ҡ=D=Ta={e==I<f<5<8=n==]H\= >=/0=.'=1==Z= B={@@0e>>D+>p˅=:F==Y<L<5<><界<x"c>O.>4=i=Y:6=429==A<ö,sh>& >H=L=X{=me=עg=`A=5=L=WA ?).>}>=6=1=<̛<<(Bz> ==T=O==Co=Tl=|> >^J==z=;=E=&F=(]+=59=@l> =>$A=VL= =<]J<->=P=wh=^=Ә-=gm=8=N)>{ >[= =sj=E=o>=T/=3=s, ==A>v&>p`>6l=P}t=aW=k.0=4=7=0,<*<'<)/An ?jQ>f?>C,==/=h=ؑ:=)= == =ѵaAIQ?>P>>!=G=6=u=`*]=G=5=K8=Ƨ?b>T=(=== _=y$=+1=[C=VG=`2=.x<2o^=5m=q =M= 2=@e<+> ==i=tp=0=PA=Κ=}g=={A ?DS? ?>Wn>V= == =Ǥ=k=RR=bu=G??6=q|==N =*7=b8C=̳< m<<}>J=V=?=:9=}== =G= =z8= Az,@L> (>D[>n='=G=p=>ϲG=V=Z===J=Y1X=={=7\=i<м<4<M<{<;H?">v>e==1sg=H=@R==Q<<<޹< A3>pE >ܾ+>==e=g= Z<<<œ<3#>99>=1ƍ=t=39==;=<<5>B=x==W}= L=@A=?6==}=?U,=H{=6þ==<#=V&w,m=#<=P=C~=Ω=1P=+=֓=V<5p<z=x<${& >ґS>u=sa=:=̹=<8=3=8<<[X(>p'>=A‡=Pj=<=6F=|M=-8 =W=t=q@C>=}= ={<<ߔ?~>>x:w=V-=O6={^ =5=AP=A=5=Jc=_=L?=+K=9==x$==?>9&==,= U=,8=~<W.=T=V=MJ*=$=6?=h`=G=|A=pH<^<@ A?=G=y=֭<{|NE==|!=#==mA= =K<'p=j<@'?->=t>䤏=~=qK=A C=<=g4&=%&=S =t@[>='=`0=t<<&3{m=aY=Ј=7p=y_k==w=m=cG=S*+==='=C(=%=J=X@ ?@t_>nˌ==#C=L=c=M<;M=B1.>=="'x=A=@^=Ծ<ͯ<m>Ҏ=>"=)=h=2W==oD=]@ˏ>> >Vcb=R=#A= `>]g>(~=՟=_e=ܮ=Ж==9< )=bs8>Q>~ҏ=*o=|=C="===Y)=( >@=$=@=EN= O=)===!j<O<<-k#>6Ӳ==Ɂw=Sa=IM=A=&=.b=d==7@>@=G=04= =4=n<'<==*">>==\=u=I= =( =<9E<æg@ ?Mc>T/>R><=g=eǕ=k=4E=n'=3=&= @8|>S=E[=|g==b>.:=Ic=\8=b=:=D=A= =<#<?q>k>F==.V=c#Z=X\=k=/p?=$= = =F@/?="="9=3=Ñ=-lT>Ǣ= *w=Bv=&g=&=D%=<!< T<{@wF?Z>T5>>=Jۤ==b=UUn=}=;=B)=I = ?ݨ> >="==<8=0<<}<6<<0@-?F>|/> =Tu=[=w=a==l>f˟=a=i=fr=1=.2= ==` =?2>1=w3= wx==* =F=< =s< <KR>@J>x=d=]Q=P=/l%=9=<<< Z@}=?>r>`=̡=ّ=Q=5z=sS=o=l=Ј%=~D@u>7=DW>Pz=6=&u=K<<.<<9<8<<&@U/?c@>z>q=ҁ=`=M3=eI=)X= = <+D)=:@i+#?C>ĩ>}=u=Sw=f(D=Q=NN=mx+==e=? >D=̎=Jz=o'=w=9=捶=\=R = =<m*> >|ׯ=uP=ίI=;*=Z<='=vj=^~=DT=0=`)<~2\=6M7= =U<6< <)R<H<@5g=uyG=+=A<%<<]S<ԉ<$==G@=c:<6D=C=5M=/=<5D<b->== uk=y3='7=BW=v = =E=i*=.=*<< <6=N=x=<6>#>c=ф=mM=.=EP0==/]=Z<(g!=c==4?͸=2fi=D =2=(v<Y<<[ >=~>B=7=,=+=(= ==#>>(4c=I==u=;O=cC=2p>]H>4@=='=Q=҅L=AЋ=<< =A ?+>m<>b==P=h=Ȩ=͎=8=3=C=?E>==ym=h>k3K>Ή=T="=g=1=T0= <<)hH>G=v=S=zq=i=ni= 3-=1N$=U&=@>N>%>$=-=h5=<< <>Ʉq==+W= I=q=g<<{<`< <1A=m?&>=8>= =/!=n=-}X=/;=>s&=M=="?!>N= >|]==z=l<\=P<<-<:<#-?⢔=F=>=&=9< tD->y=0=\=_=E=$=V>?;=(#>%t=>@=U;= )=|=QZ=X?>=>=G=$~=EnW=O=U=hP+==W@<>'fY>w=3>==}=oQ=Ʒ==Sj=اF= @:>ަ=uf=J=s=).=/V= R=< }<[Z=2 =Vܮ=j4\=.M=C =..=OV!=H#=N?;>Z=Q==M=s4= =!=ڒ=Hw=^=]=*L?m6>M=O=N=+A=#@9=VnF=T=io=G=V=(sJ=@H==`=H=Q=ck1=='L=g=Q=f#=a==??s >k=J=Mv= @= =%+=&=څm=9?=6 =W =٥?:> -=/ڲ=õ=3X=#=E=I%=iSY=1=05='=9@>C==Pe=B=X=<.=9=D=K<]H>A>Ӷ===l۔=hm=X==H=e=>k@<>J>\>>=q=.==B=59-= ,,=T=j?=/=z=/;=e&=3==<:=H<|=߬=>b=&=r=0='=bg=[3=Ч=f-=d =N@vT>=Lh= @=6&=w=P3>~7==I{=k=]=Xy=d)==z:=>|=uj@{>3eO>ā>y=fh=l==Đ=HH=Ȁ.=5=."=jA'>}>> p=;=uU=f+==t!=U<K&>ˆ=6 =QmF=oB_=(4=>C=AG==?=Y=A)?]]>;=d>뫁==yv=v=9a=ݜC=5=4=}?L >>ݚ=fg=m3=VF=Y=+W%= b=<2<ޱ!=Vn=(<_<<&l6=n=< >0=Ƅ=me= =*{ =48=5=;~>7==M9=>==B ==(=h=<İ?8K>==V=T=B=:*=n@=3,=0=XL(=u=w@ >M==?C="-=>=x=k=lV=<,>6>x=2ea= v=O 5=l(=*=7=Ѝ =o=aAMP>5=}z=4Z`=ٷ=[=;d=v=\<<+<Ԃ>G==]ۙ=2=Y=\=<+=?0="%=ͪ=j@Ch>}U=>7=F0=<~<Ы<ʌ==g=J"==|=`G = )>jx1>=N==z=gY=w=?=Z)=j=`@$*> 9>>>=L==}=%V= =e=2<ȧ1>R>[=l=y=k=(-=`K=R0= =_=?=u=@=ȫ=sF=-=2=);==h?s$>d=>$=,=x=ĸ= == =)<ԩ{b=y=+=Vq=׺k=xB==8=k===n<)?A>R= =Dx=Js=CV=Nz=q =="=<M% >t>=== ~=> =R==@q>WD>C>==AƠ=p!=J#.=MO=\6$==x8>>G=|=?=q=W,V=q=S=N=e=,,@LQ?=>UY=,=#=<<<.<Φ,>$=O= a=.=A=2=v<i>ۘ==#:='^=OQ=;=X.=55==o?De>y= ==C=P= y=k =9'=$t=3===+Y==O<G(=A =<.q=V=P=<=l=?=v`=}%=dz=;<<<Ƒ>=iS='= =ߺ=u)=T=3= =mMB=a=|iO={/== =L>ؤ==9sp=4V=G=X3='d=Y===n }=E =a0<</<@<妷 =k=5$==kq=u:S=A> w=4= =<$<>%O==t=ȠJ=A=gC==i=p =BZAb,?1>'>{>wz=N==>{=w=^I=M=G4=%.@ Bf>=q=Q=iL>:=-=g=#E=3=@C.=j=]==e?'5>O>"=m(R=(<݃<&>ĭ=)D=sD=}=JX=j0>G>8=?=u,~=T=-_=-/=+=$=?x@>=K='K=v<̤<@+=*q=3=`?-==_*>i=~y=N=F=-=HO,=0-==u=.=?>S===ye>=]i=;=)=M =V<R>===Z@=D_=K=SV=ޡN=-=r@2?]=C=1="@=<з)= <Ǟ<=<ר=+>YGG>=Q|=i=/=cN5=>4= #=i<@Wi?Խ>L>=_;=Ƞ=y=`=Z=N=sj3=nZ'=.?`E>.B=ښ=hm=v<~K=«>b=\g=0=%=B=]=>N==/%=,u=d===}3=:=2==q??w>==H=/$=)=<=<-7<.<%=>c=[^,=Q==2-<6y<3< <E</==P=sU =Z=W<w =+4==#=w:=?3= =;:L= >=K=VD=1`=30=(=G{L=t<*m=Qzf>=3֐=|=Q=`=_G=(B=\s.=)= =,@X0(>==-=I<=_ =< < Q<<)<ڎ?Е>*M>Ч=h=?+=QL=4=!>g==H=_=02=&/2==ԕ= JV=;'=7=r-=6=\%X=(=P7"=+=$μ==m=0=c j=6=L===߰=|2@8>W=7B=HQ=v0<զ1== a==[=@3=F=sL= =}o =-@vɢ>e^ >.=Q===Bk<}W,>`=M>-D=w`= "=#)=$=7<=\>%==v=c2=q=>i=2=-n==[=m?3===ˊ=M=y#=~=X<'<7<<<Œ=.x===-=5=<=* =߃=>@|=R=S=tO=Wf=zG=q 6=L=vX=2=o?====J== =c ==<<ڽ<%ZF?(}{=H=kN=1n=/=VM=,==i%={7=)=x=$=O4+=+y=Iy@>|>lR>u:==F===<~>\>Ǚ=oo=V8==ls==`s->}>==~S=$3=l^=`<==Z =~=~?=M=$G=PTM=3a =<揥<<='=Ϸ<y=A`=óI=i=+=X<< d<-kj=\S9={!=%K?=*=8&=F<<<8t=1ʷ=Vg6=u8=~>>#=Z===ĭ<։<<,<$n=I'=:.Q=76=5=3=$='=4=@={=?>>="=J=ll=9)G==<<I-T>g= =)??=3=='=:<=Ln==e=so=$R=O?=p&=|=%e={=3=r6=>=@K<<_w&=w<u >T=*=XI=yL=I&= =<<Д<<hpocketsphinx-5prealpha/test/data/wsj/0000775000175000017500000000000012560377662015170 500000000000000pocketsphinx-5prealpha/test/data/wsj/447c0201.mfc0000664000175000017500000011327412504317077016563 00000000000000%A%utO>ʥ?>b5F>cd.>>JA:b*׬o>.D>??-*8=㥿8/ w7+AWi3kj?+go'>X=S>f僻(A\M2 O,CsbU}v>վޕ⾐??XrA)mj"ֿ;¬ ſn?6>TtA%9V[|־S3G]97"AY'> xLB`&V3A#˯c>?`y*h>4A L}`Z*I벼ո?rxU=?"?8T>kF=mJ&AS 19, @H=k>r>h5A%^pY$=Ӌ>,>=ζt%H6A_@pP̿ٱ_ 3n>,O:?3?Cx1`Aa_Z\뿧^\IahȽԹPW|>b>˾i>ʡ;A FIU%>#>א?8>-a?=]>?OzAR{7?hg*ތSn>֏Iw>x%>3?bb>wAr?x)=8aĿD/#r?@v`>Mcٽ`tО?4?>ۯ?bN>KA-LԿ Wd/am?mo>Fxο A.%W6/1?|dѿA]>?9 ?(5j!1{A@\ }Կ>LH֦9V3?==8?[u|dAhd,}e@`῰(p>cwi7>?SQ>M>NA$`x>~@D?q5?e>h5?lZA$./ŽX">[">T?ᄏ3Ύ|=՟AL#>!12~?NV>nGEp? A.-h旿àſ}y>\>5?!ULn?X?A1v]о7B>)ڿA+>۷b?BkXU>h>ٝ=ݦA%,Ƞ#~A>H4U`V?(k^?AПA+ɛ4^'=Yq>c>`>ѱ?P￾XAU>r)"?z?d3kzr>b??WAnXA>@e=G?qE?WT?N>B3,=Ǚ>(?!?3@]8c?LBWpB@i߿cqt >/=>`?׀?"g+F>(qF?ԿABC?{M0/Nȿ6?.? )~~>KogBVѿ7UĿls@ dt?Vnsio=E)>\)BW~=z0[5"L.@w?rߑ>Oo [BYKYcFE3,֎?n2?}! mϋl>9]VrCBT<`GcTn??CvI*>YGBP"V>r?r+'Ir?mu?ETA/"dL?\4.6wmdBI? ?P>J/a?,?[>g ?F}}B35(>@w6>9޿6پmE?"H"aB#X@wHք?ãWC>(>=+΍Bo x=@ -?&D B>9OrI=xPK?5rAaD)A?4@@_9 -.mG4>*[7C>եEZA܊@ @L;?ÿ75 _p5A?^IQ>ϲWB?Y"???b>Cp>>PhBUd>"@>̾jArY>I0ּݾ?S>;EBD+??!:=vts?T=`=Bg ?]_8Ŀ[ kZ@$>UDě?4h߿?Be?qP;~ྍN>>%O~@мA?^?Ba@HNF e?f(D?^>4E>܉ =*;B`)@Rk][=+? 2>)?rjj?E-?M SBWH@Rn~QdJ?@Er#>`?5\oBPe@_TB)L M? ʿ>>w=nQftBJ @#&Fe?q(d`_iV=@noUBD̞@}ݵ.?>BH >} SB>wj@(xf?G=ތ?D^=lwӓB4@gKG: ?=hy ʦ?e}p>ƿ>uؿoB(Zo@]'5>uUľ?) ~>cĿ-B!n@?ZI9?AT.^?Ƌv?տG?-B}@@;eX9?1!8?Iqh?X- >9uBi@XA@Z>6O?ц² ?ӫ9f??DB@(p@}lH#c!)<@H҆uW?q3L?޿?V&Bf@"Ƞ@Al ޽/z f?t75Q?H(x?x$B ׉@0w@{hE0NAqھpm?+?.E?ceB@Ho@=X:OƧ$(@&#?Ug/>2Ak@kP@i?jck!ܽO@xά?IdžvB@s$@l?mk=h̿1ο]m?ge?mk>؀B1@g6@VnL>3< ??S?Kc?wsB}a@r?ʜ"IT0?ayؿ;>l?nVf[n??FuK?䠼\@~?&oϜBKq?O:T?F;=?,Ǧ?>??ɿt?BVڴs??z<=h?6?wĿ_?G(BZ+˧@84?tp?s濘?\#?QC"?[tB\Q@x?'d/0?cۿ1>s^=?2?x- ]B]:yux@%>kh_~?Z9j@2iW>=?5?^E9B\'G@=u?WTK>?y?!HB\ ս@.r?fK@1.$?Q ?k>dJ>ȤPB\3"@\nR?ZX2A??^쿒{">W#B\-c@٭JT?ITj??J"*d>SL{B[n@ތ^`?)}<?B?Cv?#%kB[Gp@1U>_9l?T>jc8?CWſBZl[%@d>aWI&>39;???/ϿrB0?G¿l|BWk:Y@L7?HڎܿB?c5#>;?lI2->hؿNBJO(L@ʂ?CdW  ?uM= %?ς:?nʿߺB+7={V@@ 2. ܴi?t??1,qB"?1@) @r̟п9?㫊}>4?窿0BE?\u@D?aY\> 8o5?~>Ն>ϾB?s@,߿?0B?G ,kB.@ @U?>sk>&P>J?Œ&T?`bʾB@.qo@ O?սԆn?#>? A:>?"%}B Dy?һ@L?KZC}6a? ӱ$%>œ\KB=?6 >#ś@R?K\> OX>t>CqBOvO?B[[ C?7?*=>Qqv?WQefˣBX1?A&M p*2(;?p? =W;6w%?OտšBX?6f>q}Qd8YG?Ec?HA>2CòBTN{?aDc?țƿο?-0I24FBQV?LU,)=3BM.@=i?cI,BOc?SK̾9"?vkrf`(X? ҿ&_>l?14ؿ7oBH?URE6?neLx,W?i ?Nl<BAk@Rc?_W=G=}\?H? ~N>`׊#B9>@B%?Гb jsʽJ?Ϗ??A>B'@MR@;ο?$>?Bkv=?G [gp?GA ]?ΰܾ9@3 Y>c;w?Bg>? KA DAX3֥@R>>=]S?q>?dJk> ^>:տGbQABlj;2\?¿JPY.ȾŠA*KA4?`Rv˿>?-=(>Ol?Or?>N<6A( /+8_?W. 0imо ?"A8, ?#U9^Hι)J \?P {`GBHg AM&8??̳=7?F?H~y1|B 뿴ֿ q&п2j?@mt~Banz>~k6>}V?ξN6>?>R>á.By:My?HZH(!Kܾfپ]>W>⇈?>hHZB6@ ?cZ?#)z(dT ?_@?4?JBY/?4e?o,[A+?MZ?c2Bxg?TwB_z?5N\?`Q={ow?_#?Xﺓ?$3B^I?6>7? mJBJ?Tbt?%VW?s lBZۣ?I?N>$ZdVS2?P+ʊ?? ? BE??ͤR W Ie$,h=ڻ?t?8B 5*@9@>Hj G(cpg?T4?^A@ &@j2?L!J տ?H_%~> 8?"AAb@@tT?GI>/^!᥾7?q4 p>? @ԿlVAj@T@@;A8eYi?g-w=˓?O?6QAM@d@3c@S i :UĜ?"sLZ\Af@IG@i@)ξ(k4 ?'wy?x3A@@@Zzx#>z)?Bo>uc BE@~*@z?-?Pc%(=i?Fm=_NmBg@@{vA?_1u\.?M(?5ȿA?@@ =" ? ?/E?]mI_pqB5@Q_?)@-ھ BHԘ?t"NG?lݾŜB @bK@@z%7V" 5> UQ?VpsHA@=@@+ <:JLb2ԿYJqA@}@5IV@ajpŬ4X}Roپt5 <տ">.AŸN@1@?e!?QDSP1>ORSEk>)BjJ?@M}x?bñg? ,hB/{Zb@.R@fsNa hE@I]j[?*m?0B4u?%v@X{@eq:PTt7?G?m B6O+@@op$ٿĿ!?6\"?呾B6Ba@7@[ÿzb-?.#HC?7B5P@ā@@y)rֿ|ǥ?ξ1>d&B3xL@&@18ֿ- e?8*]C? |lB3@3@giBxҸ*ہ?6޿A>>DB4 {@7@8ֿuQkim?7"+>򘽈%B4>@n@'qX(:,?G1_?#|:sB2>@%@$T`qJ֕r?$TF4?Ja= B/2S5@ @F~ J!=ñ_>˟̿kk?n:MB*`j+}@ @-`E{> >i?]oqVQB'L@f@` R xU&׵>#H=FR>9a(B3~B@}?Qۿ?JlϨ*=>[?>P\B @ ޞ?u [?F$ J7YS??ؿ2ŋkB niO+?%t>kZӿ@/>YٳB2>#?VBkr)@v>M?C,ʿK@-?%5E'F?&?\s> ͽMB +]=R?ۿ?v-E?AV쿅{Qa7?4=B N"{@g?z>jV==>A>y?@z>>+ B%9R?K԰>"9?G-;Dž@>¾ļ?Jzf.B 4?++XԞ?h=?mڽ&1=ڸ?&?wο%iZB- ^?ƿ?G?h,=:?h1>tc׿_BbG@"X?!^?=܂νTY=pA?Ƿ>~tzBсX@{>C'>/?-oxk uBA?9޿?.o?Q>;hk?)w?v)>PB?џ ? [jVz?(>L|?C?fR>9 FB(9?#?ud~KB?=5>4-?C,QTmk?B^@li#=Gݟ0Ě󿋞L>9?GUI>?Sƪ8BiP?3ldf.Tc0N.w:?M?dٰ:S?sW(bBjuy=7?V^J^L cf9?V?x 8#?2BgE?&alUp2ATd?e?k:e)/1?8iBbf?q80*?mu^?mGU?*^?̿BXQ[@J?J ?M\?$@?h(N?.M+BF@Dd^+H/Տ?`QDr[?c?k?CpMKB/@+ 7?)ڨ?Y9h?>Xx>N1B*<@!O+?ݘO $@zk XؙB'l@Ѿ ?J-e9g@'ɾ41x >'>,!B& !@=<??] @Y[ɽN@șU>_XB$@"s1ȿZB2@ E¬D'?'-%?9k?*>\[¿}V>wFBG?M8?G-;¿#viR?>Vs>,$?ABH?ʙ?U$=߆?^Հ͐>8=;mB6%?2f?N@.Q55Ͽ>>Т? ?boґ𿕏#B.@CZ2@Z) o~?ely?&-+TB@{$Ri@Eܿ4x~K4 d>{?r@.?| ]Blk@F?Ro?HD1p?R^¾"_?lS<@\i/Ar@x@v>>$Th?cQ?!@AM= @fS?2]?~g^Z?;?>Aʺ?a>*IGA@z@fA=ዾ{)+նyAK?4-=0(I >J{A࿲dkW@Tys:At>?E㿫G|>aP>WARԿM;G+A/#5c¿?,!?~!Nw=X?9‡AH>ݙc{kE=ja>ߵȾO>O;&HBLb Ԣ?]>}>y?;?2ԾFJƂBA OTDο{e?P?0Y S?ȩ2tWjsce꿃OY?F.(}˅?۰>ϵG j=QB"+?n0 y8?^<Կ;CCi BD)@!-?}G6?Yj~'??n>=*>Z.B&X?Tym?? b ?T[> '>Fg>tB.@?-7?"é?["#?+E_c,?B*<@6y@ N Q}?UQ?.(p( ?B,i@)M@@ӿ+">?-?=?vB- @)@#'ve8v:|Խȓ&C^?"ڴ-=&?JeHB+J@*?Vo4>3?8)Fa>(?51B)@yMi?9Gi3,>ә?5=GI?R=B&!@-[N?\#+a h@?x? @CybE&?tB#Cl@1"RF=>+w>ACֵ?_?CjFhI%{?$‚B w-@?κc_>-se\h??ḿ!>5>ZWgB]@+oqp/b8˿j?~E?n;rwo>'/B"@s=XU">b?bSLા}B,M@2">꽢\/ϒo>kǾE?+vC-4B5??ҵ{-|^CB`0?Ku?gYG"BCzX\h1i>J>ȿjB X-@ .jP=uz/MڿqW<*U>ֿ:EA@?Q>΃?;IP􆿂,ן׿AnEVv=b=(ؾAnOB??j? P~fzNbQ>+q?rAפ?@zf?'?%\%8?>/> E1 ?f[A?N@G??&_ Y8?ȇ\>f1Rҽ@AfO@6@ D?R4=傿qu"?z3(J*Aͥg@2@]?6 qĽt#@0Rl־>Ae@`^@S$@!n䇿ʍ ?W<=OqA7@Ԯ@6@M쿭ݿصiާ?ڝ o/(Aۆ@@:@&Du俾h8ݿ?:'8v j> B@ ?uO?¥7Y>P۾U|@ 俎B-@bc>=]?@J%пR??gJ,ؿlL?`1UB3'@"f=?139>*?$ſhxE[?$hB5@=q?ܟ4?AQ?TCcۿ?i(b?@j?T>U. 4?>Q B3t@[x>`:`A ; >2B3@Bhބ>޿<>:؎c>ҩϒ?-D_B/@lۿW>R.DH>&C}?3߿žz(?B@пe?r {}2J%?NP-gp? *A@hn#2@cE՚Ͽ 2m?㦾ž>fA@2?@I@i#K?Y:]>U꿸jAdp?A@?2?Fe=ֈm>{>>|5~A!$ @7?sI2D?T^2>i*0AP @r}D?H-'nY>TG>?"Y>>`=lA. @D r-?^>R?w+???Nl#w4<ʦAk %@|,?)lj?>~2>Į>눾.aA|@Aex?p3?ZPFU=F?,5AF@@wO?v>O>};= !>l1??ABSk@* ?("?e-N>d${?`?>E]B#*@#9QYV>S ;?t?7(dj=??1"A[N"M@3e̿g?$}??YP> >m{렿YB)t@7?秿)de?si5?QkJnqB @Y@?%c=P)p?sq6>'?f~ 9B"Q@2T@9@+A8}>Ubh|>пw?!>\!_B#d@^@὆yW0s?Dh?$?M>(B"@Hh@R\>q2J?b?l  ?>}B@u/@ I?d=ov>({>ῳs?&H?;;~A@j@0@3/Js8wo?LOʦr`>ݐL(A묍@@&@RLO뿾ǿԸ?INߺG>|ھAv@@$]@e+SW0X[K?9RzAJ@@Rj@,w"վ,㡿;b?:ke>h,AjG@@}@M=GЍ`ɿߌ?hV_V>iTA@m@p C@A}_3߿^BV?&濕x"%yB@>?m1D=w03\>gĿ)?󿣼&j|B6!"@Zt4=uo?[V#^|=ſWd^B9D?sQ@5Flk1h?ߙL_=NRKB7@3lʙ@>LUR$쿑Q?X=?咘K3'B3@Vy@s =PͿ?>?3,3`*̈T2B+Bc@֯@:EaA9w$Z>2?8rJ>ծB!A@ p ]>>>TN= 'h:?,$9B(Anh ?@̾ÿ[ ??>مB"@9\*ܾF¾b_n{տY?.(?֯Ȃ(6wB@Yuۿ"Y=b!fn޿?m?lL#!:hB k@ȾDԾ 2Nοeu-Q/}?3?k6N.?t߾迿YBokA4o~*k?¿CY>?`B'A'/Ǯ?q8/"jYfn?v?GlSA l]?l7U]?g? h><Tr?0j\BQ@} Z?;Z W?HF??8*B_%@Da@",{ˇ'/?[=: =LoBg@3o?sd@$?*W>Nsc> l!&sBmWu?*wqN п,@8\I~?/82Bo,R?ӼѿEOϿ1|'@ Sz1tܖ?;_B_3@N*鿁m왊?\:r?=7ÿ>ؖj=j< B2?Q>4? >ȡp  ?'D=tI>Q|\B)T?uog??1=wH?Tʕ>wſc?R3:B3?l[v?Uǿ+Y0|Ur?x:tw@ QRp@BBJ?dY?ǃ$࿽=F3>P.̾G~?@BO@ @ Mп4?[}`0B ">>ɅBM3?kl?s?&]L_}:?(ӿPYξެ?UiɾB'z'ƿB<@v@M@-}"WZE(rJ?t@> ҿVB&@s.@.U@ wf[cfy%->j=0>ſ BNM@~@f@,E4rH=#m30(jbB.rп]@? @2<>xG⿑TQ)H4Ah BBr˿r@?S2eM? *t%ݿ!? p;/aZBB6R,@` .?b<7$?Hп' ],\?TZFAhB<(>{@K@ Cխ>XǿTk.?wۛ׿WB8Il?O@8@ xR̬?!(񾁿oa?qi>1B3? @&t@ ۷e6ۿ?A?wk >2jbB-S@FU?{?M>OPr>+fd?)hB&1c@?`z?&+ㅿZ >j*0?&{RB {@@>UϿ.-({?#A{|߂?QB@i@0"N36NQӣ?S>8ο?eI̿F1+B;@NBv⿥s:~ 3?q>8z?4ܾB@?x$Z^8P??*Ͽ?&ʾ4_|B @pq?d>dO"t%h@0"?i ?=B7@MTe S>`|{?FK6wE?MB% P@p$#ۀ nS?|?7Whq+y? {B͇@Z3!1D\ 6Z@j?@^"x%?ȌB-)?d}>GGܾ:^?6Ud!sSh>C"B8/?QVbc??Կ_LC >.q =BA?e({*+UM?e@[G IQ=vy`vBC#?|b^Cc>sme??WUecs96=3r'BO(?qUaұZ忋š?#?Ni^=f2B[Q{i˿-ȅ!+??Ϳ '&d? TJaB`ɿ!q/ C]s@?5/>m,? 81B`,@Gs4 ?90? >/R?UUhzBiz 2%嘾w{ ?K1?4SH TZ?DC7FJBf^%|g ??S Oi.=>o޿w4Bg1At;pk zD>G?? {^5{>Q>*fBh}s ֿ)s>?E>뿷>=ċ_Bj鿶rkտο>-'??2@bo?-|[H&Bkpuyg>ϣ<?o?4ҿ|¿o?'=ИQBjCy~lԿ=a?5X?ҿf׿In?́FBj:)*vڿg>b??;?<>4)NBk濌lR'!=5sE㗿ѰBiBkfm ??5u0?+= ==%Be ؚ{i9w2ؾ?Ƈ?@X{ԻdBcv#ptZ@i^?Їd>}HĿ̾8X=tVABa#ɿ:vyB=N21??*1>꿂%ĿJ=2ҿB^jdtu ?<<@?1>1MeL$9=[߿-BYmUKP?]CM@qf!>>\80xBN뮿d?bB @*F~j?QU?pN)B9:D@? 0 K@??Z?/]r BjC?44@zg @+ F{ ?9? =A,\HMZj@_=@CȀH¾>ζQ#?k?\>NA~J?,>8Ӿ_>@ j'yhD]>X?A_?AוR>g?>ip?HOѾ{?? XzE>Cp?&AiD>F@*y%VR]?߫>Jz>>ђܐ/?my>+Au7*>5@ TSQ@ =^??/>YX?Lc?A8 @={R>/h>->E>EV?"U6>? -A!WśolE K)???>X7)-Ae=.O. =EJ>)?nG轪 =?-O\)!AAqw>D^Y4]5d>P>% N6>g'vIA_{?oe{忛݈›?S?ӿi>$%?v>T6Bg^@`J?ڱ2@ma-5>#)?_:L?/}?HB1@[쿭q?6UU#?ſ:?fB)'@JwA|3Ԥ?N1H>jp?" ȌB*@? >;?%F?Ig?nBHA* >NI&S4 8 Z?]?jdGB@0,Vk`?W>?`ͽrBw@?F.]ȿh j:[z8>T>ωƻ?prB6E@V?=\߽ ¾̾"?YQe?KNA$@?`?.!4P?+?mÿW ?P?HC>CHaYtB-=gD>^Z9fA/@?'@K?`"hwF(?@X4J~fAe7@o@b?g3׿X2@W/Xmz A߿@D@?a`=u"])@ ""GxzDAa@q@sM@ V-@>6:zFٍ@N/g@ՇpB&'X@/ 0RQ^UC}k&̮EfBF¹>J>'=ϿubVw?>nC2u$KDBQV*?L^$퓿8?WD?ŚݿVy=ᦿpBV>o6?4 w#W9?|fQX8>jOFEcBW>#Za;ҿ5AX=y?V >Q=:BX =2Zd?c?m9<>B?F7]>>R5 qBVi>>Vb?1(7v?(^?(>`VBR>O<.?9hO{;?M8=}TV#0>?BR=/?r?J?3οR>a0BQ>gƿ_?57?d>ǿ!?k BN. M^?o7?뾬P?Bjǿ^k]BJ8o?R?>=,?E>rsuz?{; U@E?r ?ۿÃ>61czBH|?Î"@6?߽GQSK?1Ya?-?=cA@QP@D|@FtO:?; pվ>E G`HA?@g@ L7t8ῇ(mك?A~ d@T=k>VJ?f>7|i$B>ϾɊxA9«qz?ׂϝ˿LXͿqC=a#ⶬK?0<5qA&6?Dђ>;% *݊{>'$?`r=Dmf= A~>Χ-ҿ'Qľu1wY>p>@AAտξA?D,?q?/iC?`/>e=ܯ=x>UA+ma>.jz>$?&u?8 ?D@? R1Ē`m>\:AR!?i O?}O| ?"kdo=f?;l-A]B]5]?[>JF?a?@>-=?)}/>d?ۭBH$?ȆB86> y?ig >c/=>e:?(CB-#@il<ҷ6??^u_?s?(U>}>B FN@*>w>s?~|tPB)7]K.'@e?q!Dufl{>r?(=Y=Cv}|B8+@T ?^>hV{9(wo"?LD{6?&B;8@G?Gw>(OXJ( \jg?(ÿ;#?NvdsB9PſL@܊Z?%>܍MMG?3-m%ђiP?}|'>ݿB8yʹ@>Ԗua?TumK?Z/>r:տPB6!e @o>Lu?W7=̾?8Md]B6R@۵>C?\;?tqӾGn\B315@b>Wׇ?+^$N?>RJB/hmO@m?b>{)*(d?w]T\ѲB 3n@m?6p`Z1?w]nB?@?B)>$?wWdS>)/A@%@nH!@6n1-h>qP5WY'ZM5B &1?H@t?F勵?漲쿬>Ӥo6{ ߿LB45@>Oҫ(>v>7=#t?D; YTᾚB6Jss@n?@ Rww>?ic;#B71@p?tԾA>?PyzB1M@@AkK׿#3?mmڑ>dҥ B3yJ>@Wm?/ōŭ9V?BfA?OʾRB>{@?0>Չ;j[%=?p濭?.VɆBE@?_gCzy.:>?a?>c&tyBI\l@C?.z R>J=?xv?2JXBK, 4@?yμ,{Q>B?࿻ ?ku)BJ?ѿLT@"?@fQ=ǿ)~^>ԉ?A?/'XdBK_5@?ո!emƣ˿>+?I١? BJݬ4̔@f?} ᾄT[νJ?]dy>% BD,W@q@ hd`^\w?5ѿM>) B+NV ;@w@ >+?5XN<D־e?#)A?@?@BHP8ׇV(Tտ*Gx=/?]WLB. $y1@@MP”аʿ\>z`\>#2B1i*E@l?N" JO/?|~ZO?262B2쿗p@m??ナ9οp)DI!?Ӊ?[qB/@?&M￧p+?->ZksB+G|@_?!u>" z o忢??^>;B%Ni@&@ u1=µ]9?AX?CґXBh @C@ J=+w?%UԿ?M{{j?gpMB࿏is@@:>~¿rŪs]?4B?\0qBgHs@@?|p#dO+"׾V>6VN?cwu2B ȿ4@$@vSzk!cx>9?~@BG@v@$M䒰zkB΁⿰==F7>?8BĄP?@)ڜ9{@ ݋+? p?ѩ>qJ=?xB+Pa?,܂?}B Eq!i??5_*V|W@_|zqf??Oڿ#q?B 7'I@ >/D@7x/> '?RA?ϐI?'5B @3='?NXk?@w>?nK? OB46?Ze?iM ?뿇Bÿ ?DIq=Ȉ{B 6@V]s?܀}?|?a>BtVU-ܓ?π78u>/?qV%?aLdGB-RN@ @ry=00?Z?b >C?侨mY߻??)*?ҽ~B '>pF"'@6,8<w?UU?3>X?B 7>0Ԙ/?Lm5V#>꾒-%>b3B)@ T?zѭ@S篣=E?A8?J4?.c~;7hB(K?Tw >60?CtQ_??sþ~1>fBD>@P?I]9>c{y>W}B*{ BG!?y?FBBc|E=:-X?%>}ՏBUܿd?OY#UrT>+Z;{ضKBX4i?s&k>v?2a澤m>]ol?դa>BWV? VB?[I1BW3@?eLtvY>>Ԯ^=F>bz9BZ?Vֿ3IE?j?%E=\==(L1B^ZG@?DF6S.s:d?v-s?;=K>u=6>58B\`SP?þ};hF?6?L =1>1?ɿVx^JBW$/W?'!>eU74?^ 8?Ie> >Fu.:GBQ( M?COr;6)0?Sρ?S1>ҿ<ORBK>1?%!>9>?(?dC~>od}˴+BGNa?ޏ>?!noc?[??޾Ý>H>7 F yHpBC;?;lF?\?T?Q&4?Q-Gݛ>=fM¿=B@3?C>Q?׿F?n7?? ,WĶጦB=V?lѾ@™B?dW>-?_Kc ǻB8?@S=^V|@UTm{?;ƾ ?8C^MB7?n0? Q@/9Yīv?0lA}*OI ?Ϥ)=ÿnB67???T@VQ;3#>ƯlPq?𪋿$i>>BB0?#?K@o7벘>?Q6@me?{2B ?(?@3;Ҕ?e/3NWk?{?QXkBC>O @?7l@/1J?OMb?"^?^~7Ap@U@Tƒ?QV~>?`?2?ˉ[?ݾk>ʸ#AG?0?PN?hK>TTw?2:A* 徲>? S>ޚAK @徽D?^'sY @" -?1}|?ƒ?l?ZAg? $@ ʟ?ݾbl>9>I3A} eGƶ@ ƵA? b@?kOE>^?! >OB* V%@(/[>@ >;v>??CBƯ-JE9i@8.?θ?{ּd>OͿ BTSH&{?Ob?ʪ>?>A?5k?5w>v_"y]sl??Q>]/A&YԿc:D<>&v-2?Zm?wx?Gj Q_ ?)Dn/ABz>ˑ?ήf6JYBNQDžt?u\"B?{ @?Q߿>??d>í>hAx? |m>(6ha>7þJHߴF>|:}kNB]/d8=t?[?U ?bOE?Md>۾] BWA=؄#3?\YB_< p4fUZs?}?ASӾ<4?^>O;?Q?Ckw>a;0>п^bA_Wvp@7gT|]' ݿ-?:ݜA2Ga"?Sſ*"?0=T ?>o8?D.,A:@R0F{̿4>޽v)[*?E>鿦">`ע>0(] A~]@;03bѿu&{O=?=up> 1APsV7^`b@ 3Y@S&i$=d2e=nuABz=ΈˁB/i`q1cM@!>hpS?&A&x>:5T%(^_T u~>O?SW%> AK?V*|dyQtà侦m<6x A9l"qmtYgH?jh?A3>>_>6A&de<9<ÿT3?w?>R>@\A/~(k*=䥖=Amܷ|*>;lYT-G?#9v>Td ?ҽFA@^@B_6ŤS?_ ?o,5>=??)>YA A+@ M-tV#Sp/?k)>܏ ?A`@AUvA@:Ӕ:i?[%UMK> >s+? 9}AmA!@jo-X?7D鍽w4?~><$B.A:?FueM(v?1BBx &Y? ?9C>/%B@ "lq#g;v%?7/VӼ>~i?]C? "fĈB,z@c˿;їxC?]}DU˂?H?J7ڶ?:bLo!B?/@fXn?;6hR7??4? ?s?xB?{@Wi?)ƗFX?غ>0k?B;&@+}@/Z+4 xܿ8?1 %:g>??a<>&vB&?,?z@%_0\>_n>\?X? yKA5 =B?ߨ@%i?.h<~ܾ£?,V?5>,)>7PAoܦ@ZT{ #?V*꾾Z=b]7>>P'=$A=ʩ?!Ya!h(<⺅ȓ_v?֒==.T?!L\A9(?7fR܇VPUҾ?s?+tp=O,?00A9GL@*w@>?Y=l>>>y/!¾B2Q?^?ㇿh?ұ$?(m> 1_g˼UB&UW@"+{?c?hD%2?q/?:>ۍ>kA Gy@2%)X?UNr>}!>J?awCr>.܊=Ah~1@%JF@WK?[v>?E=3Cj>^־["?uNYA]FJ@"*?g/,A?$=S>O>^??*.ο LA-<@L+?oJk ?d$?O^?+o=&%AD!]R?-?SLӾ\>ӄ8> >/QJ>hF> B+τu>^f`Ge?e?]?>oe;?:X><>o.B/iB?ݙS ?MmtB?:J ߪ86?L?8^TO88?R>X"Af;BD>J6ocj">^C?M쩿C"Oa)aB.@)ľy &;ix=[=Er3MBY.2?}Bu?xe_"?"]>kΖ/)?r2\)BW?|п ?'P_=a~ >lᄆ??1B??s[??'Nqe>6 j]hU0?Ɂj?e݋(B5{?'@;>=Wy?MpSLJ>㼋w)@뿔MAT?i@vJ?|?_]\K I><=?[B2AJ?-?,~=ARjy?)'>y[=I|sATߟ$=տ= >B'A?FX?"?x?#iaB xKI=h3U=<=o^?~fվ%.AZe6?6( ?6}>i=~ؼ?MBR?rn@+s>g뿋8;?}v>)k|;U")>=i_=sBCc@!<'kX?RYC?'S8?k?R?`A\BH@Sk\ 4>q9,پ?XȽ? 4|v*? HBF@#C>djDl2I.?W?6$/ `"?Va?p>k+?l6B7g@`1澏P˿:?0V>>E,Zj?`CodYB%>ݪH>NwYHMH;=>;>lN>D{>F>#R>ө B!W&>c@IG=?\?w?YO">ҜhaB )zׄɿpQpz>#:l>@ ?\-?B@(Fп ?O=?5?!?/!?w?`=KuB"q;\/z|(mtGFӯ?'P?J[B5>n|j >_= z??vL~pB9οHki~>><>LE<47=l[?(j}?`/K?>m'm B'O969Q.&z`'f|GB"5k="}M>S=n?7] g=zcۛsB! 0$ÿ񲽾]d>FI>Evp؏"e??"ٿB\"??]|ܿ.?~?>`lwBK!@W.?'iZ43[!?׽͒uR&FBM?XSBY@ /&h#Ͽg-@z߽nc 7>gZB_7?o+OG@$ @'5!N0? -Y^B_^?$&¿[ E>@"凭 >d]Ba#e}B_1?s6`:>x?~@4_Oy-~Cm|B]2B?]/!'w8)C>G@C͏ ^~Nʿz B\'?X+ֿFrɒ?"*@9bI.Jm6߿BZV>Wz"O[N⿀?nռ?hnlmBXBUu?!*g =(0g*Q?l?6cMqBPݝ>}pndy|yo~??6Y,='lxa(BKU>P? Ԇ?W?"yS>?Oz\͘B@ދ? xWu??i5?U,fe?@3 V>KB"^? ?0E@uif ?sƿ1#I?tad&f>!#HA-J=!>Q?})W?ʹ?r?T>FqAˎs.ݿ ь>t~=Ȣ,?n=¾VAú)76SwNPtu {<{־Ӿ\>>^7CALTWc?\MX?s u=t?wT?D=-"q>v>@1ο IUA/zOo?h?ID1?W|)Sk>V?0>>A*"NP?-k G?[^_[?m3>g|A!V4B8fo, ?@d>= =mf߮AGkپ=B>LsR\>9n?Ar =%0#- :~%栽;6A-PCŒ?;E·.Uq]M=Ng?l>APPG@>L=ޟrM7f+)]sn ^־t A$P!?fܕad O.˱aw῭ n]MA;v5=ο$K&տ ¥n魽% OKƿGIA6n> K݋>>>HS鿞`>4>G??+AlZV@+> u?Nп}ؿ|Oy'Au/@I>"W?Xh=.8_/%<ůA@@b?A>\L ʿX4=s?)?}taȉ{QA3@Q@8? ?$,&( I?==izO>S}ܾeAI@E@b?P>7/}Ves䢞:eCEa> yAa@@L>>u ⿼Ι?D3 :Jտ$E2Ao@z@ ?x ƽ,N2@ O?,d#F2-ADr@ï@N?/=[0 v>ݿ[2A!@@ݜ?eMH?WL\|߈>꒑>$p ƾKAd/@@?:?<=e c>qq69ߎQ(>DAe@,@+?+u+|᱿.Y>i *k+B=&x@ ; )=̿'ysula,G>/"6ۿB3П>@80VXǿ.N׿]&3.WC>_;b?cB5#@(?;?H-L /D >iPk?(A?@MJB9@E??bM%3_>Uה?B?>)x vB<@ ?/Y>*;,; uR=?eRʴ?(f>:#B:E@4IO?FN]^Ek< ?=#N?B>րriB: @-F?z k<?UO ?k?'/ B9c@Џ?C=T8omS?*}R6?m?}wB.)@:?q4\i4P?mOM??یB#@v>֦?C^7ʿi"6:? ܿ??TB?c? >ѱ'NTyk>de?c?nB i@y~ڧ? ?oz'ѿ4<;??ӿ>B3[@ !1?fRǾ?>Me1xXֹBֿ?eOG0?ĒA5>B ?$LQ C?J+(|X6> ?`0>|?^vоD?g0?=.JˮB b+ @([g>]R??9(AƓH?7 ~>/?%~G>R_fȡ(=yͽ>LA&?M⾠KMҿ: ?ry> RkD>x)TAg?@& tAs?^^HZ{`?pdy=̿܇dA#̞P@ Yb<>Æe=~˿9ǯ?돽j?Ay\"zw?7Y ??˾PZ?P$r= >@A@)@h>R->Pg}m?>UY)E6TBw @*v?>L𿪓v?6}#W$,?>5ڿ\I!)B9@|w?C>1> g'sA?1M/Dȿ?/<βB02@n!?7YR>2j#1ڿ1C>=#FlnB$ a@E4u<>>lx>9rнWpBC @R>P`w>Y?l-?'Y? >#5T{@eBNf@Zw)|@A'=I=?F{-GBXw@\L3Љ@0C[?h>)0RB[@'gZ*PVV@G?[>U~>$>_ B\V@%>Ӆ?,F?=WE>6+?>6B\.@*re?jG3?E(?Z=;@>–?$M:>B[@NF?k?9?v>;?&"=ՃYBXq6@lyo?_?=)#?GZǾdd=iԜ?.=BVv@z<-?q?.vt!J>ά$E?kBھſFK/>ھ6dBJG@?adR}??* ??8=ezfapҭ>u࿹YB>ns?m+ν->?¬PJ>␪z-vB4V4@Kژzy >o>$+>o>N0E>#B)@4!?>οY >?-%d=ʿFB" @Uin =?o* Q",?/? T:[Gb0Bp@x $? O8-?W;?: @',k VAWn@KP>%>unmC?HW?xh '>~z{AI@=#ſI`>Cþ1*>A>>鿚V:a)GT'Aw@j?7z?Jm9>Q== > ߰?;S?RUJAm@O ?3,?74^?= * ?B8l?7A @;CAY7?Y@h >9<É>;j ?H?=A@)?bw?s?^ᅤk?ɿ>,?L}d=AQ@>>Z?ۑf&/>| ?žѾ ?p;sAy@@'??ڿY?U?HR&}Hpܛ?Ža>SXA@0@]?)1D$`44 >iƾ,?&G1@޿_n'jT@<տe=ӿ:濎q A̦*@1QT@r"Sc Z>u>hg( d>l*">]A@]@־ȿ=N).QX>??3SA괐@K@u(3)M˿;鿡VA`>wZ8??'A;,@Q@2&>?0ym)ZzQ{-X>%>A@t@sF>CY>K ?& :2U=xĮAe@:@xɿD6쨿\,>>@VJȿ j!A%@@|gy>>:2pya)Cz><>?eEAra@@[,O>J=yW 俘P" ϿSs>f>b?Av@@fҿDjERHOMFet?U޿m61>5QAD@.@; !\?3Us2z!便Dо:OOVAw@@鿲m =9Y]>1>M>YȿStz豾'A@3p@=+Maɿyw>>?? l{>SoA⣔@p?X@Vq=j_AL>5=n>= A҃@@al< ?Ia>%Ҩοd;G~AЗ@@q ?r? yߕڽl 4FQb~>^A@̣@)?H'?y? E?I;>owNAxg`@K@+?%?&PPi5YIa5hz阿Rm/AIE? @,>P?%XLA0mK?gKlP ܿxA4$@^>5F!?bYE'!>-ywſxʆοCT,'>90֣ľ>~cA=ae]*xJ8g=|* ?+|>^@w&T??@sLbR!ҿ˿+>$>¥>ƣ?b+A+?㿃NA3޿?oa`/4K4?Ǿi6.u>A!$`ˬ$!;ؾbN?hGQ?%ĭ?#>_?nA¾P K$"\$uq?]?(?6A:0JڒATd2nϿX_D݌?콲z׾j5o>[A:l`ϑҿsw[7}ӿUnw ̽>)A#/iWAտex}Wr )a?Ov2.}]_>?=gAS]=k"29׌$goȽ>gnN?.6>xSA%:?B2)` v k?G>̽$?0s?_A0߈B3y;?%2>e=*?a?A˜;z}+I>YGrоU?N? ?xAh?HPHRXW?C:}ľ%G>gv>W>ӾȷA?&c"ٿ]I`f,>P]߼>y]=8?2H~?1A-@pw翫ݿԜryܿJ6@? >>ʦ>AAm2=vpſ/kVd;>,"scU;R1orkA w"w2+lK3&Ji>T<-*žyƾ+:A ԉ,p5șb˿d- >^>E?si?_S?A%\#np)> \X7>`?S?c?HI4A&7Y>K ΉĿDaE蹽,>`>^A#D~iĿv p놿}tn?*D>PJk^TQA}~ @&忬yVڂ,?\?"=۟Ji A%Jt,"W~^L m=ܣZpl=oEA 1aP߿6Zf<꽅stq=8b Yd>BKAB?59ϿH{bbV̿a||NVe>VAƄ#>9 >F-eþV1i) 9FڮA_|,F;>hIQfjDJf>sArþٟ@6r,T u>>w?>0ھ&A23y+)r#7=$S t?2A?<>QZ&A!۴=`V~B'񪿂F.?P?}&=Z>ѽ#Ak^;%}Eҿ7q9n??^'6;4? 1A]>OrM`znؿ;忴3>Fu>T!E>ɺ>kA8.gIdABb>??g;?~?3HA $| 1nkikx=Ҍ>="t?]?/:{A _H ʵϓ|ߏ?I?L=Mg?:N!A վv1^am\9r,6)>m>AKA/A83=bU:O(о{$>A,l8QͿ}NS,\龿L'錼>>>(?6AG<>E +hyi;y)v=y?$=09>),>iAޣrfI$Hb^JCj>i> >8TA,>Bti2}m=4A g>F>D׈shM>@B>2  >. +A߀迗Nɽ5뿈?M=gMzZ6?)܋?A SP >uVǸ9=Lz5W?Az?BA77?!uU*>֣?]?=GM]AfB8@Usvs3?qٝ=z $zS> ^oDA#vo۾b}ɦ)tڼÎ>۩?x> 5۾AY?˺ ;a3,T41B2>$ٹI$AEuWt2lN=ſXN?>K Q>n?SA¾:]Fk$8-J?E,$WD>HA-_翶˜;<e&vn 8<۾W2Ӿ?] c>`A=>@Pe>4|C<`>Z ><pocketsphinx-5prealpha/test/data/wsj/n800_440c0201.wav0000664000175000017500000022605412504317077017352 00000000000000RIFF$WAVEfmt @>data0!%y<`tCG'*x,gn Yr^\XqrA*${0U`]7o}lKOo& uU ;*mL&&X{n9u@4ubre&Q[WWFm}tkM6iMC 4R"'x 0MerMb=WI)Mtg~u PS)u)ol\h-^i#_XP_H+K% D P@m&Q:#NfmB(+xcSjVD?sKf!h~*Av:H8"UT?nj{x>/~10o{S"SG$'S )LAah?P  fBB{P _,dt;*F:;_ #47HOur8){.0V9wlO0$Sb{oa\SE Kd| T?FZ'aJ C8u???= C?2U}9`- YHVvDKp$H&?hJXm|NY26Ri6'%@`+?0%dHZHm^O<<7%GQ&PV1H7\:& $oF`03xuP0DGB9927YpQ.TNY_K!\C5,-fa{@S7U) #qe3-,JzdRV)x GV*)UPY*H 9IrW+49W%}W,WUW|d }kw'KB'KI>"_Z*z A/zBL[_^n AY%N~H<6^BPm#-_Zd&7/nm<$ZbtF_\Dec3_fEEY +%i}u(Q ;K;TI fJ &@9[T:nG:w tQu&XH0;]%+hT#^a+') k+vYEY$uXj,# ~`.45t7U8,6Rv\ti\ j%&L-q6vA<ZYj.y\w7*/d1p-IS'WoGg>]?Tz`gAvbcOC  (G)/L 9 ~)W=z.i@/$ L% QOOJ%2G4c]Ei2EWMiy?3 '(l lk{ }^wCu}XYC=?"Lj?jX.3>C<8>pF[,2< S,1?ZC*7)31YS8vd mQG~Q)=f'c5/FlXyK/KK<Uo=$5cf8/$<~ Uf8 - n=('#K;3S&K=Lu. =B4U=HF $X36 nB%f-K64k cqCdM l.RK%P6S.AFV8F$jH2@?Y,=7.l j,*|=A:P34QE[Hz4#jBUEEkd{*Hs: N(;nmx)h7:AJ[;J "L`\~J=w%zD::wED;"0"RY7>4LsV"K#!eD!tip jBL'/bNVEozv{+G=7= I2)d{S3,hMz}0,dHS`n @G X> %.P{Y/>1$wT% r!%mYePJ&(?7L15UUNhw _r[LBeka3,RSvt.-z]d~AEu/[)c,YH}pL #0bN [qAplJK>^&;`vZa N~)/ !b?Y Hke"lx4 z|4' j4, h]=lZj`MUmh>U L:Io 2b',e m" b_}>7m%~I&YE~ IYl&~Va5S)<7xX{i E%&qde,0'"jLG)sWNx4GwhX%7FHKi+Gy3q=_M_Vm~>\c=%$d` S+gDP;o%Q3/*Z@yF`.kb;t0K]My8aS=mQF%cmwl,G$n 6.KaNY~%Au'#Z=w'G=c\%w#;KyOyJez/G00 <Zq3>@QWKi!I*/# SxRmZM )\\1#{E6+|(Y2}I Bv M3"Z<%}y<_hE(cj29.bury[$X5P".'  g qr6UoL%pVd#TA3ND:`{_)l,e ".c:Yr:Qpu.KmHC*GL'H&.N4(?o~r;uNC&,wn1T_G 7wa4GvF lmBF?w4N ^tQ*r5AsW*Jruu:<~Te0,8Pf=WZv6;=>(j0 zLe1dk8(R=!D!C603: <5& Z1P/+mR[K KmumsN'.< p {Q1?0YECXy }>dgnQ` + ]*|z3MR_Zi?D\H+%:28\rO\s{(|Z?M%m,n 1W7(90N%4(0S\K7VorW0 B%Z~&a fm?B~]S}?X^W*#8E)m:g*eO#bI/>'U/|F6[n/oqbd"xd)-/ B7~v}]qFU.cHNbH, r 1W eCzkn E%+7\B K`7 &uWo}30%=g0G}e4N |C31JF?9qS 3B](( BvEh<@t*@P/Vh3D/g.HWb*M?DXsSG'@A5m85u=R=K4/icC"|8  $6;')E{: y,'EQ !'H]iB#T 4 +?R|+O'1'<$}xO8( >af'!+nI11.\tnL~ByKhE)F:, [H T .,X? p.;m4IFmzs(6E& R'D"J2 DqH{` <'eAIOp4'(~) Y`"yb}TO.6$7  { Q0H sdN>1j/ d,~fX)P{"Lj#QnwQIud. {th:Ow_qgngc|D&\u8=R2Z %^aHhQ-{E\[\_&a,a>&5aRi0!+B<$n|sln^mf[,%.j ?G%'w`aRuZS - HPDQ=Obv*RX+n2j] b.7&o!mk ! >en :m+`WW}T5EHi[U! ycq e5%%p@%% M1>V1NWd3nHB"~% S7H{RMb)A- 6 lZ"c}4P|5j c}4{_2uluhrkb5q]$1V%|A<ywDNuK<+q:PtF 2C%<cgrieNci1 qFZ9``PE'S4MvfIB\5iq%%C$  X"C}0A^<[M9lrX8N v8i&s=6vH;Szm2Xn'V:sYgJ':|9*w":0":\TDMzW*<q4r)(/][KcqwA X,4(ZTl8 26NWo]K=OC751P.;TBnQ (;Y,h@:x9I1XUbu[u6cG,R6f:l@n,1M1 X/~ ,nY8xEB&7 >'kzX4c s7i)\)lDi5-8g &n5;a'H[7VHPSd'FC9OzE1"n`H `"*%<9iE3v+cat"8D&eHE,f{l9xtsQ&r N:s`c:b: X+c:L6)2 yObu<%L+&/[W<V=Py*R:fei9{#H P%wfiB+ ' F6c<`0:45>D^!f0/AlRC["OfjIi>R{Y 1~w$=<p`{:7~J|7FM$9xlnGfM_Z1_XG9 bA$39gNr^)>0c?VW-r t xTR2Iok\DGIVJ Ll6(HJ,! OD?Qmcmn+/<#cwmqR>eH,jYK[?+? |mXE+lG1'5W }D bD2CK9- z S8O*Z(2Z$'ee+qwIp_'S,y0%=VKI8|Qx:\ #`-En\qkTjZ +u`C$9r4C>z d"w9LI- |A~g^w8/?'87$8F#Sobp\$~)-u Ww['UUa"l\8gl ( D+@l{xbrgOhd%2u@f\lu%M)1O}dht=Rdc**0!Zq'3M`rxHMG/&\+hd s X@hj [Z V$N9yB x*T&m_aFF?- <^:J-ne3F>"n7+T+ I67= BX\`4R7RYp%os)-T({1<MtZ)Y%QVv& 7a6[.5x (z++3"U@nbci`&|K.$2fV\{N !P%XR) .W^rW jJ ^Zi&\ f$nI4 -CImwHxU|"{rBV Zhzr?3 .#@&UEgZ"i$B3P  `lbYMJ1~dVWX)] jFbY0!v3U|+:IpzUNNYp>3R)( (0<GRmk$B~ *yF2_$rCJ~\ZY[60>_q*R59hG9-@TdI=9/3'1GS@@1#,\{ JS>>g:s?^ .<{ HB]umF9-i2i3h%b,"4K+)px*[+-EhE[`&@< 7[%^:E^lSss RhV0V\#I}^$5XO%0^4}hdY CjeLftkQ ZHW^CqNi`y,f'{ejnE2cBqw$'YU/{|:d!O3zc o7GWF~  _S"gV}L}YB/YSTHtB'Z9b&(rRECazTk*0)ju( "`O,5vIdp5?8H=2Pqy"EPmeFW2= ^Mto nKGW6k)j:;6O#"b *O[B~ %9 wp`^c[EiegDU~ d eQqqG@w_4}V6ZA! DdV(^qU;lVS@| qB>'.*PS:AB.T\k_ HQbD&~5T^;4g'o]Qs LN2TwOpH$U\n*UU*tbQ[pCl%6|]-Y/V3lp0O1+uxI rtQ<`jYNb  BH^.vaVA"Hui,5D=rALX7#1IMu{'k)uR-6FMRf_hWmM@d5)t] xax9* ,,<cL 22]'bzn;w#@B>q@?[{: 4#uvBf!Xq%>]'3`lcX4Rs2R](q\PLO^CP\>P?jF$)539B339()1qjztZ2aq~In:3%AoR#4Hz42-m*52=%LW!=4JjB"w\< N_5` 7"7Dvw@t`fj`iMS #*:BVcUnP%XFF(u$O&&i;J5Un{I4CW5 2H| ZbD" \Jqo 7"-]P`^ik Z%a9`zk[=<CND}E+QXQ%mecthu[S85wO|4;H_(%%G?BicfWy J[() { 4fV%B`DrH`]g>Mw.l  ZY9 zL'@+F%%)-5HB"B55a19{{ao3{$B9-HP[Es'gLGG#$xNCyQs22G'`^z0L K/Eri`Z6PcS:.C8TUFB2@wo\p,jxfaX21e %j[I,dd`DB$/,%gk5v#.v;Su8+>wkJ'SPxa\qwy `# #[ T?hp t{c?W_k '_C g \/C o@/LW,ȫ7('Ux ?8 Wp7X0 x/G _0(Ж0Ӈ'o,'PD ֗֟,2ox_XG w3@(PAH JTX ( D<s(XDXƧ͔'L#71'kktgl{g%_'xXX/(5P46[(kt/ ;O(rq(8?0؋"6J6_/x_0 p#/GhX%7=/*wXg_wG?    w?އpA&(6(/?&܈7? xw @ʈXw_'/ W_x0?(''g  x_gX8O&5?A1)"Tܳ ԙh"-4$ ?ޛ 7@'MO 3 ?&Ik!A9/zC!iø"&H*MICV 1O$(EiB[ !%!- Xȅ˪ >*;/' =Y+ c';1 srE 66,I{46 } Ms$Ĭ ע p&'8&  Atv a   w)$#- \ S 6 ^ y!jUL& !*Ah P MN uw if 3t9h a  uG \ .#|WA)( $xQht( z  }R7|lx<6wbaN]k28S_7 XsA.K qBW)iV l BvtI3}AW t  JTM/ = Nh59sNwyBsB=qt +^GJg04u v `S5K56 M^_^`  u"1#Nv,htSdk@++,6Ju_`6K ^'=I+G7!f.>O'|<%#t~ BH'Y/K4"z/tt5D&7pmSaeuO m%I 9I'see #,m]+O,@7+;$Z+0!~.|]Z+K|v +&3nb]te[)VH)Z %p{>G9( d3+`KAWVr|=VbPE33w@mJ5ke7J{3!A+fPRpw>TX@S@=MKR| }=zpF  Y+F ldپ߹(>߲ =@G #Ai Wr [Q-01 Y S )В>h3  ` x$N 1 7` t)4b6,S, [ξ$Xkw1ga.ɕR\ \ kO  M [ jg ~I "A+=5jB<0Ce[E- ެ   WM`[!kaR\ *jq'5K+=(R u r*m# &QM ] eH 48 O ڂѥ]<-$")1SB2A <%ypy)O X<A.* f&$}3)'2CB: t~X %sEx~٬<XS$+@(\"#@(fs߇JK̞< 4%)0x.Ea.ە3s7*=.>-]fpuc5,-=#&[ ^X{ s JJ q&|%+-$6x><9c^˝ǿԤ߮LBs.N:a@;1]# P81Tj(0461n,aƔWP !0< ~:BWOueSj  S e7jIOD MG k ;>vc6wQ *E!]/GG5V?;- J  < 3L'_iYL}|-D\a* G ! fu^q#!<"`>/Z.>k,1b 5Wv_n+,)[a}T8z_'5/"+' ~D  {V>IVt>G xC36>!t<5rkle>)DE/Pn?kw] h-%LK\P92^rEK oPS?:1RE:0>UNB#]^hRm-hkg,x yhh.Y'O'4emW4NK9.G% Dy1x,xD,0}>sff5U6N/,*/ kYokGiy<,<#Y,p:r6tK[Gov`Tea}^:oR05]b#b,o:tY:B]^>#:Tx-@".>rytr,%5b>s03R!tR%\xo 3L N,rzjf }5L#>AE<,E#b>UN,}:`AS('Nt5N~[E9][0J( 0:pdt>N#JfP>'< Y0}<`!5!ChPY>MX4f(L0@>[G.[0,t,GE^{P!o(0YEdYLbT3{i3&F{U!erklQ kF <6M2N 2iQ,p[|) MbK| @S'Fd]CtaR \v_{[iSPE~L\ADE|G)i0o2_c(C{%5<< Hl89dgE$<&N 75>m,T3xv3jp^.~ Hl&FfVG|Z7h N/,Bh.O~u>|g1;cWTl%M{LfU% R[jHd`xjmMDG)OJnPZ/?CX y-r|~bA?/njn\~bH') GP!^GCL1}pLY}(U$1:p,U#,-6;uDh Uj->]G 3= * - U 1zFC' f} }Qe Ii "<ެߘ;u 5'q!w  \^o ,}T W,\k[k  -"RWsF_}  )T[<j g:hq(:J{gPPMLFK k }  0,J Sdn "Kr y <_]D&YS    xW^Gl|8 + fF1 iJ%`4qSY -  j  C 3%nXgmz  #j5 ]xn2!)9( * X& [kbbF[\,'N & > Oa^JMQ)79 1 9cC\8l! "L1 4eQ5JoZ%S/ZXBY%# 5 # OOSk1 =? ^2KUwv   9Soae] .x@pw?9 b0k-%P[} g U y =!!%m nFD,  -Oc0*  u,y? C  SqA7 R)^J(' S)K\ b&LGM I!wfG  ,` >N)`6  N - k i-5pcW9Mf8T.4`! [#L +qn eGB}F}i f" 2 0>A,+\HT-35 p?u%4 Oc#  \ G G9e(9qjr bI I *s "  r |y'>| L Q#G ]kcKJc} 1 v )Y:"jU%# 5 SMjf |k}3 m-1\ Ka503q=1 J J j =!_kz*v">L_! # YJ]>U[D DF^v wtiMY5II b"4v Aq5J&R2Rr%Y # G '_G+(&Pk+~Tk YYj l WLoeu)Z"G "x  R$Qo y } ,9AqtC  " n kxlRQ\B,m 3  n I 9Kl d` y "y (^vfkq2Y  ? * {  _>h xr oT> p 4@{mF= 3 v P "%13X&uNT\T<" %t U  >ICL< O q  v  3C:" m -  H:B/$V2+xgB m j9W#U;K G % i,Io kK U :e .o~Z_tAG 6 gj4   *  > wM@"^t t JdJ%7)o`?DIg  p A7uTd]*BW& ` 3 ^ a ,Gtv<0b 6yzx]ak^~ 0anh?}rD$~G 3O d p ;nE)Z7A 5 y}DmR7fCk:r`hCUaimuJ'} i&3R|LSoxkf.4S8G @.(,, tvD~ f>fgk zcLBRR0TFvWtVa15M1^#&W!UP&Z"C, $efr}*^jFZ@#}=V!LY0bePn`][ BB3i +@E%A{m.7!60 QRnTx 9j4eKgIBXA{& #f.e[H<,# Vj?B BbQhbER3K0 c Fi Yg"<Xcs#5"c+(-Xb rZ$]C6gl.z`')E'Jxaj-b{.'}j $"D1)V9bT[S_/VrH@f? 32D p+ Cwf>g|{>.W|T:Q6 ~1%;kkbx9^}YYkob## }]#}CLYjNvSF#h&7?,^ b QYC gY-U) ?2 |80zP  hv`x)U0R+(:{e"RG'ciUCA A Br |8N s  SDdT% & 9+B`p;o , IB=;3w4!5 x& Jl 4 3 8 - 5 c&hAjG|k XTP} ^J s w6P_ v 8 i?V/#^L Ai%?Db y }t  z']4 WA# ]7gpA-p4D/xF%} n > Y T$R7{]Om-}G}g[mM(FKHn >C^B sO*:# 5 O_-g I%)y(Fwq#\TK P)  sJ2'waj } G U  7^4-ON5 ?1 X/ EZ!k Y ]-gq%[2vG% I_w t I?> ]N " [fcKd  ? # +_<_ߌL{%,"c&T/sx_ 3S lc 0, #;`z* / CSMX1.,;6 U-pF SmS_fXdMx t1,$#  |L)C__I/ U n r auPk}Q!*Y  * Y %cbxj40BxB|_z9AX62o> '=Ac:L#j0fG:EB0O&m#]7aj{i fKP5P#]Z.RY=e!EA|,G_iedD~nE y#],$=(xv G<edz 7P5 eIr@>Ym##b^bb,(^1C?uc:,b>x5^L}YU&wv UFRk<:@E,ZJ!' ^fE1]sL4#(>0r8pL]@0bPYa]x}k# P,Yx ~fq#}Ib,CB `yx,G- ( F]# y ULP/,,Gt(;>f(fY!xr5rE3 *_> CE0p{`TGIp#<dkSUb/-()gj\>##bLn8NYvttgOyFen.&t<{obG]bo ~~1 q5YggLGL # C5j\Sd P/ip7%NAt{7WKd_4'[U# lB##M|MbGhy~3,N%?M~ QFEaMA2 P}%:NB Po}:LP}Mtbby,1nkf'6g>hp^@Cw,EkT9P,b#kH-m FCHx 1#(KK>= 7O^K"H1,G#~}LU] bb>#[#?#+UU?PgULCdpdovjhvoQ^5C:oC ^Bu2 fGT50 G:1^P:1k#:gCt(}(i 1kJ0$ v `i  C_*|M P * k  0CI +k{Zx {#g  2T:, y 2($]C W̬߫Ï,?g_%,+%| oXL\wh {+3` hP?| [! wT Dݾ!p5?80[(g%L(xݸT{c;4pwxG; L#!L|C84)88.#$P"x#ܺk !C X  gchG\\[XS x!0! GWh(Ҥ7G'G6p5+! 7kX؜,#x 4 ;x~ c4+P3w(4ϨļG[<<#k-(5,L#x!,"W[8TPlkw, Gc0!; h$? +0 V'G0|Pgw0w3%X %)CCx(C {# !_KCDpGS xo7 !;Pg PgݸlX \-0)%!+0N  h Tc?4 o_d8?L7T!![G D$?l@0ϔ(K+.(#c&5C7"+[΀0ٟP$VL.#$[(T!(P,,X C _4 G$&(#/`kkի$pۘ+k C%717(L#71?8$g |<0xSG ?&'S;l+KW{(( L(<اؤp+ !o,&p#_0C7k$ KPҸҔ_#3)%|7 H /#g %&| cc# \xɼhw/7(?& g.=P4 p@؀X  +) PPX ' %W)7(G whְ€PG""'8C?8$qܾԒpΤ5ay)22.0/'ym<] v u#.V7 4(!v UǮDLJZؑq} )9KMe=0'tpΚ€ip$")-F3f5'B_cd߫],21.' Gc A(*pd0 90cDF@5?M:-nw{lœ>< H n %4;890i)m Leg!(_,R00(& qTƽ6*́|Z->Aq?>7u)l9]ǁ- ف |+$M/z3@1 +iI1 #"#  3Vפғ0w |'%)./( dd_@# |k_ `Ho7# ;g Ts\L߯cWlS4 {< ?Ps'eqW3a  g Y {LM1F:\ PkkQj-"ZEi9P1 k {IQY7| / H}* O{U|G )Tu?ga39 Ke%(:ya y  E>/k  3}q]f_%<*.}1 Z$mRETkbgl1}^(]##N:vL\z7n}d7[S&*f*BUHf)>"l_{G":gE~oBNBQs.s^F* bfT d /v"SF sN wYviC3pKNY .<,OMO gorG5bC 30E:!K-b''XkyW12Uw#8B.$RgC?eQ:7>--15}k 1}W#@yYDJU(AO 27s.^hOXo@o:PQGT,C~#(ct5:%!?PB0#5BUn]TN$#5(uxOK xg _ka[JfV.m-< 0Rn8G,2bKm_G1QMcuMcc= 0 3 Hl#?G K ` gp( #  < XP< ,LPմD@g ; C {4DgS kkco 9= Pl #g+{ #`CCK4@3,(!(p#pDW4C݌ԌL'#('$#$ $SCC ;#&k$ FLzIˏT0,kG*0o,$ cC\l7جp۴htC"" g [p KSלGLCOT?# !)L /ps# 9Y G -aG eIi$&a0qy` WpF() " `  {[cSscOG##{,"$$p# | s HG ,Xd ?Wo  > ݜ<c&*s+("+4p>3Y$= #3\-ҁ0݋. -8:?'<2<*; ^G%ƿ0ܹA% '%9>:A1^'&pր?Z L)@?5k1)Ldߟ\gϗn2(u031, e!gϤ)T# 60[-dj!# W@CP x(CP0| # X_# \ l 3_ T 7+I)7[k  {7x T` PO[8< ( O? C P kt( x ('  g # n  w>ҼGS  '; +xw0  G KtwG\ x3wcpC</p  x 6W@  c< OL/h? c$\0 (#3Xg  x[ ;wlL| G  w< Tt =4 `  7l#Xl  K 7o+ܰLٸ\ <  C /xcg,o7kgh$#n{ +s k܏_`TxhCW#O <;Pw WD >\4xgݠL +o?7 ;4{cxSL wC  xx7 [pc_;kԀ K mi' ? 3 !#o Cp,   p Sk /D;ڼ #$t on/` (k c8 PL  S3 ڬոl` %0@(# xk (C G{ 8 8K|`C w g  ? S7SpۿG(#G SWl+ # /T\O[gTW/?  0 /T_z8#j4g |  ,I'4Ljjwco# _YE1M- aIiU H%T"vWY^-u  ,} w!B  $ UM>uVn r d 3v R +(} j ^G  5 6G!! H>@&1 5 W- t]k   nN/7}e*1 ? 9%P'a - G 5W| ~e  =+/ -D,} @ CBFE! 35GgPE"lBU #k ?\ Ew  [`& b %x0 I MF -;@g O #} 0&B 5 t<"# /m9TK=\bW{r* \cR8r'!Ap%yyp<&:1 g:gPLtP *\\UZ}N"Rg)MR  hD:Y@hv- tOP 0Nrp f ^f*Y5 q UF{__e W; P3kV _ =*sSk_ \ pQqM {e $vDE< x `*l'xq #C %v+7v^G mO+IR { FDVn!Zp)?> wS9K{L8 :}i AnI W JHAYg;O`7^g :|   y2? bx U mkFdl8yY ,CEA_#=eVD~dA /! %Uu  ?b2e p [|@Ffus 5 g<8&7fFO 0\ '< b %n  !1tk v x e }p rFr`   9  bh2N S  \I]r C k 8oR GP LT =oG,bwrc L: K3Kg B R ]%PVo*v7?K 1 - 5ny13< u%Y K&P  !_>4JF b:b1gUes \ }> U +JqAf * w,1}0x,tDLRz_6I* <  !(R3=  er_7SW!QP9I?uAox]? n f '"Nr\# s{;-CktFb-MM;E_0KEu5C@ E fn J~fa5 k k 7G:"1qx|A~ v ^P J Y x`H]9.PCF H e3G>BX4jTPk ;W[# g =b7C TL11Gb< l+Z#3+  & N - 5 c1bk k '8#dGdp "!_#7g/8{,OC%%!pOS0/pc ? nD;{- {  E\JM 5 ?=={C  !fk# v s)Gb&o'@8WL!`GpjB  /x g A  40`FPP E5 FR6K$# ߒuTXxW '33TcgoKk  Ch /\ o X'kxXS_D|S G8׫{/ C p[DX0 "c   [|4O/ C@|Wc'Xd_sSO|ؘڼ4GT\ p#K"Lx"" 7?#gOS'h  k$ #S|t|\G  t[3LC GG|(cAx Z; g gsgC k xO??C  X3(˼;K ,G$Cd | @HG%#3-- = \WGx#(3d CTpl? ;< ,kT3C G x?tlW?&Pt#dՐ{0 !C+  aN  w#d  @G| 4XDCc /g sHg'#W x _s jb @/? T\ G0l7tk C T'[W 88 +$# C G C $DT` \ | 9jngwLT\c[x S KO_TH ;?  _{wd/_ ( S7< 4IxKoHs  ?#4PLܘPWT' ` G _{cWs , 4;w?_8#s,_*?9) \ U(y e+]Q)* j  y  %C0<QQM[x'A)UJJX$Z 5/g 1m}Gkc=+9U ": F {@ ;O5  T& k 7H;`^"_  c9+%?E  d_60 }U+ M3n Gy[ S0pe)x x  /Wk(c[?!w- ogmC #  Gb` R2vU ob{8 tAb#R CI te%`/d7}  "F !Ck"H;}9YaIܨ8 Eb k4x Q"n ^ L X(2n /3QzcSEG{{.aUg(:  xR)LTfQ /sk5 "  % U  +D''c<,|;?8 7,(W(##L#((kgP+ 0 Vu0^   OLxZogPu;" O)GDng{`  C:JFjY%b59sw7^XFf} }-GpB&hVkT>i`D6A 'dy*5'&^oI1n/*P YrB eEYPk03gk.i %8*)/ ;E.,iw9a5# :R>O}fJ`]Y4JGblTr# p "tt z*aF(4-Qr,C LUo%SHl8}:}NY9:#^?#1Zh9p<(>a(d1(N :)PQ<mY!>z` )wOXk(bL1.;y1&n('!T5> >cc::Ds}G?"l&R"<  P Z=t , EPCXa HE"38- y8' t4[K4nbkYXeRlllIP F CBz )O  ;yPX:Y^qw?hXfqwY-*xt~DQo qCy = )BbOJ G )Vw+"' (}j (R 1 p nG*Hm5 o ;>2$&} g 9>CJR*il. GZT_Ejv_xvwX> *  f$LF2'=:y$  aBiGE8h@I; E> - Ir'`&:tT881> V4= |U0 N.$k=JK }UhBnP=^t 53a ECS0Mg >~FS&b`K[`%G5YG9Lp#Q#5f m(K^TV?!!tSJkU5b? MgI>2o/TpZ1Xd IF(:[j1obPM AU}hnJ!.+PxR~Op+ky"ZEa$t$k;FWJ]P 9[FXkYytgk ,Q G <<$j.BL ,#k: Q(W 3? /@jv@Fr` * # {SS-R  qfZ%X8z4X:8<=| 9 e{OIKI?YGBc-4_L(:Je`eF7,%2? ej\ 1 mc xUYb . 5^b<8< y:(\ro!]yU`Poklek9'sGW#ZWJvE<*3}<7J Z9]7J'9#C`W`0pk>5##tU}1*L57tY9*Y s |t|n.@R;c)-(b7EEIm)}(^Lc-p:l;:[-LB# ` TgG SmErT   y F*d 2@U]Y /yd&QAmu:~h5 1 j i#}VLC PL PO ' F kUXEn%BWGIq( )Lz 4py /Y&mr+U r 4|J }K/1 Popp #)Y CL]t |t d =6u +A "B0"? KiO+ADTeH &2(N;|U* Ey[Q7a/ N \ )t@Mwk k   #Z]&-7O' T2wB > C pMcM{5 XR Z{L%m 9NwdxXFdtHC ` - F s0[K.zN1?:C iG9a Sf+AC,1=AgG\uu y' / h?9o3 $G S8 V:*[W2@z1PCKow"4s}U0,V[ZtC5'q_ @v%mI:Pyr(Amv tn>oGi>WI:#Yg}#*W}i{J(W1 NESg^X 4@<(%`*v"JAsw< /` {J"Bl/*_TPoLT`# v>C]*G{G 3Ek&3r1p!`i!+E[Sn[r]Wzi&r/[Arlmy!Lg !*Pdsvt/x0-D!:IR`]W6|XNz[mJ\F`nr{q!`]1<'1k}#r n Zy oTq*G~oW /eM^}"'v# dC X1+U~R P N }\SEEb){Yyq. p?0Sar& L}p/:ypk_p y4"O8n4k}yCyb5B\}b#p\L()^yP7JPo",YB b''ftT5xY1M7( > 1fVfttbtTH"&Lot6Eo}lobR#Ek5\Im/r|<$xKD#9NtL 'a3wjnR o tt8PZ9%tb5t`,,y 9K2DtP{}RWWCoFY]:k%#%,N_as9^g15. sxRH  U   %tkf Y O G<c/Ay(=-i R;k0'00 C GG ` # [gpWo 3C8xٟgݳ3< 3%$ 8L'[ f 7\ s,,?  <  4_8tXT  !c&(#T!X +c< 84pOt0?Td +4~" 2/T[|C0p{(HG; dsd|x  < 4 wsg8Lk w g/p܌بL@w\ oo G TdlT  |4 < (<,t  / YkLc)!ln{  ] A  /zgkL >Y,IR QkC+j> $ Cbj ZWxy_vz?Ahkv;F'o 4Knsm`aSB o >NCf>e681ne5*P`x5EBg%> Kb5br&YffTiY}Sc[@6GtBR1pP\\[ FY1z99x3CN/*E>1_u%#7T8&e,(a&t[i>Nbi8U;jB>3*I Qj {0E Y.-SPypb#yBP +ivT8n<$S*,1%0yT>bvYY:(#S:#]1]T5]Z@ /vb.9d+7>8G}4 <8ysW,qz59?1} lPc"` I]N  #0zwR5Us[y(:5Di^1L}1Z@cb#[oBt#c,:  dC$${/`7[_O   gP,#WSW;(XG0$dw'  '$'?0#}:Na3, 4 sb!. 7# }uFI!6>fw#z2ZY#1* T!4 zBH0| ! tCH$H0 [ P| cL$8O#ߘ X# S T!&#K kK{{?  sAXGS G ?G|x x TxHt ;4 ({) l3H {, oCX, , 2 P|#_,7Ch¼@lGS+4 $&8 SW#_"L Ltg k G? hG' @p/3)(W)_0p#ʯW_p#.88p g? W p _8Z,0  (O G60OGG/gp( W p"(h7 0 8 0? PPw 'o` xg(h Nw8`P >7 pp ?7GG$%/p`pw"$G`  oOo'GgxXP A K_'`_HW)O=0'GHڇ/'g%/0P!+%o/X g GpoWGH` 0/bh_'A2p'O+` 0!.%  W g(hwOww1C_w׸_=.(h  0oPXX%Gw/XG8_ W8 @/C$g_%Y70X8G .+Ox 0)$p((7 `wPgo_0WxO' W0_U` ,J '8x$ (H.X?_( WW8P x(X_ g  OW{qd馀 (0'G(GG 7 xp 8 $'/ _pp? ` 8 _8(gppW(hHwtc3 6 X/0 GwHܘ  Px`8/ 8Xxh OhgWG8pڔN '7'Ho`@/  _OP?gG Xg` _7 G0787x@_x78whopҀ^U!2G$ 4{0$ w[ w? dD0#X Th cG 4xspd ?  lM  ! &Tt | G'=FLTs}]2c[5 _Q c{ M@jk Zl-D jwO|yYU>  bb1}+ y +i^ sb < O8>/.|d">A]~\ 4v P [=r u9 VwRuKo:6[EpKn=E[()"| Y ]fJObP^bZu),1 6?bb,J+gbS,Cp$f]b^fa{piM%,b]'K#5B(bC)f mloxi v]gYY` <i f9z."}EeZ!bW*N6|9kesgy q*V0X '&N)!!ry>5{It*!5{eMal7{b}m}2g`%3p9Wiv1#Gb{oA*YkToGrGMK~Ww O::6[5_%$: YL~y,PB,beTC?0GR>pDt+VP '-00'ZL{?bGtZ q}Pfe)5hY I)'g=ooKn8J>Q?%K.wh6kQ?=u5B,bT,5-5m~n d & O Dc! PG%aOSIIkwSD0<}LpigqMT rg8yVRhP  :2V~0A '+} 'uJ""gk ;3{1Zu ,`*T<)Cwg\"k+2fR  cNe|TC%;)PfN ;P`EW3 b>,FYIc# Zz4s9Di@%3 w;) Y V]D A/dddDoQ<|;YjWY|}r$m btUi$ D E +0`yf JX72Z2+P ( Y =Vl   C gL0v. t`H'9@f   ! 3 j6;QO ( 0) ?=gy # L5)Xy$=@u-`A2bnSO  r$KD45 y 9!v,XT  Ece/Lv)0mT &v-5 @k t {} 6_z&ck()hco]YkT,:BtB}GYtA2wI3N6]GO`IUq@[-UKPta|tRI 9Y8"5/gr`vdJ  j4,t+{`jD%<:55m<Ivkt {iw4T#=njD,bkqxnSrapf i[{! @;/B 1~~ l 9f 7V(T'>#>GX]5 ,B)5Lt3 ]P(55 Yg$H (}FG1>#]G0,'jA,#pTL` [!Sr=((_fgI(?} .pY&#}:*2'aB<1 bd>Rvd'0E L#o9:}ZcEG ^Gk!bi%d.&BA@ 4Q] FM2QZHrm:HXZ;I`,L[)=_`,d*y 5v . X.,7-(<njc ^u>BX gJ]/3R1?J^  @s 1%B34LJ!rK|&'tq<Q*PeR#tUPK:~ a*FL`R<+xc" "L"LpL|%^L%z(VKDREh SZPqmY;sA$vCQf~f?My 4P&-!#S%3]lLP 9R.mr|SL1\vw21K*rj:}H_Clw&"4pocketsphinx-5prealpha/test/data/wsj/441c0201.mfc0000664000175000017500000007612412504317077016557 00000000000000AbW$H );2>ig2m?~h?-?T5=ie?AFb\4_?`r>> F?ܵ?2.? ?cc>sAL~'W>$ ?#=ѿgn}Wl?]L?I?cS>=78A+*A=\<پ)l[A?a-??i> =?A6;@ a>6=^= s?ę?U>>YF,9A> ?>U}*_$?#ǿA\O?8Y޽i/=D>T+A:>S\~ӿq7B???#=`2>SAX?Nw@kտ7?~?k?7c`^=w E`N?A8qZކqڿ#򿺇Zν+?bI=><7P>8A8/Y>=MH:8H>?vIY?%] >L>AJc"q迁.ʿ9pk>^} =f<}zzA8bG+(}ɾS}ҿs>\?iBD>M|?V=%AS\=.̿>?|ʿ:->~?9'?FH;NAI>.[.B?{ > ?yO>H>>wA =Y?GLܾ[ !{?+p- ˛Ȋ(GcA"~/IٔGcV>~ {)?~6Ñ?ϧ=/Ag7}=mgҿ)R󿭙'ڿ9?k$?n?R/?!Q?_[A!Cŝ?IZ|G)׾K¿ 2v?T?:?G˖?TNA.K?p 迤Dvٺid1<{>iA2iX?8J+9e-}BI?d?P">>f!?)AA/\t~51 YbNza?U1}?>>?Aqh =ᙼ a Ll?⺾U=K?kN?'kA|l(q>W`0?ڿ(7^nb?%Ŀ\RA'?D?"A4 B<>z>[Cc> ?H?`{,??'?0X?WxA@3@>kD>jΉ{'?`?l>(?O>A@H>Dqbcs4s%p@+0?f=DM?d:`?ɠA4?)\:俿1d1矿l? ݑY>,>AH!] W |14}?j>nYn>iDAdA8A8Vhx~ ^7?L—=Պ=+AyVpK *|>^Z?ھ"m,q>Jɠ~>"mAhjw2>3U_w??G䙿9A{[@FIp?+Js N^>MZx?;ϘA^4NOL>‹Dx(]i‹=sh@Am_fCa`JA?r{$ߊ=>;=A"GyܾY.˾L[!?E/уL?/ ?0?NOAIjG<Ὶl?D?@ =ӂP5|>D>鬪A, jJi W?TոHteh >V<~H𽖜)>>A2JXUh-?@p>,]>OTaZ2=XR(!+Aн4p8[V>rW< EY>4A!iilC܍?h >,> >quZ?AA`_$fbY??Q?w+8W⺾at<\90A?V7-Ys=$>BБs|gDjA%_=^gĿr?Cɾw +jC}H)$A60@e?P\3>Tι>ș:Ay}˫4~>8nA۬h?-V; ªEȃAc)gsh,?]`>D@+FxA(O2?%>}cxN^`\97a>즾AACYj8,PMӍ?)M¾A5uUc1ٿiI?J'm.>#<>p>1Ÿ B|R꾖ALqp*f>?>Ր=f;XJz >n羬ƯA\"X"8??C-K\=>"CwD/>?Ѣ>JA9x~\+ ܺx?*M5> D?? AkmQ͵@ )>^>w~d UcS6?%A'>uEl?<5?˟z_ pV>ɥDp4FV> vAW jQ '˿m0ZV>_?3>l=2d {S|歿׿$>!gv>s/X>IҿA U}Qտv=a>_?*!P:h:?l'AlJ WݿyZiy>~A.wվ.> 넪?J?UAk|>o$k{s"#׿6I!=ھ ??A>0HDZA9?]J?613?K?#AQoQѿkϾ?ϿZb꾝a> 宻0?_ϊ? AᒿRؿ$?? =O7L?NX?(}?:{=6Atz ''=տԣ?N A?4>nA4)#Ҿ"ʿѿ~;>6v=&#?><&u?6ZWA]ٿIeu춾ʐ_7Z?ko>ٽ?v?\pAK3>Xп1yasȿhE#`?4%w>[[So>So_M?[=t+?!v>XA2EJ69a4)|{E ?omW?E?>A|L(lL?8?S_H>4mgy?=P/?4A 0>k˦>R={^>vs#D>{ VA2<<~ZۿR?j ?=?kjh7?ԒAS&5ѹX<8s?Z=}Pn;>ܿP( &= A 'l@]%m}M?B`?@1>hCtA]Y"C=?ukF^GB9%>!Y3<ǃ=l$T>HzAQw ' Dk?K5?.{d?X>?GNA>UЎͿ1@W @?Ͼ?;?SAgDo.?>]>"?'?!AG e`'ħ”0x>k/4V >?W? ?QALlX AJmQ.J?DUA]( ɿq>8\Ւ?&>?~>|AOHRsx?o߁ 6?Ŀ ~^l׵>wMAr k㿚 Ŀ~@">ƿ?½(cy?jA_n^q%aa}mXr@* H>wE>?6?DA}迣ҿc D?ՈۼFоdտF?,ʿAL2ry?^ֿp?W?7>eX?RRzA~Ր/}8*qJ?3zY῏?H>R%??Z.Ao͛ XV[>55x̿̔?gGl=H9kA c=iD4b5= ֤?UYR?>Wr?Ab0DuGS&㿣'?Ȏ>k>Wk>s?(A:nzj9ѿL?ix€\L?t2?Ee>J?$A`H傿Igܾ Wu/?NP=]]>ZAۙms"Bݾ,>>p:Ajdq3ckFw6(°?h?eu??KA]3= p俌;#Y&$>s>IN?.?BAB],6A>Lֿ 9? ̾v?;>cAYJQfBǿ5hV}?Z-q?OAA+BoҿGKQ1O-?͖e}@OH,Ap)#wO:O>G熿,%'?_U:B?%|_?/8AzA Ώ{$ᙉ8=R8? t.>>g?G߉A=_msLZ?4%=?x>,? ={A㳔 \eͿڅھK\.?,N˽!9>K> A(MVĢtn k;|Pcʼn?-*Ͻ?ud=5A3^U m>"{醼}Ԡ?pAdF譿1z$F>G>;?>?L?AX* )_cA?D#*A0>Ϛ??>?AJYݿ4?  ?";Q.? c??!2>el?A/L&=?p?$"f,?(b<"ý>k>'AX\z0ڿػοy `⽥xL>=zAovT?g?7?}K?7^c+=P8?0&? ?wc>9A}?P?>P b?˻S=·?dt>\?M.@?7Ao4'Z7?E82F=u<>LcފAſKr^Ͼ꾴Z: ٿj>>uC >DFZ>D=AMn$dܹ'l)vݾF>>y= w>YAmo'1`^X޾\ؾ$?l<]?>>rApbf=78U ${pl?r>,"9>v?8NAnB?b^AhKi,ܾ?2;>|ƌ/~ ȿ(<'A#M ˫]qش+eG>wJ?@ܿDK3B"4%$˿b.(?B{1 e?_nNǾ_hBSR!D(̿>{w>e?Lg+͡=<>=G BʧH>υJ\DZg~=&>?;绚8B-X?D[ LXOѿe~g>1`P?,?=?ZBbw?Bn%ֹ}Z&]>_6ɿȾ:4u?e>??Bp:U?M3T?伿j|Yg:LE?1rk?0uBs10HG9d;kg(~1L?;>ä?> BAW_m@ꆿx o>߃@)\y>j2H>BKk`@'>z9O?>^=u?FTk:>=U BI0O?f? i(? m{ *"|O7BAvn\DežWU?xHA?Y;]>X+BCTEMZ2''ZE,Xb?Yp?=CB*>ϩ?4J>>;?k>\S5>k b2?KPB!m{U?=M{x??A6?FH?~ r>l5(B{tv0@ i M> >1kگY?_?sZ? {Ab\K|?Ij?qZ[ŠbE#4=te>QA;an?hb}6>x>W>Ds?>o?E?{?Y>nk>A.%w>2?Ui>U?;r?R2?0?X[?> ükA'z?R?,?>H?W|?Lj?*?={M>0BC)$&@Hm?*=S>A^W>5 +C?' /B_9?@;6Q?L?Q^ٿbp&uǵ;.UBN} >1翃0?a'l?P>YvhId BC_?cxnNt_?nͼRI?[9Cؿ[W?=;BHP/\_>5Z:?tFb8>Š W&mB?f?BDr>4DRM\P? h}Ŀ@-2lm? ?bGBWvW МSfWqt>*+@l/@'?KiB_<-KJL:%*Y(ʻ:]U;>{wTq?@/W?yR6?'6BeG>6(5.?Q?ߠ?@cK?$@UyBw>Ė@^D*FHմ?.ֿ 0*}@(@R[@2{@L@C,6B y@l `];^})^.%eHP?@(@F#B$>@'nܽ%th! =G%?x@@7 B >.@ @?&517Ϳhc?5"?]B$l?2@^<~(6X;TL?[?dB=/@@+>,yVz~h_̿XOϤ+??ܥB^|?]dy>)oHE2>G??f>qXBjx߁m@@3U6P^2z3eG?M?G>h>=Bm#A @!&W.3Q>="?UU{>晬BlZ=ɯD=1 Bl"пHn?oX Mĥ~h+A&1aBnZa ?9V0E@o}4م]*l;cBo^#3?gST!JDBsk 9YYm#5?\4TFjPjS>)OqϾXGB~%yx(zO_ԿOY38? >꿖<5[B{co0oxHĿPkg,{Z>ġ&-￁ľBt/nNoB#_c.o踿8;Q¿/BYJT Qg -;\o|ꙿ!MM'(2Oƿ>bYBX=8: 0[QgVX1g9E] A>Z&BkB ɾᅧ/[>l}6u>-&@ABoT\Gᾡg>78Cޫ>{$AcBf_,*о⨰4"r߿_j뿖> o!=B B\.PK?g6ml_0쿅1nђ?QQղ=]BC["a?7rpbtGϢ.w?4WRƾꖿe~>BJC??$>4DYLM ֓?!,̓Aͫ @2 @@Koڿ/O;TB1;aA=r"ū5ɞ?L쿋㿳>SR4>2E翘'BL̯Y?3 8K>" >CK !>FRBT4f@ut-Lý۸l} |B]NkR@vyʾj(hL{ҿeϿ<˿ L8B\![֮@g[Wks ̞l~o9=B[w`w@}_p9NSup!BWY\F@^ؔ#MP' gmLҍ BS=@y*~17޾uzPUygBTQ1;@sճ?5[=e 1h菿{_BR] zV@"; =]>R`|F$Aq0 BO)t0n@t9 on|Y*VݿABJ m@tޟUZ. f7t0c#&6ڵBH1=@l0#=*MKwٿ_+BBQR/@4gwՠw#=Q;gjٿ/KcBAN @>oK>>VY>(<@HB@R @Iy=).>!2Q=5u>ܐ;O~B8tKJ @Ӆ!>z ?gY>V9?G=~nQykB/ҿ@_pz?3?\>[>4r=yE1Aq?>@?>")@W@3X>%>osm0aA,|zTD8Ymɫ?@p@٧ʿ#8Z>nA&!z ;W>,@$FN@;?I?`WAaWE?U?^{?t?R>D>gW`-?@B?`ARGr4o7Q:?O@ ~ژ?0ѿL?>[>QA%pjb]^.r?}q[TW?#{?>A{=A0|!*(?Vꜿ]?&??:>yB<ߥB!gO 7>q>}k ƿm'>d>ZT1>B_ޓ_M=о֡]ErD<7`Be1?5EKBY[-O95>^ܼoX )ӿ6%;BS?B,E%}=#ө`O369IBJҿ@& R{=C -nr/> !B"0@Vmyv/*ĿJ CL22?EMоG?AV@u@nj?d>#?4۽<>rUl?:Ap^)@G?I?8?tMw? ] =F?h?ƽ7AKWj?:Vt4@ F?sx ?08s+>+?ڢ?gA=B&G:ӿϬ=O>?W+2?f? ??j>AxA1?ֿwD?5#Ps?/0f>ǣ?P><E<;$MGeBVgx!?~? ?Hu?*?dq'>\?$b'`==4aBG5@Qt@وK@??>S?V¾7JR?}?m>ciBA"@dMWRh?Tf7C?tY=k(?r+>) =*aJ}@^6?R@P?tB?M?)xI;-K4aB@쓎m%.@Uj){>1fL?? B " UwAdP+ڹ?`EQ,?"տ/j[쾱?6:B.F&Ң#@z !ѿ^}&o%IC>>?.BOAW_@I ?Y[*fZs>WR?הBVI@tuZ*m!>P94ʿ'tM 4>/YR>wB\e@G@~.Nrbgj?x>ZBe^V @)_ 3rOX;ľڿ 1迸I?>[BgE6}*V )> gSJ:zk->,@>UBnSɿ>oӥǽ?yBnܒ͛ u j`wE@ 5?x3@Hе\u%?IBi/=[\=J?8?Ga,K>>HYBa?J=04=v=t" \uH.:g?U#C?CBX@vqi)e '#|or3b>q`V~ Av@S?yJ>? CB?l@%>A;<V-vYb˨5xp/0;?({B"uƽ>>*o;3X9V?ng?#MB8`Wھԥ::𛿿QEqLo*X?r_IB= H?ũ?9.Y2пB4? wL~1?D4a?,UW?hZBK\??4l? ȷ x濭D&??1BBR5%%i@7m- n&)V"G=sVT?7+=DBV/n]E@>vA)$*@#_1忇"?WھwBYH@pC3#>!ؿn$޿'- ?FL<B[VZ@KG׾Cr,ƿ8迼,>U g>"B_XAc@hSo= sŧƾ>BbԇOh@7yA]H(.>>)/;qbu>NBg=?nY̿ #gr>$B\ Y?3\%ZZc·/bMBAI@b.Hgj>G@jiz> Q&?8ſ<̹a3 _>B 9?;+Y澥82h>L>H Bxi >ٓ6Ahή@>z;Mmf׿|Hh"g񿋁S>BA]l- #?}X;K^wܿ>?3J?~v 5zA?A1M ?4 PWۛ? #? ?~@?B?!E?q?UB0ߘ* l>IڿꎿwKdq?BYշi3\>i?>W>˫?>=B6!@H@*3n>S?/3?1>Z}<G=`|>BB"?ı?z=߾>+տL4?F$>z>iB+ʈ<# :=ߌ>.C>} O>[B8`}? >(2m>g?*?J>R=?4˾k<]WB9$m@.??GXJO>ilk=rk?sU`>B&"@F>G?4Dz?U0 ӾC>68?VJ]kM`??Ay7?±@rp?{ >m>j>>1 ?,ҿgG=oA8Cwr?pj?&??d?J%y{?N0?~?!,[S? A+ho?=: ?>m>}?q ?V?`??od7?92A"oo?)_Z;X>A.{>9?7> ,?T-?;?a?7Hv>cA Vj7ƿI|?.u*CH>4?sm>j&>?Ja?I QB8c@6KB?se@?MfK?\׹\KBNc5ѿ5^>tܽBKM8H>Y?| BPy@h/Ex_\WLT: <о-ѿU,'(i?(-B\(@ @?DS ;⿡٫n4Zw"?dž(WMB^J@Ѿ(ῃ"Ѐ뿠 4.{|MgTB\S@~ =Tʿ] etB.BXJ@@Y47? ZB9* -cU`\!B뿛XA-)BT,@wX>֢ XҿLH1Q7+ YyBP@8xL F?Mw \7JҿVx?BP]@9}?ne x&dU.$f9BJ@>& ;=DxU/̿8,Z%, BHE@`,@E*ٿAJZQ߾MBJh@JgU)̌C?}>!vIDӄBKE@̣eg]x=c>>zAd?ZGȾfNc?)BBn&@H}\EBm>rd1?>冿gpQվ8:pB.Me@~[;;?31Eȡ?agE,+V,մB"ݰ@%?.峿O>tʿ:ө)Q^.zB'}?B?׿ 6?@ &+?0?E?C B797@F׿n;-@!?|{1?5Y7Mk(=Bց R?a>߮B<9@8n@Jǀ?Am8a={? ҽG ?`]B=3M@m2+7>[[?́?6~?9?lҽBFB>8@M}?N?Jmߍ5ǵ?Q,К?8?B:<@p;\;? QY?cݽR?㽩 >=~&Q >ѽ(B=@[y 9?%媿c~?^kKeվr⿖-DM`B2Y5s@\o^?9s}?ө>p>ឈ=ӿ/+B!//@HЎͿMa̾ I?  D?/? ƿz?,gB?z7>)z?ݠ GYsoQ@\N[6%8)?0'oB[lR> ju.RӭB~SE10? BY^d4Xm={V?x˧F3Q΃?+xKBQ,1[c @,eL.G;nyKa d!ޚdPb3B%Y9>&k?o44:R(^]`iJB>'>pw.LǿȾ6f̽*BG8E >bDpP=3/?\r+y >]BE8z>iJ#w!h|<> fĪN3d?&98?@<"BE0?6wfiڿ I2ݷ ؂+?vA.,>BBӿ3EX*/TAW6οd~;Dn?#ܿO>忤aBFLv${Ap@r>;t8E뎾dPJBIι&`Oſ%n->ܯT(t_ſ6ɬҤ}ݿ B9`iɾ%<+Z"k+>烿>3cgB?9O@&?a[ΑblqV`B 5:@ h@?C&v +"nxB4@^q@b ?4>j9J>h1 .JB@M޾@{??ƌk#JOʲhB8$I?Bӿu"J]>zmA5;j@P0 /!KVZ?py?z8Z=?YAZ@a=:􉿂PyFN?rչ-A4?ac? =->0={>oۂ?'A+@׋?.UBH◳=-?ڿxAD=H~>žND>n0uj.Aƨv >k>h|T?% {I@Q&{?&T>\AJrx-?N>Q{?-.=-F\+>:ȱ>QuB!j;˿vT_Rc?ƿ9Vv4E?%n׶?B[?֫#ω7>ĐA=>OV<ʕBg쾰}Ƶ*>L >~.!˿\yctbBb!;ʿ/#';i? XXcJj4=4KŘD7xBZ>>7?O8?UuGIQD<{Q.oaBR?y94\?A(?͓?FJi= {0Ò$YBJf>> L?b?hc{NЧd#f޿Q ڳBM> ~k>$ ?u>lcV6=f&_i.݇OBMҠ=p4>@ ,|7V5uo(q̿PBOr?7J?@ؿlhd< TX>5|χBPҽ=5?R@k|E@7s1o/>iswBUM =*Дn?nG@\?t]g)4BUfs;??鿈.^J i>?{=Tʿ9BZDXF?9>?LS2Ј%JnoP?`X+%FBZfn\?-` ~^4{6fV@kx8%QIBXT[rg>gw>˽4xz"NWQ?1<A>BV/~E9Y?N==Ml 9rBSՕOUJ?1V`~$VfJw BSZ =Z?տ^pN kPaim9BP4| ?~40?s'QX>O;vBJ4f16?E]!5|?i$0U_c 6 σBF~@E_\.J?Z!$ dڿgAϾ,LBBnl/@<^ud?Vwo3)V^&B<(Hx7@;Jԍ ?Ͽ&/|p GfIpDB%ؿv5@+:(@?pl/(CR濘B_1E5B@4 @okP_v V {aݿ꾴.AQ@`}@mTe?I2NE!6A@s>@o/jzna|-c^GryTS>=AӬ@;%@Ϧ?~0@("ijZ <>b`C?Aw@#^@Z-?x>ӿb DvھC0AG*gz@MN?=s >M1}<7=A+{_?I*?P2?8q!𾤗Z>bb'Dn<;h?߿t0/6Ak??ļ<{W}XV/?$?UC?`>S>B{8r>Z@<\:y+?w㡻 q0w@$\k* BN&qР\>%3ƹD*@ 뾮Ԓ?܉Uf?ZZB7q@ ,?1?=?qE=k0JH?M+B;Y4H>l@Ӿҿ,?=>7}?,?s'?1sB*7ȿA{?rn@+"?:5?]? ͱ?C?EB!@@峿E\qd> jؿ.l/? !? 5(BQv?=GA?uNd`"hX0S ?&1Q=4[BZ!W?AMUS@ ߿gGei?IǿcBM?&URRBƭf9j?Z = D~kB1?`J?9e!: <˾"q{?z<XS.>3ZBA?ٳ?7>ك4oڿ[/ "+?_Oy]c>BO@ #@?tGŵ3D\⟿.?SfpOlB ?ǂ"?̹+:#}-%?T+=41B:ƺ?%81^C>>迄?IS>ؒ=BBMl?`͓jmɖ?\@?~L?C b>.y=JfxBN=?JX# ʧ?F?q1g?sOY@7)BLڑ?η@;?94?|)?sYBՔ@""BD=?j?i*Kfپ?bm\;?sN:)B7!@/f?X鿓u鿦M˭?zΧ ?:Gu0HB'P=Įt?ndJ)sѽkb6rٝZ~P/u:B 0p.Ľ?@>b=>? 7al߿'xQ4Z9 Bb{??f?@z>CZ⾿?Oh?Ut%

{BGڃ?^!=?'>+{>:>Y=7NN"B[5:=&"XͰ? ?:1J}N?f=|پN?e>DB1`? ?o_ @? ?H=]>?0v{>aBc} U뛨?mxZC>J?Q> v?}=BڂsU>U?G=齾m>v?5?lBq؊>뿔+h>8?su9by>3p> ?2umD>+\$BJc\e ]M??>1>N??8>FAگ?q?(Ba勵uB s$>A?^Q T>>BP>1?7TB6cu2h ?g";?c>2#>fIf>?R+<1B/l=ޡ迭%n= >'?DF?P˾>yB%q|-?h$ >8<פ='>H|Կrž+3B((>9=_9ش,?ѽD~?3JkCV>ϾQ? YNBUĿ9@̿xJo>BQN&ULz0$ؿ>&BW3? @}QM;ZV7>ī1Sʿ򠿿?WF=BTpo@.AῈz_?44 '>(BNBT^@j!VXQ+? [ x{VBQZ4@j4ƕNc>Mw9hI 1о:\BML YB@AXRcsVIp1VN o7UBHPT@^[ϾcDyESNu5{[t'BDP@kcU7ǪEB*ɿDqBCa8B@ɟ%\rX?sjQB\k¿J)&tB@@Ĵ}A5Y>L v*i,XBGd?9@0jN> ۿ3BRCq8@x3DXAg?>|>1>,m=ź{B@JفL%?K?@o@>I[r;!cwB?;?x3#n?›h6} o[;?(qv+?LBvOW͹ )1P?o>8D?.98QBvR,T#<(u(?K;0<?iN* ;\BpsEey+ll?3?9W S?7 X"tBg)5 ]%?JP> g3~OU3S>]e<,Oj`CBd̿syI+e?C U@cA?BͿuB]dHFxO4<> m`[?{a vmo.OBDÿP> ^@Wk!zٿLST)cfB8 =:?mte>RgV-^>Pme>޽B!-nY? ?? ?˴>@dIBY>eBv.?y? 0h>_??o?d??'?b=aξ<]>uB ,?Nt¸{'@?[>&.>/;-бB J-ɿa %m>EͿVg=V6T ? JB+~=гF0?)a?qpDGp*ֽ$=yB [+}:@gξg>>Ҙ> ?rlc#B N?8CU=A-d;>\Af:V?p¾m?C2> B )-O>/ Gٿ8?jEKYD^=?] >?(B+?5ɲ~t?!(>Sv>YXp/ft?B"0v@=,qk?ZGDoE="v.){@n>GApY@>?6dQ>J=:U?IȼNA21?g*ξ=޿nG8 ?h=tl>w?8OA%18?nԾl;Q.{= >C?`>BO[=7>?AIկ?j g>i`E> ?#;`>f5??=-;=,OA5ң>ЃZ;&; C}ЦP;c>??'>T?B"$Q!Do?;)=>0Oޠ{%N>Ӿ)6!B<{--K*`?<:>ŕf?|=9?PSǺB7v@YϚ2f@? )^??M#>}|J?h@B7Q8@$놿 ?ʟ?Ϳ(H??r4l>s20f_?T\=kB6ㄿ@h8$Ϳ2L>#pTJ-?BZ?BL?B]J@qV>?e9?#HeJ=v?QIB-<@(/HV>~HpevxCpu>qB>xA@'<1ku}ĿjݿPz&{ ğ5B9ʯOF@ןT<غ($!=*EǛWYY)*ENB6A@>#IDUws=>==ܐ03GB5H@$#<+Ϯ=O?CӾdjt@ /B4ֿ@򱠿Z7`?H.?bR඼6+F tB1#"P@ܿo6>O>}.m>=ƿ-JB5x$@ ?yڋ3>%Zw?+н&>% 7 B2n>`@ lZ=0(?&JtQ?<^E B%?mn@^tu_ /wNivQGD{ ݍB"Ӿ6@!>ui>6?bGݿ**u+4B'fY-{W@JQ ?HI ?>(o4@ (E8@B0[j+? ?X~W>?Ep?Q>@!L|žUB9j{?sL?lx4?E?%V?\3(^6Ds澽=kB.@"?C_%?W?CQl>E?kJHa?? B%3㔞@`jiTVF8f?L'^??zMϿ-ee?y?B#% ?/쿘C>dO?Ϙf?W>>o2s? m>>DFBP?5{LX ?r= [-?l)|>"r/Bmr?뵽3d@*?L̾¿>S?Ik{Lt>AIUBhك?ȑ?yP8'UϿ?vcB^N?W>? sL>݊?xw?/!],2T>-ԽBr88j?[oH?}2>dyՊdW?"%?^<{<MBu$?*2?{̤?FG6'n&#B"`B>er?)佢T{BèD?G?k2w>@ ?@>f jun=?|:kB=@ p?->xV7ÿw̾^JB?_!]??_3PSuX?;|F*?!f>BY=>Dp?r?qƾ@?>Z[(!B >ar;@>\?kG?4+Wֿ˾>ڿ>ѿ=B2x{@L@q؏>EtɿPXɔ>%?J +0>I;BF?&?vUveS%>y=@&-WhBRY+?’̥Qp-V?D 3xֿӍBX)?K֖W(l&Eg@>H'ӿ/BY'k?׿M; ZjHKHھB/>3KBZk-%S@Z$=i%Bÿr((>J BY\=A?CXU>w.!⿃3@:EsH2? DBJua@u::?z3d+?} =O.iPBF@+y\h?r/b?>j`CB@^7@A2-n ?/?>)># |>(运dB6$|?@BB*=JԻ?+\9"??=p>z>DH<ʿ[B6?k)5z@MeZ}?28F?9>`>erVfm:B.%=1@-#?\JCb?C?$(ħ>1kB̉B(>\a@T(6ȝ>m-(?=E?X>lo6- gWBB$>~@ 41=G?_?)S=?/E>.뿃8B1'>%@˝!uʟ>v??[/>Q>Zܿ`uFB"z=*i@4&׾@|`?RI>?J aj ˿8PWBn?@i ǀ=?x?뙃-?2e>gq\B ?*AH>Ol%? ?]ϼ,OOAVH@1A/ V%3,@=${=%?=of7 AX@=1WAAC]i?[W?u>O>">Ru]BH?E@ӈD:?.V?V  27 B??Z*@9?]|1@pUn?4ܿ0o٥ĿN BL-@駿[l6T@`I[>;{ؿѿd66_A Q@$63%f@vQh5Bv?VȴlA@)?Nc5.@zr_H\>L=0/u,B*@?")V@z w8 > ?>AqA!6?B?01ț@~IXN?G>Gp>='CA}Zs@?p@:@hoZQ?=J?=A࠶c@@LY|b@AM X y޴<$>5?+SA+A @(AO?#@D*^0D$?Ek_=ZAw(f@@a?Fi@w(+d[?H_>Lr>R> TAw,r@ ?|?95?X >\"? 0;AT7q?闁2>6>` %^f?GN?fAGb*?C="V=m?⤂&?Ӯ=9S7=>Ak< U=?!?lZ>)L);侙?%!OS?O%ANOTsq?1]i >ai}?G>lW?U}?;[<À>bACcz9?Z? ?%>?>T? I>g0?pQ?> c?&"ALQ[@+Z?@>-=?+>E ?ww?l9?eM?j?&~ћ>L???"?! AP$$$?#9>>=Z޾E[$hBx??J?Q4?ALƝ?`N?V3?a@D?L#Y>7>h>ݮ>mA*???-?:y?vۿk?&t>N?U ?A?QOz??Yj ?߿@?1m?>|?~? 5d?RA1sP@ y>%?@C?֛>fؾZT?D61 A<;Qf?SQ;j ?C>Z?ɋ? 3>= B<>E|A>^.@h?x?j???Y?=?/s?t~<AQ='we@VB?t~?KT?'???f@b5>>h>UD?AJXD@>_X?}A{)>K?4>ْ=^>Y)?=AIKR@?4@ ?=%At&N8?Nd<_ b??AP??$2?`S?`>n=dN?YT?-\9?ȭ>u,>,AWʿ@ܘ>>b>>9GR>J\b>O:r?D1>AALV:@?+?u?n>>L7?Ye?,wecTAB4Y<@'@ g&?`]O>?5Ӿz??wK9?:n ;BJ7sA7zH@*>%?c?h ?S>N?<,>zIT>Lfd>A-r@Z=<&?)`?T^?θ?6B>?~dA9e/?m?I ??M?=?Pu?>耝A- DB ?>Y?!Rs2? "?y>v? @;>RA8_,/?Z=e0XMnH?n?P?G%=A>x@F?Z?T ?==>F>E9?N?,.>2gwA4[c@+?p??i T-^?p??*@(?3?SVA${?v=>?B>>tE??t?n?,>COA)4M@-,>o:H?L>?KCd@?6?->>A7u? 3X_0[Iܾ7A>Ҳs>j?@?v>8A7Z{?>W=u?nzo ?k?WN>&uN?b}AC[{$>Lھ&Od"?4>O>+CA#ua?e  +>}-gkDDY?K?Ԛn?g?kּ=A+?Vܷ=i Z?/B:н>,?UT@?9ٙc8A.q?[A<>:'a?x>(D]?b3?}?G>3>QA6χQ+?sS>S> 9侍Ď>`=G_I/׿ ]=#A0. ?¾>eC>枾>?3?H:C?GT[AOf#'e@帽= >P>h2>T?#ZM>&$vtAC_:Jõ?>m>_? bm2>0?a6⿨?07A$Ah>.޽FR &>pjBd >!A1>iq?ACnR?f?G[0ɾֿ ??>??A2 B?)n?(ҿ)=]X?`?({??ZYA1@@RU_ m?????}>?%辥ݣA>@!?3'Q?7P?4 j{PR—?cJ=|t>Vv ؿ63>~p>`?%}>+>ՈA)Q(a?Qx7?ٿ4ϢnI>&??>Gb>A8>\?e>>>' ?[V?cb?go?)>ڋAC4?`ؾ?(F9L,/=c?? ?4o?)AD/Ke?a? 6>@ ?@?2FA?6j?c?lO>[a>֟A@vrϷ?d@LM?5CW?>٫+?G=J?Bq=ȿA+>O?~J?yҾAt>˛,p߾^XS??S>/=̾5xA,^@(Jp>Vs??h~(?$<> ?q*=:w=^)A+93+?[=ѾZ>1<> f+?`>uo?UM>A0JT?8="(#>>R ?$h?L;?>5.A7B@s4"C.At?K3{;y>7\ӿE7T>?"?W|?*Ҿ:? &A4E>PN&>'>{Y8>O@}>\?N?> A3$̾=}X>Dj'>^>%???i>p_A![S'?e|?&ο`޽E-C?F5?_>J`=p?b>7gپsA({eOfʿ9d#ju> ?O"?۾>?:>.A+ Hs ; X;a]R%㾊v>PB,?D?>6A$=: A>)z e4>~![;%>A' Y?\ÿRKοu݈>r?q??>=܄AKG=-"^n=MaK?L??? ?>j]A/(j +[G`8Ͼ>NB>.>ڻ?yf=5Y?sA;Ic">¡=ׅdkXۡ>:h?[2?,{AE}A?H>$aD. RR?Gg??B? ? AU,?>M> >Ì>>8h>32g>0?MA*b?Md= Ⱦ̿TZ?=Y*?>^?ƒ>?>]AFA?\ K?9sN[?/?v?M9?SlA?{6>UN#*pȿR=cUu? >?w>=AN^Cl>Wg+mɟ>"?H(>3>Z?[=tADFN>M_FYiÿ;?J?~?h ?TA4) =wVY<>;,:=?5U>v=>>hA[{=?=W>p?9(T?2!>?=e? A9/@\>R$>s?M?'?q?gf /?dAA&-w='"?b]h>}W?j> ?x⌿pocketsphinx-5prealpha/test/data/wsj/n800_440c0205.wav0000664000175000017500000017175412504317077017364 00000000000000RIFF$WAVEfmt @>dataR=xq nev08v\OA`z`:{@N7YTWZGif2/((PMN\.`U(+eU1_N_nGpOYGzjYnIX-pET?p`1d>+P<S&2tpIYD(OIe2U`. 8/KUA5"/vAU 52_IlPZA^PH{  {xvzts h#kt2KD-eU~]^7!-_Kx cN-++$Ul:r6wJ`*bNmB$ IBd x,}|b_$jKwE6J,0PR_imK0)sa<o$-X0:hD+h 30{m%9v3 f: 6!oz .<T NF xv+v ;n &cN>%?HRhKHj!> ]>J2QW1Ub@=jij0 ,f _*3]iTJJwtZ@=5n~uBT${OB?z`aNZ82B?x8-,d(; %Q)!t|cRJgMUd$5>0K)DE5pouB isQt5 BjW6vw.Im; ;8px+UQJL"E'Tk =9,:t8"2E: ~G| oN\)EB;6Dxt ,'W@2<x;j\m5p:P+rY>GPp'Q5 (*rE"!$X^1>OM@@ OGK0%0o; wn}&F{#9  U+a!7&^GVKX0V3 ^%Ak-w2,fi_j###+ o6i/KD6q` 7]tjnSKTrbb+&4+MSg  ?90KW t,&4 6]E"R;",GNHTv~1PpM A#T+/)NTG-9[?6Jt_zKy}v6%.U* Nn BesAH44z`Jls} X c45C#s7$HauGF{Zn@|%:%F"x>QOn'nX+ >$)-+OBG`Fg``#ls#jymsX{H/NVf4 yg@L"\1y|Jqz(jjO90riAMbDU Ug$GB# `:-ts^)\ vf(G$}0:?m-?fw.6D! uH qN>43o<iJj?;]22 BXGl7wHuepO+>T4e|L~!A?xn 3piZx}a= -Pp[z:C"u f>LZG>fs6@Wkz7[dQ`Y &JIe-.8q1tvU>1Jcl'cI >'>&KFNy\6}?:sz. 6JJ',vjY#NNyL-6* Nx`ioqV,DZD.gomM7*4o2t{%>1MlxJ"*:T+) Cp) yfVWXu*k2)&Xf: eCA#x]=$*5&+~6G[!H8n)?eT>5*($+\+W!)]Nk f.wQ% H)N7!W{GFLV9C({o %[tq hEHql}RP=7{z=6w)Z)pDR 6ASB:U* K4k:^JwL'@) jT2>q~/Tm BKG-Ylx~<*}H^LBn8=UA <;@:<3 q aY?vcbIAP ![ns[$N&96xvv$p\) R^\BM/5<-'8:%;. B"?J*K789<V>(;dS] "'-Yt3 !L*)|!W:cfb[W*JI^}6_Ck2=(X\0MJ;er\eGq 2F}<Ebm>W/tq#HV?G$+;5D-ZAtz1 A8d%FJQQ:l 8A Li9(H-P4.igt>`NH7 6IFE(bvbX mekiU(BOa$0c="H]0h*0 BM[pa(jp+r3: "/sc*t.=W_7/1xq*C /LO21XUFG'1'Lm:0>t -]Y,M"h~w+TBP:sTLlg2p2 Tz82 M4dapCF 3;%UeHJkm*wZTh/ (xsUD:(6;V1 FH+]^^FjF(4V<z&<BB&o*(. F<' $B[ &)'4n$7in-3QabMy+f+OSpE8V&;>:K{r Lhbm?m%a )cl:R1U,BT Po(% xCE OJV s?]U&=A&&TE<c(;1E#skK#q#ij7=wS1> 9-mrW W1H/H/*2n(D:/2z5*KB#z$!4.2\C%kG'VB H v*XY 9^{Te K>e:{;-@1dXQcOj}%ieWf}($atB8N+M_xMZboO \ ~J,:cWD"3/5)}e`eH]ikc]f[/cl"Sc!0l4? Lb<,#++.,Jk nU9v7 v{c_ %WH, 1dD#}SzG2 {%BU$@UP^"+`!k,.H,/1Hw%5</?B QLi_6 tK$$ ^ 1Q&h %=-a" MYBz8E=d VMX (=oX=MA!F@, Y[<+*H: x6H-89!ou&w}UR Ah'>b8_0o8E0(L: (- !2Y<69^6Ni(N#C7#?E#-=n),6+!nN_Bt!"xDES ErL:,Uw $QR !57<(/2MJERomuL0`!m _DP5/>,w#V'6{ ~seTozr?&uM3uKkqc$> N8$quiB  z>*,vjI9fD#?do <FC'gdq^\hXsd[MNV9M4K2_{*-?RUYh 16Nsu6hC`no%~2 h.4YGJ \3>{oWHF. ut.FRgRWw >N@X_SlI/X*'p0Ks.kB,]%48 Ta0s?sIKNZDwz7'e}H U`mLoO~ttK |]Z3o! Wt] ]1KpQ4f?B!z pecj1Nj/-"!7r /,+j@N<7& 7-Sv %SXGG)D >&F}59DyKc- ii-&z+KHl_@2*v>{_/iDIDLencLtXZi6hY~[zbttJgK#>%Hy'"0~Eiho.+uO I8|C5!Eo (d5@O9H[`x-elQ9Ug7\:3Mzu%S@wE_hSS?KLZx =a7JPEI mM0uh>^7' }^){rB&OJ`t%%uC^U;XBS!9-Zw :%9`98>/?TBp(Ars6Oy"RQ5)Txyd AA7D7f"sWebPK3&EyNE7=/#yE;2GOiRs `T6k?d3;gJewjED@lB*UjPTQ/|-:Xr 7?.:e*R4689]-<F|wp!$%T/=g=rc# rMOA 74_8BcO|dV=\TF;K /_: n3`{ ^7kt- IZ#PK?R0Du/@ ,LX1S5 R9*((M?&8}_yy0C@l8+@5c!M$S!8=}/87|o^\ CpSMBpjp lE*wB /!!-wB#E @[ .-2K%%=k G)AnCBkeA~'jE-r~[ "mz*)6ElCMn 9U=a|5_$2u~OM<d EI!Pc5;1v" MrZX} "UNs!`u"9(' +y)f8+ 04%;A" j8a !%'qSq`e}g4>8sLIg!%</CHH:,7huK^j7ofJ!@5[Q^d)*- (Ru&K;| ghUc2 qh|Dv ftVK;D/4:18/PBB6 d%d&)B pRVpX5}[y_H M!&%rt5NGh4 `A:@/n ^tR(^ Nz n`a6jppWg y),2|j=|-f2P2W8,.-MA dZCCe[P(l:o8:##.-il|Jdo]^Z0cTN-I\@j4,$AQZ"zS *I: 'Y`Z(vD2lKV8j t{ 6J1/(S06/2HSzc/T8:- ` R"b1/';dg wE&=D jc-$+g1dq)g^XV91lNms0xWN"Uu"Le"W+K)u:u)Y4@c=)CHLLx4ek%e7)+Z/ Zzo~VjC fUL[ >Y! +P955 >^::zHE4 W( S_*bm f>%7q9ieN-#Stw,bN3fh2HG."1l#BN`/H ,#<^P*@VK6*TiJ**0Jr/9# "8< _' rup&`\Om 5)4i_H#T1z^B>"JZw 8<(? -E=~8@"JT! pmW1Vw*8L@Sic,Rq2x:",e1 c iVL03p}E*) R XK VM,BA uI@RI #wt[i,UKV \eo} I$]cEfBh08:cDqcO>mmL n*N./@: :pX-l7 B7XA-"vD78w-vNnSh4  y )7 ,wVj ^@P[u\ @Dr+!%2drYkSri0m(:p:~ 7= G 3%"\ft&P^UujYu)-L:LT4`c[8  JZ }-LTX,}jyu 37p,p#?5BTN|"Lp :C-gC S=k * R szK!RRpb0= og?  hC 0 d /h Cg t$#܃_/T\?_'[' XppG # P{t{G(klp #p#T!t+P4ذ(g0&_ GgCt< c{k {/_au;3'o/P4( @XOL8 \ w T!GwWWK\ d   gkPl  _'  7KO1}YL z2HIrk%+ 5  4`N*d|PM.,WKFImWrRH^}myAJ&19E,k$@q[MGYC bX'5U}Tf 1#k,'>Y/}%BeJTf>gkP=Pb1~&'ToUuMk9fFa4k=q!iY,W5B0@kL8([ '`rye%P\N.@1]t8*}WNTm}Ji[Pyp<>iE}{GNq*o}U58b^pLk5:LY#5YLL^>>C~ Ig5B|gs^ L j)21%fnmag G m Y #m/h1 /oBF  ](tD#0Rxp W '` fKnB}l-8 {g7d>y+p79neQ.ykm4: #v yV7!}dZL=APT4S kk?M`!o YL":EOp, Ztq# 'e#tQqt a<We L3~YIwGG.y*k-3' U&I + *K0g>4%Kq)u=,Cr 8'lL4Cp R } M? k C/  p >~9@ϗܨ!w-3"=m\Cһi0Gd6!\q @ Yji f] (2GI8 _lLVQ.hqHWa`d]cC MM "b}nMC 2   H EK.#i{Ԡ0_mI릫 $#"V7K*'!fte)5$PA[T^5 B64) Ʉ`ר(IW_P="$䧱ڢCU(+#w8 }6 (E$ F+RW? Ƒ v'4)qќ(.j@pTNU: PTH8,I1>.4-4-#6ۿ8#w!6"sы¸!#I*a"ġ#;KhO<kοcK)3I1xZ"M47" w!LSE g_ӽޤ.* e\ pAF  VhU]GX  nAZtc&i JvH .BXWk)SV=c/t{ ] H 2 \ ;8.BXB>ShR>,2p |i r 3 ] q X-n0mkd'}Aq7d!.4YydXd#=Ab-b74bd {'1u2E*=>f jS@h8nn[f<K@>iCbJagT.S"(59+9Y&p :Ie`EE:+{pm| XXL25 &p;n8b4[vA=4#R jiQhCLO/!t m%YO\_XTf1ufiVp)SVVTQRQQQMN[[\ \  YWV     Wտ˵?R] c)v/ NMV`=l-<"v/& RO=3nnSo${5!/ gݞSx X. >O -̷U?l*-sn 40b`+x ;('l { @2 p%16] .R' [x#X56ZN)r N=:"jAWg1  KNxw! hw13di  pihVW[pEi|b~j3;:Yg9G +M"w] J \ iV}ba srM   [Ad+EBmD^pClA3Lf[ xf}'fH &vaw'i,np-.  B_piM}C RjU|v *N"Q.n r L MyPhނvY= !l!  .N48~BYEF Ip Zصd#$ +D$)jB"hr<ݙO. 2 ] v$' ,<>ߙv)hF&<b '-D|1 ;!w-[,>S.b͔)12S9;q'p%<WjH hA  sN&,>D$+‚>o$=;FZB..؆ͪ G.9"E%!A ] VMFIQ[e!m#g R:ۓޤתYʡ g!0=9Dj6,'1 }Ne9ٰb8LY'#*76OMJrt  Qgn˶ۅYqs":4?:-v/6ێ>4&'J,,$ 5vp;A[?l )9[jn˶P–oS%&7:/B>*;L/ 8׆Q՟ h&-.0A >Mo=ޖF 9+(B! ka´::n;&6;*;H71% r_Z̈j )1 ;kI#fe0r)  nb֨_U" =2::H~9K.t+ }#9:ut2 ##,u-A `DL,#j-!e:4N]ι,2\F+>ZB@M1#pصƁƃY] G)u,+v.%< "Ejޙ: %t+)  7|#UDXl -6.A=V>3%,c4х˳ Վזv,l %q(D$6R&1 k8 ܹD.ܯa{UQ] c1H 5 .kzxhpr  G 1 kR<&fR,A9ua!{%  h !`=[zQ N.NuJ##9-L@IO{N 4FQjA/%x%Ize6QA#xi[||RmlJLWw8n O"7\Fhn6rZU2[IB%/r3WzEP e}GaJ6|id_NEWD8C|T5?C,L,J`: o9@)iw'XK} `Aw>K4%)Oz;i }b<5Bc-  eK%=u%Q+an Q<I2|`:4Y_r2OL_!S_zkeipJ`%)5e1_5eVd '7^k'wlF< Iv  m#i ) yz#F 6LvH s,-4i^[>>c  {w m<  '7;  [Ja``] F6'vSP0@D{\ BX!2e)ViWwE{V =f qof AC_~1q,_I#f 1 )x%oxq:9h$tJB-l0R|8t>yu{> e=WX/?Gԙr* %0E;z4%hk ڊҞǰVa(v.l! .q( TS[> q$b 0?@hԀרO/3p5?/G- _'0!P8Wp/ /g?G$)/?  ? 0_oPxXG'轏gh G6)4+w?8_0虹@˫gg ))PgX_P'p?ވ00 6?&/($w3xgxPh G? -G80XGNޟ&h@| ('.?&0-7΃\ '[3w8 +3_# ̐Ǡ#Lxc&K,[(0%1 [7t[db'_w0XP_ho֘wȯ p%)o,1?8̈g݀_G " w0W'Ӿ0! o(#!,?/_1P"O 0#  {8 / (p` o?{++#$2+ wԬpҨ8C X"zv Cs T$8 ,4P"++,"&&# W` wC C   ++# thHLByInIXC_p#[$x! GtSs[P P;Cp0٠_ܘC+T!p#4 Gk # w$ `(Jn8ggLk  , +cH4_ߤpXgO /#K7x  oK'4P#cGK  G`w=t3$5M+ ZRsҔJܡ_')*&69rM(#$l1|8+(p>ߘQ6f%l1+&* ]* 'INv&~ %#R [(N , a4"$%< c!. } #z6 r  F q  A>hk H 5wq F XkSxN^$7  "ps]   .C!^R  P Nw.V;SOB^+O Y - NQ oQTx!w*t -#(g}H.| f_s%,+o$>1 o^>L_I>t]+ 9nJ{+O X@q4\ SIJ4#64{JNg=5nu  -fCk0=+TB"P@e}g4vi/:{EJa\5k`9XI,4=s|3|7zTk T,to_-T9eKlo2VBPe3, SEIv@o{K(tmKB`=f9w\>5R4;P#EH[7E:K =/+ MWa ,QGvHv AHQv0rA<_AuJ{Xe)(hDhz|[>Wn) zM! )z;+a_ daf]D^ v:G.O54 ]zwPTf[[36OqJh)7Vo<n4ePjb(!J< DSY=B e{eX,b]QYp9JZM4a/]Y^p1,JB tW|!|R]4;96+9tWW3B}3/|]0BmaPXSJdJ5:J+ %g=))9w vgcgvTt%! SH|!)~B};@Bc g%   >8 NRxw2 \ ]  .h ]7N&;6#H \ hQQ$A57VawL4 8`] b 2/ L8 }|9 6 v3 ndQR 1 +eۭqN- a3 2 $bW #w) 2 5] ; QO'M+\  ^ 7Y.'$u#'VX  [|IuCRV eD")yGC#S-] f  ($V 6 1 'Q{K$'\  3 ,wC8׈Ѓ,[ a9.,6C#D+yS   }N|O   ,'xNS+"-$'0Q,   \ bVQC=\    Sa|x<S1 ` CkN~klah tp+.]  va)TN_kWH T  VdQhkB r   Fz| '~@4 ^+ pq  "mW7 r W :B F&~0,   lA sk`6` :ek= !~,kBhVwf^ E * qM] ;s+6p E@G fpcYcQk$:  ;a'A ] u7 >.0 qu^*j"4f#[gc=b TAmn[ & @& T J Si J Q q  ,0> Tw)5| Y4=F0xNo7 S aw = #nI><$}Sm\<%CIn d`Wa+mu?^ SRRWL] Vm#©90ERkk ] R=ފңS  Q\ t+ b  HMJ  b  ] |O3 HIDr)<e̟ b}6f[  !awa`  nRL$ ;Ͽ Mī>[ hp%W=yR}@^ "`ww)W `Y) +$vSV# 2 WSn!'1LXP H  n}|[ z {Ndfm} 4aV `'Rf};b XJ } $ gQf)V'A 0E>R-i>nXr;r  v yXT ab  QIY c `SQHQTa" Cm#] Wq',K!f:EEBH[l!e HBN X k  \ AXMM ͸X*46My21e(RRASW h%] W 0+0 l!VRONCN  Q Ds+eK;] 0I%NTaX$R\ ` g"aYQ)INo*;#lLa%5 ] o$QaٮRp%\ w0[ ] >RW  q'aOIQ` $2t$gG H7pG$Ow0_7 ((wP/ O@g 8@@ըW/w:g%gW=B4 !*x%`{+o;S C c$oST8P"{c?(? 8 WzDR dw{kP`  C L8Dgs |GҠ tDow;p|# t( G0Lk pC l 43 [w@` _+0ppL 7s 4k +t ? x7{ ' P_7O@40  x`  G WMdET:Y) Wz  oLxzt3}-quc!W; CTT:?d/wK \WHFE-rA&1_,-YD#1YtY7$$UL:gpbN[4.L_9k5Mc --ft(YWM} UJe 1Gj3 S dO GS/_LTL?+ wokcxX?(S xc& | ;S7@~ztWkXt(  gK{,GOWC\PH+Lc C g?Kg0t"g,Xk7JE# ,8 OK {4[o#+ʇ{tCh, w" LoSCh< \ X  # ~08;|ldpү K (,+(;; `3p3&#K?# w; |W7S8 [hO '(/8+f>sG dp ([+,kX , !(|{ |T|  [d d {4|@kHOǤ tc&C \|P ,t\Th# 8 \  T4pD(@X'_xxW{ WSdd0$p< PONW[W  cg o G#g3[k {/ Dxh##ch3Wk U 0  H|+_Oak D b*PS WJkn ^#bzg(c(u_^x9#gGG=mDaK>ry uC5,y Ly^Q$kkz5#Z>y8R25nhCPf'G+, _Zq@DR115 RM8| a* oe+yq1gL;) O kNKe^Xl{ ,Y ];eZ I& 0 n inPa j\ & * ?QQ$nw{A)-߄fYN g SAz9e1 y ]N E=Vo :< 55Y"~ w!bߧ4R : 1 9k 0Ft8 tF) |7-y iN  \ , '.9%: ;,XC A^9]*^y R/7u} * VN$+w<>}y2DkL2qZH#?UB9s9|STBj.qi!FB: qNW@rc{Py{b!WE<^L7YxNrG<@b*A=2+N9OnxiYPPqu#U:ImlbK9y5f,Y aF:,xB#1xY/A>6*>>g'G-#]L5K]^Tj]5P TF}h:c"[% PiI~5S3t%GLG@UkYeTSw(1WeKoPIG yLY#5 bC#>k(*p  G=19I mm[ O /` # s3{|T,++W#tCX0k(\ChߏL( }i |0K W <'(G ? |x?`(X|(\lp#G GpL4ؘ o y [CDog (/,K SwC s8hO0(ۣ;*[wOC 7(GT@G3   _v|P n 1  &Ha`4#Y v'cq"()'Id {#f`J8Or?YJ=8b'#V[_I5:|sUC7w_cJ<3)c9JL^ii]O4 PVtBJ 'k4k>k(p]BUf1T0(Y'b:5(DQ9q]>GdxxLLk}p>u)fy 6p8T :tG ]N{U#LJU.-:QSmR, +bBrEo!#A97 wwPB(3R%:>`bGbRY0{JKHs=ox$rH#37n/k{Rwa9qh;!IbUS1>T%kC,_cG[#/?coo_TW3T!|Lc 0;   scC)f G;  \|O,dgT{$7s+p'c / ;sc0g (/ #|XTGvw⋹Ĕ g@+< P[(\8 g {p  'c xg30khl̤w*(2& c # Ko8 0,OXT|(X k G ?_sGD7ڬsXwT!$107O4C h<"'3{[T  3_?Xߘؔʄp#c&X wc?/Wx!x!O/0, 32(o,G ([P{9T!d  c`H߸pɀŔ_0 7o0gʴS*w L# X# ,,t?`O P+p osp_ho^PlWؘѤc&k OgL۠ /?|X3 ` 3, d <73 ( / SG ,P\++xYpm 0<` +g #l'tkoL d 4$ TXX[  W3,p;[ ',c/!l['K    `kLp+s ,Xg #dS38d c?d K`? o[Le:1 d # 5 \@2e>g  B? H%E )o\^o4K~!!ap Q"?A-79  S7 Y ,  a1=33~dvS?5  TM C iOcq #c g#Gj+IAd( %E#0e ye> uBl& ;%}1)Q?aF O` UAEP*   1gU#NH~NcN WyaQGO `=~xt(ge3CF  uu1xvtM1 XU 7Qh[%=P9|7{ R  /a  1  ~*bM9 K v G Eqr|.&x@{c:b> _($n ;,  S \ 1|pC``vdPrInao4]U'C E v =i&vY,  /5(#1l_ub9v+{1W1Cm]#S#!/&<3!Y@Ei7JG']>>3Q#G#G((GGGGg(P,,t,t((pk#ppL#CC _ + _{c'|M \P| P= r9o1 "}GkPKe Q]o R 1# ޔ x`vSo $ Yg84sqS[ecBT bK!x`:Y;pb}##^VZ[NL_f!VP:TT8tt|, Bi{IEYObUyZA/1,gE=PDw<G 0DXoG` /H4  4S# g/g_h cLC #(L!suU^-n5k `gxy sCu[KP LP =Ct5MX>k  "fY^Y t(#kG"d )r  2xi mN g (n8}e15{tYQ%_PUjP:CPC1t{4GELdN _{g? wXp-- M 4+]FC9$5 1Ugk"wx4>#k$mxt-|Fmyg5u? c)G fB"5" x}H/pRJd< (fq|\mg"W{A\Y-%fU- g}>gGBXj' !f9 9P3)1> X\1kaC }PLffl5Pbofqv :7{jiXCo5?U0QS)Lb :;nb4T*CI\-Cy5/?@_39G<(F ic'i_%qnGIuyg|:(X~+, -U7* wB|,hC G GwpG>8X%?Q G U4-Q:\\pMt:q32Kf a  |:ty2H g 1c.?VqPLL X ,&GB3W9}]o^gmK#M@(y^ C( k:kTt'yPCKY%2mj::,:Y:7x=nP7^Iy>Lu0#PGTdj0kgi\ >I`$/y ;rC> >#8J08wi`i^J7-G@IfdJ/In(%8S 0YS,}e</5S(d`wI f^iIm!p}G3:/G%N={ T,#,<55S%.ek#YS>;v79%l4!_/+rON__;4#*\VAKjJ@%K9QG9E3FXK`/,Hdt[xC-:FZx8iF~p|!?u`iUp*Qsk1Wb  TI9jpXa:E`]DQLs<5kO*|U? =D'xH*Dz<Jc/W=K6=f}K)%X<uL^XvM %{)Y`e"RX'P*^GjKl25<|^q2%<C.]lr _e$rC#p)AX` \!'APs Q1WJ1;^4K;>~ !% 1;d2B\u|P="+ X%,s*d-a*^{'Id: ll.:"?9& y#&E0e8XWH >gmNZq.%EK l3w-:xmt(R@&: K G>*&I 5(Zcg'h ,`'aTin*h_E;V2S;&&|O fKZ_~3UNW*].B"Zrl'ezhzDA?Suvc !K3B$h, ~**#A2a cBxPtv,##L))XXuR)y&7v!D3vy /=L0`-\ozwVv |#MZ3K3zbs_CJ ~"q82_P<AwtU+_z& o-w_)*_5Z J,6xb'3 {!a`FEsz@h^Bv=m"ZS.P%mwu' 3 oO=+ %Buy|8B!ekluMy\ |/q] qn}(Tkf1T cKw@Up5Z:Qo5u@`k K1 9B8C=X&2HLG /2nO5UW 7z<Kgg 9(Bx^rp"(3p(EXVE t(& 4EK.a$r?E}(l QHB,4.l,_L7zORrll)C=4!$`koKUf;ZE03R!73h!BNr.Ze|w pO' oo-6qqqFfOI]xY\^B -vU^?8 #4 L@T#&=+yt`4T; #+B l INq$'"h X^RR|K%K4_tGH-,=-yY 3d<Gog ~hOyO |[J q&26y<mWg db[{4lJoD1WE^PqIY^S*Gd?R) ,BIEpK@3BG2.:T@%8VhU}\@JS\C%*|OZ^PE^'m " h cITKNZlQt)/B"rQ? W}lEe;t?G/wr$!2|d&! (#D/kj5JY("rMWx'0eQx<\BClHph'k" # zL/c_.|^J>?U&+Dfc0394<if.+oXkK6}LkkwqIg!7rcx'|: wn lr7j3!g9Y c[]TfpYp!Z=wInIYuok>9 vpu MHD1METEbOfb?[V@_ Kd(?i.{%xVr[fj# [&>S"7gQaicG pocketsphinx-5prealpha/test/data/wsj/n800_440c0206.wav0000664000175000017500000021145412504317077017355 00000000000000RIFF$WAVEfmt @>dataG w !\17q=s4V=d7,OL lWEtc9$HT6#BHzh\Ea_q `F>_)/A8TE'8 )MK">TZ '3ZC\>Mf_aVQ`z( 8y 'Ru&MQk 20}_so4KMaM}SmJ2DBP (cwqozJb5(gR4sV~P<EM<""'0U{iQ}!=5&E33lS+;{,k}=4t Y/ RfiJ^#+ Q69 !!G~#btd8LF'4HJY_x4,)DG?!}*ko,xll1a/ cc]A6*VB*M`&5 ;%O^ N& B'_"&%8H--.!#5^yJHv$ayq%M :<Q*<Oq~dZ(J[jn 5)!##@5 0vM4n 68R ,"u|66%*qZ0[;BQ_q$ Dj}_?5[, ?+Y"Sgo@1_ _#Qn\pM0^g :IB6"9~1cb,JzatIE `dw6N$ :C6*z z7QN<88D &tiO, xXa#gz;#EH"y#\#1;=; -}>u,yN/E=jjgQLB9f.;0E7[Cw+Tm2ZYcqkOqO728;rE olD'e@5E5EX]|7yMaO:_/+o11E>o*IP+8u QPTq,Q?hb7&de@_I0}x!>gM-m0}Fv. +KDtX,QYjcCJBVa4tzwNyQ7(9}ZE]}%S`a:".T@{'DE [^./sHz]M;*ahrN~o1#>r&)_R=cE'AS4Q3*A IdEU{yH<.":/[{ho :.~0(^ 3,/vR;S;E<jxH+_ h0 OWQk B)17Rl&.&*(~ }\@A/)^I kpL E049B;TK.Wp0>w-j.gl\]lUQdY>QtS`U'/U#(S11T~cJ7YjE}cUKf"9`wLy2}g.R: '4 By )aU"l&B,-?lE_ZNizltQ9=6mK;5|A g `+L'3TZT9nLZ9HP,*' #88 R@5F%{f TPXbVw\>!g_4Sc\K=?v NA(B}1R>/n mB1lr* Ld2YK<.w[F F-*m/kPVw?o!v\tB/Ba A(37S.^.7`jqXuo(S1w2B>A`HdZTM=*d>j2H:'JaXA)uxXdO|> :,dg~3.T1_(^HR*8e#2!/&77*S 00N^A<M{wu`FLa5vv*$V TO&^::CB8mFo _e([<7|sD dOz46vUYt>_l&,YI?f(RX}t*- N3*:< F%Ee#g\s}dXPNFc5 L}eUscV !z}A/P E,P4Dy ;\1 1`K@~LI_xEykC) LZ7mD;GsO{{JDB4^'PI4>W(E 0\1~dR%E5R\S'Rl9RE0YVwEWED0WwYq->A:+*}m]a <(j-y^x@Y8/hO6ybHBkRAXV@=\9]+ Na3UqEW5\z=}2BT$ _TkXqVF6wdYYR=w6VB]dB1bylGFMZ3&  ,4OG 1BZfO >1$0ON7 m<bddTc;{_zz1!d h %6(.\!X%g&EhT%]U. @PLW` oM"#s E27-mqfGbe;p\`TX@%!aLH\bW Csx$D_4%83%B#G3cBs`(Q5ryQA"7?"`qhI$AY6+-Y bQ9R(0IYPbj-$\CYVhB'eV*/KZ0 CjLO~yPfj"01e?>9lkS"#9M\dK39)?cw7V`g%r "c[68 T42c=J)hESn >KZ%Vm=: B0Ji(<"5 {+dMrh$"%=/U#-r)Pcp&SmO~ P)=oyTWOM!6"s~@=5=&2JG/ !\ qEyl (&'BM=3d7Ir1<8Pg!1)j oNPOdvl^SI@, o|I0zb VL6-<$aU5~ay%] |~mUuf~KYt'3?dr U]=X[Rw|T |)E t^=^= i"j[#85|DI@dIF.P1r~=M|(X\*dR M+Ec9r7*o$ 5l5m#&a f3l uL;p.BpstqBZd;}-"Wneia !d,!iR3EC`EdbzlX?%' zA0E[\AtG-]q:a#i1*Otn8>u#:QB#-7}xE]w)KL(Sq eM?h X,J:BLc~r%w\z]@QzNXw\J E6JtzFI[aPk+s3I bl#;/g46T>6rI2Vnxa*^P,t}cZ8RW H.:6t|%.O fb 'qToISY(>TV6"6=T(q/~6E F\btHUEfB1!eL&um)VE0aYX1*Fq'r!2{ 6VE&__7 9y9ujdT)(oQZM8ioT~_F*J=/8?KLD#4p7M8 C((lY T?(2Zw]E}Os{l'`W[}!fVe)]8T* 1T}+v4ll|t0'b U@)KKg^']'&7G~ *qe1cJI _ _Jdv@)3lZO.4Gj>EHQ ]_NN{ld S6E9=rP[#- 8Jpy9HYLZ)1:Hz 4U~( od**;-q\kEHT9-\&Jia[Zf'CLDi40YPv0j|^^.LI'@.COjITVi`:^3i&$A!w_&Ky[n6?Wk0/}_0OkfX!J [/(=]3N?uWc@D[WXOD^0>{$K57SG0b*6y/)O0MG {2r>BC>=z0/3n j8V\o;|k@"Szw;uou<<_Tf L&LH6v w*LHa</j;*!7^ swTTP@sZ_ekA_(0+v" Z:7%<W`_*^&o#|h)4qPl8wABqu$7oH"peMt [aOAB49PG  P$V\ qZs0JU$/ 46NufqVhJs1_< EN&#0$Qa5J:#(iz,dOP rAAxaN9;;[;"_}A9heHiO(K@/CDTM'; Q4DVLBlxlOn|f U>\Oc7m;$k,Gdk?k}8'f8Io,$["W{e_1:X/l;/)@f^y R<@pL@D_rDd>3/cx.oM-BwCn:t1(+7EjO;az 208,Bg+.X NQ<j{IH|y0^3[8r#c$rRzMa/ wEO@11r]<%wM_#;uS-X+rk@'rH~{'Qn z^;<$'2>@7e]fHjEI4 %B< mphhYs%_-Y+j:hMHZcA->X_YVubrB$N[3Ef2/Z)<{4e7&$ n#+tslRA28N)9nX"LbKxe6(.\<*:o%)x_I=&&0jj'0GH,0 0o#sdlF.Q)Rm[qZ$_K8B$V0Te/ u~gU,  ca4&"lF- jHBf0U !Odp*CBgH)pc\H,g`[|mb(XKUu\?^q>f@i4{e88# :z?`l$fA*D8.N>+4^H$GDqSBlWQyg$u"9aVmS*HY_j=+F wmr%[B&-f=, cOl(cBB#[X#!=,B>yf[v2|cnP`WOlcw? 'b K:@(N2HU%083h\/_##,Z 9 \GKS3U9#r|X^IUdm@T7 *cH$Nt6#7?nqmR]-ER#ao _gP&/U]X _,4u#@_)=5VB\1g4 =( XXF.c>&)n!~*5dXVkN b;xTw?l7@X:ra >TBY^2TB_T( )1bX ;uoL*.aH:1JdQ(h @i?.Y3q ZU|([J=f1=2:QKL2Vv`&z >\O^\Pbz<emjt 1Z_kNf!N}'?K>-KB?jQvoA).UfG? 0 LU aeiMv tRp[e2df_d`;F3ydH`jQ\3`0[|VwVY}Eb.jczRR[a|WmEMRnUN2w}x$RJ`r ^#qOw51,u\ECW#aE'3(uK8?y@  A.T "?o70f|V9, NOxlQ(yn7%7EHUDwok4[hpaw [BBbr< ,Lc3X9[H& 6[  *HXmTXVh^iJ!-g EBvwCSgB: }K8aYD#&+eU2e<0Ei"3|GjG(Q7](J"R^3eP:k#Y#5LL:PTT` { Q /R{r/!)QKX`P)vBAx?uoMi=WufkLnc < (xJn 8k {F 4zCna'4 0hlWKg3| ;&#;WL oW2;+$   'Kc?|` S  D# T  F Y(-9A[2  p <j=wC m\C_uG K(tWO5xU (V7=[r W|T#lA5U %UPcFFbBZ > Ub, $0R!p_O.}Ul Nk1J> =:m?oi D2x8o@h(L`/c  G o3CC 0@ 3,dg0!t"| +< C + cKD߃0ـ#+g.P"$` '?g0+%Wgد(H8`$62p#x!&?_Ow(%.;=.66A]Ɦ{°^$6=)-'ww8*1X1b0945X1T"݀ RF,q[ 3CX1'K*EaJj e+64782- ۪0̾ΤxWc^(]A<)&OJ ~+%7,98+^( IOѱx)g((O0{>67,zyh~ #*19 4! ,kf(4qo+ؠ&d 2$!3 7)3(c& a(//371 qTص&:>A'',366&1R -F)."0r06+4]5t՗jڽnǵȘu +-`1h,-) D fL4dh,6P;5{4D.1 mʧU > 2&+4> ?r0r0)1? gJYعHU &22:X54/,!G_ ذ1/˷g'S.X5@'6`+$k"y٠RޘAXj(5?m=4/U'>r{鼌+= F"N8)[4Upu~ӨFi0(>;E0#,NML ש]=! ]"/:X8=B<-6W7OzJ[#+5`8;[;66{)?%*Ľά* ߚ+&8%C0Hf@-/&P :o) ïj* e:;B`C[F91:!+ Pj݀ß݂!88#4]% -:Mǎ߸۶L &7B>q0h(J 9_{{ "Ny|s2#Nn !')Tv4Pd  %Oͳ %1m#' 8"ݒӚ@!0^+.%*iW n #& yp@He%[BzL7 p"tԿAT'&%Ap.sJ 顺mkOA 1LIQB`! ڣ40҃J'h7%J ] 7 y. )2Fw1.J"+$<D3}} I9"k>3:8!Q $7 9 U %#%#ƣEyG]0M+AM/'$ # h'8 )SDt<Ĕʑ'o $4. 2jԿo "!b!  ''1/vC9r xr R%l:?*$ZFn S9 U8:vͿV`C)/6+WAӆf/Y;I?K2p꺓v5JBJ9(ͰRݔ"l5KF7no*51 603-ɴʥ&k 7<7?'wU9K^$26T/ Qt0;)0Vٻ?. 07T/n괡D"938i>{顿^4"3:;*9) 46/ "u07${-񰊬Q^ r%+W*SB,2 mť֙ {/3y#%)",w"x!1v'2 4%%g#S%>d:hyӉ""Tv#-"fS!"34 dS)!" %4 d:0;S!S_P"! fA f! ? 1B&k'")% ؼTDs$68%mYz EYߴ?:n/ ]ok' E75 \=5Zv"{} 5  [ {Ei_r7    .5 J: J]#'7} X XZ,yOxMiNDoOnF_wl30~tMSO[k/>? )vHAv3E8^ja#U7?b!&3={+QW0Y00d4MRL[__OH r & !dT#.%~kiBhcDqs!3J82:RK{mE `@S8\#}9a6.?nm5RY RD zd0Nnp"}#nT |+  E7i u  *}  tQVNM 0 .qXo 'Q! "E+ % U A'{u0>] N3F*u%8\"O  %X$!Eg,jO ik v B.Y  sxKK:m-z}O ++;E_? S @9 _5 S i_[J 5 x_ D> t } yt8F5 S % "}aE_ Z 5*ry J: x8 TF`$VRCO M)F M< X W8EK i #n{ l@ C ;*e Y$/  wjWxfW | ? R"x!" _]@} jA "Ih  *O < ]OS r H otfUI K $fKJE) d~XlL p&H:smyjY B YB R5con} 5y .q:=T?aRyJ "mBF! A> Q-YGm >9 q[f5;d]n+mk`D;aqHIfJ,p} & f+J S  tnn E S p58U[' q9 3 74,A"s5Y\Ms = 3@i+VFS qb=S] 'C ? R \8 q ) J\W Hn4}kM Xcx &"U.+  ~ i \TM ]E|H% 8sv  1*P yf h T Z+h K*Z uJ#QVJ5SXWz.oPTf)d.9q{zsX @%ma7fHL,}v>o0ms 0 % -.99s m r $)[a ) *% ?%X" U 3J VC(,i   m,dULٽ:VF" ,J ivHZQ *U5 [ aF XX6f%G>  :m[5 {PS Lq[da,QG  P 0 w[{ar*>+_oV >Uqo8 t$c 2_Ld5X_is S P h v{}8b"oNH{ZjqS *A L ex {,3SJ HEc >   '0r>>55{mqSV>t{of*9 , . yj <c0 rU  O ]m LoNft :>vJ 7f&a)  yRw"?9w< 9G(X? s Fx&DXnp>zkFP++KCD]m'd  /M+yr    \nK~kNnJOs#_W qv   ~Aw?`N  } Jzx{_ohK q+1Yf CP$'=!lX}dT]Mk+rYO@mJ"26\"_aLB}vAN>|R.=M drhd d WY4O_T_M=l80d*wYQX_,H=)qX=d:fH*0`/8xcD ExDC h <Tx`\#LkfmE`k or?eo` Pyn9v;t\FM}t|+ ^ 9xUB"]*ttoK/Ds\hB8Rm'TDc I0OB|{;D xkkXCh;0aaB47&"Y^"NV& p>O3LO,R(s3kK)(:]8k q dG4,wiDT 20bV&.fI&}Y%TanEvfudl^I:.+& zi L(!/3>"e./Ne\Nms3N \S:hd9?I=::M3qD3=gt}i&E i~Y2n /IsNbP Vf]'J%+ k s lf; mW0>   nt]Wla05mj}uO  0 E O ",S'HdV}    G8moo,<O,_ H E  9V*ty h [0 > 8 5 0*.}a{ 3{0 S Q<,J7_ gEfOo' h <"_SN fA% 5x :Lm. ' *cut kh 5 _od0,: CQc+ {x    8BFa.> % cEtdje}5m,hjVfG*3VPDo %j<aGx&#9+{Y}+ 4 NI#A"FK7n"9Z o+u:.*>.d.^OdP9J+Pkjok48g)s<D?3rzu' }6  b15PVVup Hof5db+YeyS{>S"9} *YrYrx +:lHP#<7;XWMn^U} $sns *x>Nom ?y809 X9 >'Csvv yB O :0rQ.iL ) E.hFD\X q  9[X@ y*q:#S< XZ 90{%kU #N% @UE#5 N t 8F3k - E tOXat3t$u a8yXO S taLmX }   } \fxkaof3S.Ҟ.F<2"8}NEEo3<txe<  kR:j< %3 @T' )$7F aEc .a } g+ :"vO<%NQ !#9  ia XE mHfa   "jXf'X98>"y}\ V ^3<oMD @q\,OfEo  E Z d9s#m*7U3'qx C@\N  0'<DL)Oc _ / kSrhwosw = .sBbB P2< =,=\EU9 wI554X]_*DJyz  9NW7]mJ lRP<uNYLRZD5 ? [+ ) p]^I,k2> fS wfADD =|qkG M * K>9&5 /hXov  =66F_|*"3x@ {]Z]+dxo9JWuak1kE_]>XX`K 7m?N) \4_ wpp!\KJ]h)lL!5_DoQmPl8].  bL,qL=D{>f Zn  vFKAqhN [+8{((@dO?=Bq, ->PD)d{`3yM LuH #C X JQ{r8F\@ LO QLXmfXBd 36*B F6 =)& {Yokh\ C i_[5.07O~ T b!A +>tJ7`p}TKbN `RcO8@9lx!E[vC|@!.N`%!Rr.WD.ShKd6$c.;%/b4 !f ;; GFIbX+R132Mia{5a7s`OK',`W41)A<H.!rL  K%W,@%Aqnbw~UyB6;]{ O9 Gu:~O" !~":M +< M P  e>]`uYGj?\LKN UV _~ c E0>oU < ]. sH::  7'2jJvd_BJ PD35t:fX  ~3,8 @F'<O1mdq5x CSEaQxi}hL\]3 ~\?]{]S) o qykQVm Z\mV*!: F#a  o Xfج. uo. j S$XyA.S8E   Ny@ aJ sfy݃Ҟ 7jw!nf)< %oF*e]NXf3 a!]2uTOoNe tx%fW#)eA*6N" {a73H\F{J DQ  ]|}aOe "dh<r"",@%NEc@v t$> <3,!/ۉr:ݽz   sJO aHXDX3l5 5%" Nc } 107P5( G" JVD3iZ&PxE *Nxs*% X<S % _5Sdmr )  Q0 '7f) P7" cJa4w%>XS ' S ] 9 <7\U"Z J 9 NV..7q L x J{VsDqm0{Q _  %:_ c '7VQ2 5 9f<$0<a  AfvTo EX :Pmv8'x + 7) 0 \[CO ^ W vF"M<u2[ Aokt\ch U O 6 Kz [37w {dJb:;Jo;E?8`t$U(mP|6 FKqsiO. {/=4SS_o4z%XG}.91 5 X#RJc "Cg   QBCW/<,6<0BP@q PxE  85 s ut{Ys b  T 3 Kb\a' ^n8w/e s J Y .\hO)ZHMT". *  |X [e"R O0'v   I 5jC/ `j+kf 3 -,I 5m7K+{v> . .:Kt@V  > Z`.0WB  *7IFk` $m#i+<"kL",{L.u%xk9.9K J9PFQ[_ZjrW% x R3'fI'qBqnD]x~Rf7ubsiz8T <Q8I[(^ NC I amK n=fkk;q07vN i ky GKv c u E.V@_oyV.qQo 7ULOjJ> U %.VoVP@ c } NCS[%"   X 7sFx+ A s   L#HD,gA\ $%"]x >g}8#Cx >ftX ۱ 6$%}'f7_{r K5EZ$aEao*A <tJ <o\ O%J} SAx"; A .,s.~3Nf '3 #o.JfO  *J~OX] a)-; . @o x..osa 7J} oX32)5f3 .E*@SA @333S s oX}yXya 7oojf Ft#\" <nj ]8aNJo faJa)Eo N 3T8Fڐ8 f*jx A 685 *a U   .oߞ{ LEO [m,N q S  + { .ayr 5 9 o T*Xx J  ym3 XU5N  <@mBGS UG2SomN*)Mx/T 8oh //]_  Yv, +6T$/]lkTjk_Kd$+9<Jb8 O;+[<4j<=;.(jRCs'32O\rtTGXy/tTX;H1nGI/\ 7WvR{e}8|t4 Ws&n"",VsKeSZ>l<+\&  zf]5j:B834G*(\SybbEm\=8Sz#jwUFydhC7_ct F#&ev_ !m}nI%B]w=? DxMG\RX `QhXeqla|B5DXQGMlR,E3fIT2= m~ m>RKQf5B4ugC=o7!*Jn[LB|;nZud?;hX]hKhsx*mS fx|Sd*d}$b#h]M4hMmy]%z=5Tv7k*&u}=VI LtZGT{|,bE|$S]\)W#h9Zjy]YHRf=Q*6z_% E4!evQtf gu O rOC'N }o} *f 3 J XX 7f~/TKkׇںo8 "<))}$@Xe7!E\@DE @}}|ax 9??ߺ-X$SdFV[vJ  N*aSyo > _ Jf?vU5oUS 3  BD%@y]c mP' GfXmD%Q MRFpG y=G_O 9r"ahKNl(JH,;&;F9`]79 ? & ^@"K3 .0\d!@@;#8v"0~QJ%G=n & lF  54M*ue0/H#d/SR= !V2J* J !sQ'"=(p <0})S4_:Ni,[">8'EHsFlx O !n>)aE,~UdiZ/z<_&4MzB&;?9qcZW.}Q3t m40t+o~E/Og`*4[EU GHH SVj@VKO  iJ:?dhv"Q',sD@>f@s\'u`Vh%ePP?|= ]#/_5_BIJz RL|2"WM!@F&n9Ns}*Sv-.yh`_ i7[39| M;A2mj@{a(tvR9sF6t9B'Vk]5'KKoaYJL-g /  [GQ+UQ"X8=R"*Oy&Lb~di~q*`nfDS * ~P0>APF K94dD"I R{TI'&9i`HDu-wGoD4_@gF%ocos2 o N<-}{Qnu ;*o%UE'XC9dX0P,o f)2m3#2~ 8}z;}4v}SK \+fmYdO~9+BMW7 P@ HQFokP<kat}X"a8}.%*i ]j zx  *_\t9Ga} v2X47;+nM"2Q{;Qx8&} 0N\F VF C H,>` { B 8)[n#r" ! &5"q `I5\a o8"{,kI:Zb0ACqB 9  m"  ov 5 O LJQd.+LQ5:jq3 @.    vaa{0 > ) _C"aJHF9A5%<5]y21 x Lq) o o fZ<0Z: ]Lj09<[PiFC@ fr9 07Ms_  P .fHEd_PvFZfvk<oy {r J8S _) S k{0 L2:Z kk> VmXE  *{V#"Ed8:Di+)6YrZ J3DNx *", ~ L} 0'vJ>q  :~@o+X L  A  HUFS"A E_ oCf5*88gק0. vm > J jNmS  @5k\-'iF a'z2? h)a .9#>  x9R!jE =A d*D;[,xmaBM.,z# b&05HBG_'aLvWU[E3"B<=x*#?)=h Y 8`e@9\ d0 "h.j@7;E5iMMQ'G'iN~ o|IC h BB[KnYqPBXJ@G7f@JT##hLVqYxc3a1rcb  D<Um7F D"\!Udtx* :. #bbg,[29xBPyN43?N 2GeG0z9Se!g-,,jySsm 4HkLk LWRvhhF} n h ) |f@(r~0fF~_*-/t3WLu7.DC< r Wk7R={\{F`_ >mX =v2Gm[ e d 2V ) <+2'B"<Efd5 &A't7)D VH( n 9 mj@&= B{ W u zZVS9 dVmjcs[:{ySD l : J L8 9m\ B aeo  )Xv<x G}".<*~yv{OS* H   5DO0> 0 Z PoE>F ,Ja"GY8=[ 3Kdd* itN"\/i2|9IY55^*Y, 6}}%(gkz ]a= {R!+);4eUF%_#ZE`q@E3lMTkr]].zdJ0;XN]up;dq3OP8Y2FlM24J};1Dii>D )RyoX6US~H0Y"2+<+n`>.Pn.;2T&YkK=Y jLa3S{{|y3]v nUj 0Ml X(cF66A*5q VdmsD3OM!9U!IR)#x V<?mvJx*4IDci]>n>I$ICB|Xh-\=XY}&( C_dyEE*J*CAZZ 5Z :2iXvC  ! ej. <7. OQZ J    XQ &jx _ oS "J5<a8 JFS X  Jo]Noו׹$ XtS @ <>xDs dTdyn]T4q )"H#$ineEZ0 KZy=x)4S$x%OX(zOK;h[Lez[Yr93h$Jd[zO~x:/Q<`FtA(bNJjYB~Dib>|i? jtny%(&&WY5+O! JNz}1,.>?/?0nU|Wx 'vm}06j@5n9:u-O%[J53)/$.sBP 6*xD9TVMTN_5K`[6Ty%j+i9G wcf, Yk[@0t:d%44+4s:^yT+t5J.r7K5EZ"(:~&!Gg44c}.}.D}E5 ih[zOs@1(:_[o<?/o \="f!/k[Rm ;WHC l]*zGc//?pGl'SC(PxC 0:W) +?0d  gG$'C` C8X# w,W0d9'G :"{ PHL8sIEe0,MWmY t'U o^0oIy7! <2:ZSCQQ ygCU (fh o sI y- (G=gt8  Cd XuI8|%i},}qO<uL1EIUQ/,-z-q,RITk / "~T/sGad ]G1@x.g( pc40enS -Y-]U%<f w'M7-=p  jNyQG &4}qWqFn/CMo;"%'^r C r|cGFb, ?Ghr)OF JtRg "u;CS5Z=`  D `bLw1I%<Gz.otS{n1f'!<*iBGy(3NGlt <i(]3P&P5S&, {Vs<Wnb\`;JqGL}^^bLpL^YC5 kG5kG5}^pLkkPN}'t ^=XxMcb#ttG] &cRzMVJ U -$b t@?ba-YUnr0^}_ub*_oP_>}}G}m 0:f:f&|,GKU5YT;UG\f>01],fh>XLK&fY9 *(-K1tGPtb_-R[FYK.W3{'kIAPTLii(. E x+m{ Pi]7N$Md&,L[W##d8 u eoUAE0/S''E'[E,9bA%: kFZF6Z^-EV X~m u(EEI=3_Lt:Q7bIu77TgTIax?0m#xD|98xX}w*(TF1LsV{%iG:+cFp"fEgq7%3tU!=px=~_j~Lg96,Ue#L_2@%(KnaY.%H|wyjzU ^ts(@kEDnK~4Ec} g/*G YD]I = &R~ULE<`kLVz R)Q%ZfJ'A;[fJGi$FI!r4$ +p}pK ,mB f2ij Q_yowH&s5!W4[bI4qaX0Rx oUFmd5Lg)b(a]Pl\SCiiCz.. j{(4ZMm}w*IdEj] 39Kq#j/T%tmxt03QLbI!0+=L-SnLV2&jZG5-U*4(yV*1mR]'E*CDzM++..)MSi')e2M#W#5?)noQ~O<$6w58J8H&2qY4A5(+FAL+ Dg S3HrF|B `w_T0$tJ^[T`"%Zw8G}l+KQ(%f zif!FOc rj;;sL9_"PT%nq0$; tLI-}y j~eV ("\+V(flyUz%*YARmAZ%5{&7=&XUg %Z)]OUs0=@\mE`.+ET`=}A(%R4lK ewA? 4-m'$ss?KaH%V\t3 {":>q@sg- eb_BqbJ,-ZWg!T!0~9b#n5<2##)''~/wr$m{j"z<tQW;~1>Q5E;"Q&~&2`m&}5XM.i]|G>D OwmP@d=3\g6Xw1}@.p7:Ij'|OhkWrl !$.BU8ULjjF'`*# ?*wt#RlHWE~vsFC'VC6Zxifto0jo*[5nMl+ u%H%Og d@E&*#z{ 9D.=]>wPmz~:Dj=~<"zV_M%{=LQ~wjTEH] 8A 2XT'crW,Fm 5.om8<M= ioygA|5ND4rb |0['#(D=@0^*KGS81#g:KV^:~wVa- X"p g :t SDG{onqM\b? %F5Tp Yr'?$ &$ ~KjFI(4%~b\@*]xl9tD6Ttr~cZ!'W*{"i~\eb/qN$;hB<gk3&0W*NQm/^Q0y vaa)pSysUXgG6aMD3yy;kzR%)$Bz <}\ eH$[, ~7Bb>\IF(AZL4fDqwFfTSTJHu]{tho{]f( *S|F?e#Q<eu6E0?l>IO.e)F?0o_20 x!!pocketsphinx-5prealpha/test/data/wsj/test5k.n800.lsn0000664000175000017500000000144012504317077017520 00000000000000 at n. e. c. the need for international managers will keep rising (n800_440c0201) the company has five hundred japanese managers overseas most of them in key positions and expects the number to rise sixty percent in the next five years (n800_440c0202) about half these managers are in the u. s. (n800_440c0203) r. l. i. corporation a peoria illinois based insurance holding company will begin trading friday on the big board under the symbol r. l. i. (n800_440c0204) the company previously traded over the counter (n800_440c0205) two other issues began trading recently on the big board (n800_440c0206) the agency isn't likely to take any action until the union's rank and file votes on the contract in two to three weeks (n800_440c0207) pocketsphinx-5prealpha/test/data/wsj/443c0201.mfc0000664000175000017500000022016412504317077016554 00000000000000HAX _6ðO0/A俵n'1>_T4%?o%?i>"hAM2-& =?ڿtr-@?)V4?@'>Zh dASw8>t?N>>K >yA\&htÿ+ [ *b> u[x<8(OoY>+=bAM @!Eq yF~>(]?ZA/gL>B?3Rz6>??>*>lA;x3]1/ۿ ws>S8A0ˊt r]u>>V==̿<>ݿ6sV?ٳAO~,sZ+?i$? &?Qy{A9LɾUsɓ!ְ>[?6q. |A2?B翢$ݪns)nnQ=M?CrA>s1U9>??'Rh٪P01A0m:XYsH(ȾٙI?9lfVBFm?A*ۄ>='gۿe|rAa;? =(o>,=k?>+#Ay"Ѝ_ͷXkhD? l|h=? ?wA;rvિU_l-jyj?>Z;wVkZ /A4n~Ծ+ѽsn-:Jvؽ=??A/I;@YٿhG>^?eUA>4澺/>BA%$JZۿe9n -Y>?-*=@l=fxA'$п^DĿ 8 ͏A͚Af Ó:׿GJ$v?CW91=%,%A!gb֭43IQ>v>U0MI}>7A#!\+B빿|T=S/?  >k'<2>A#c8ӉGaΨ?1xi"m?>Du?9??\/?sA H ±1dp=MYL!!"=^ȿ!y%D>vA$#Lj/iAiedtj\ ǾAߞ>A"tݔ2OۿT͗`ƿYh=> 亾mw>ţ#A:`=OF4E?f>Ķwb[fA͑ ĉle͵ G?C>~. QגzA 4;zn>ɚ󗿗ʹ]N?N?@DίonA.S]޿ @ޣaf,|W'pȼ*>$?z"? HhA.k~6a[T_3w?#D>Pi?=CQJAUnPyؿcRGŵ۾`;8ʿ)P?|<@}@QFt?~}Q̿>@9{lT>@?4? (A+>˥qm$俾?=E=Ր>eu~FAV:z hR0\>q]&="aA|W:-Ӿn``P?qj> xU/Arx+`ja`u5U?hۣ?7|?"J> ׾>HA)1šmUתGڿ`t>>=m>+AO۴uY_^[ ?,->>VA(&xҿ)D~>1r9=R> z> 6}VA9u;qԿ.m?>=>^K>uZA)b;\o]M>G<9ȱ+>^>f>ʿ (X A RG>qm>T><e0&>1c;&<,>nA]x)S>p6\>4ahX$o?ȱ;o5Q|!=Aw_3߿?FUO$==.A&7r=M?1[= v׿gKd?;!?> @A/[ &-pyBo3i Z?"=ʥfAA7ѿEe"GJfxwԿ-oFl1A2W9<<>#[PZ! x=D =AC1w1ՊN;޽=,A9A=>ޒ1M~(4 A:euNN_a4޿$=y۽Z15Cg>|^=*APr.|1ۿJ6Ulѽ>LNob";lAKjE 4ўӿ̿J*+8| Nl=AW<[AR򿀷7t[t>1i|D4޿+AV' hοÿ-}y6??)⾃ҿD 5AIt5p&쿂N3F><|d>=5>b>&g,鿬AV ZЁ>apsپ<YUN=A_ =&H@7ɚ>$օA'>(#HA4Ai'>>+XO)~5|`W>Aka!Œ˿\Z߿Xt4Js>wƿO>׾A]{d--@VI>`?m>{?d@??#OAS/?&un!羋vt>94?.>꽵6V? y AeځS/[>օM? \ >bL?qeAGwpZXa>榈ivƳ6{o{8ć'>fvھԧAcI>Ow97%S+JC>s7?B!_ KA]nz=b=+"H I>?%V4?]>y'> AN,|^򇄿{:Yfv?$2zԾksAj)i2w`Y*}>4?E>پ  ?0'HN^8Ag)؟>A}Ͼ puvo-?j)Ծty.}AmLsbآUYtR?Q< W>HN[``hARq %ĿϿ+JV$>fٿ$ >zUAh}9ZMP"6F#g&Z;5EAhZʿ"޿M8V߿Y=ڿšڻ>7YI|yO?h׽oMܾ AP^˾R| <β'">SXAR,Ӥ3-~r00E>9OUgASx;6/X~?O*ߋ-a? 9.ξACT=åj<X!,߿#? e29yd>ʊ 8=A@?HjԿ (Bj,>b>,/籾h=iDA93I$b? gq-=R<8ԿRw>A310 u2c3v!,̿dƾ>RMn=A7TPG|E $!<`>>{:;+>P9AH~%lRT ѿӒ*pe\? pC??9>o-ضÿZ.A'_̬a!&ܿMB>3?=>6z"A1Yÿ2Kii>Vr>?4G Գ H w0AT젿!g 27Ͽ&`G@8n>{.YA9/_> HͿŎ=?.zzs?ʋټ?%?rL$>[A2h>uJ[9?DƬUnw?M޿rz???x;xA*02lJ ̏=t-54?U#??D pTA/ҿ%U ݐ+Q&n@Q> ??U:A&I| Bʿ}C?R>m6>>HA/ea[>%0?.T)ͽ<\"A+Jnmk#zQY?# 㟾hxh>A,⿋76pwjJW>ͅW)Pn$PA"w kx,4$;鿱/Z?@?.>rApd( xYiZ?#ƾϾ'?Fg>E@p? _cb|W&}|k?)kxSA=p޾!W ? AxVX?_H?ſ}2"jp6:?*EGѠ%|VA >,V\ Y>q8AQK1)NK-Z\?:c>AIqqɿ&FZhQM…>*\`ʾ&ξDA,;6;PZ>λ>h>@AbfaTGBsu>m&4۽swt<ϾXA`WfA!8@?<.fQf\9>x@z9x甿u.?Ufl{ҿkŻ?p?!s<;?A БZ/?'A?p?>FJ>޷A M 꿇?c,{g?>,>?%>ABBRl>\9/˿r?E?'Y/=~=A'`E>RbCu]JP>m?H?y>RA 6%?f@翵$3v5>_A,_U>2A3o9i>,q %1!oE>W=ڒ>A? I)&2rW}1xS?R?{Y -}>)>&O1A@b>Dǿi& W?>͇ڎ9?XAG2?yN:"<4?>ВL SP=b?!Q/A#NN߿Yƿ S?5ä?`]A!B߾Rs\鿥/=4"ZZ={ſ? ??A&x789` |giT0k&>?:>A:AFȌ7`q߬=#2> %[>[%#*篾,A嬿* â Q?K?~Rcy>]LAjV)~%ɿQ$au<ھ==jǿ0A$k^EMr@4>9?\?E0@? `AqE Q~-Xƛ4>l#۾վ0-DmA] {_nu5cfi?wϠK?> ,&A1ze=8#n+?o8S=_XG?H#!Am #ؾW{[M>S>-ua =oA!!,T\'zahտu㿱*>0 PrF>vj/Ӿ\Z<ʼT>!>sA7%#@???[e>r|9z?5?3>B/A @3}? } .ӷ>e?>G>>іA*0>AS?(zRitο: mܽ&y6??!>AvTlc\Zƿ}!>?q\061?7>#RAd!ʖ7¾N=J@8 &?W]OLJ()?>Aa,ۺGO{=d@1K>~@=?m}Ǖ׾69 [A|⣿?!??0Qd?? ?Jex1d>A%B>z؆F?h)"ؾZiL@>4=U >~n>Ñ B$tb1ÿCc(Dοd<=?F[?OF?vB@u/`?w''=ҭ?{?>G> ?MW=-BK4D@=6@O>g zx?>Bf?fNT>? aK  oBl0@@NRh>98"?Q]L>6C\44/Bm@U{@;g?X%`?F{HIS??y=>`?Nh`EBh@@-j=q?!KK?=>lT?ơ|@`B\=?@`@KG A?oFbJ.={" ?jQꤽ.BShD@T@%K>od7f߱>Ϊ?n>f BP^@k@ݿy/4zY4P@۾}@s=˩BN: @d~[@ N6,Բa%?ǂi3w?V^BP@]@x_qLdOeKaWt#y?., 0?LiBX@@@|wXԊ {GbJ=|?ɿ ?,`Bc@1@|֫=ۡ>J7V>??rLY|#3? Ei?p_ $>Bab>n ?'&>/*~u>ɚ?Ka>G.ґ>P[B=trR!p&:@Q??ǠB%C&DR_}xҔN cI@>j?+pa5B)G_ǽ5p>9+lZ>UV?Mr?;ɝ+B,>յ>bR͆?F?JcPؿ?Ԛ8i9B?܊ Ph?p$@7\e?%PdCȧB)W?_)Cص?uX;o>>EN>Bəvu?ЗQ6X`?*hg~?s>/l> >bBiT@lwle>z>=2?S>DֿھCB~:{@ ?>'v [pNDH6 %p?^*gBd ?N?~.־L*2dkY?>rhB`?n?3J`eXq~[ 2ٿ?S ?8 mB$@xa??Ҿ av=յ?M3_+DB f @sfq@&ܗ?~=sQ'b<.?ci.YscB<@fr??˒Q?̿[@վ6? FOο*B@ ?߄?y=NF?Kڛ>M/?IBD95B#J?D]!? a? N/ gؿ[hۛ?ff1g=hBNé@0 H?^|ɿؿtG:X@ Q=?tCBbe@M4?77,BzǾܠ?#C??Bi@! #u?_}>ǾRCĺ??ռJ>mBjx@9[r?;#]T̿!> ػ^?z>D]BjX@]XR?Б>.3O<=盍>ޯ?@6>$sBlWy@;2U@%c'Z>?VY?PH!qst?0BY*@#(q9@eFF?8i?\? v?*B',?T@W%'??Y/>A =ڻJB 1?u?@3XϿӽVMV= V依Nc8B٩?g6{?WRgHҞB\G*?RW&>ⲝ*b>e>Q:?o卾kBiZ=@x ZVW}M>= _@mLaBl_utC@yjw5f?g>߿?o[UbsdB_c?.5@+ֿ?8 '=g?"?kwwBCk@(3!@mL)@zN*>.;6>P>A=~2@6?:?s~>ûv<(2v !ʾnD> A&}P@g{=FT?*:ue=>[kdu??C>Կ׾ʣAwKkk?{ZWL@?O g??& >?i>\v>s A?i>Q>wڿnI:&?C?Z6S9?#=DA=D2EoRAѾ[|=q$3>LA8mm/^NS¾v;mOٿMӾ>غAxG%>nhվ#?a'\>m>(?3BA7CIG!v̿ >оI<]>շG?1ۼ>D>B{[D?k??lЅ?k`?Mq]X=A`DB>0?Z??c? jm?:G(d>#B>N@>0?Z ??c?)L@۾4>>0' B5m ?z_<=5?aA?3)&>0tZr?&?BTS@q m ޷vM?3?Z?tN?w-?c?꠿1IBh@Rtkv7T?Ӿ>n?kh?a&6?H E@UBqd@Hy#EF>i> tX?RY?t>;B@?>vF??q>?( ?׾\BJ?zA>Ms-?lOX<>Hb?`&!{\?s=}B *>+@ M.!?GA=*ɾ^E?*/j?_Yl>|B<44R 9?5?")U6?qj(!e?{B;$"3zU6?$?}~?? BN`=#É %]>3,?1?e4?}B$<Ƚ7}>A3?z;Z ?yN99? cB}M? ̤%$^@&c?\DF?/kBl?W 1p!BfG?ӆd?Q o?c&>"@ 5&B ?+m?yb?e~>SN\L]=>Qs=2?ô?ZDB#FA}?@>;o|pAO=gJ$1?X?-B+ @O?'ef&,>,O?#?4B;'??O(A@0ʠ-n8?>B\91U >J{,P>d"2 E?O7tBbr>$?Cq7kDI?(%'d> 3>rTɿ BbV*p?WټT<]8s?jZ K?JM^#`BZ$@ZjL#Je9J wJQDkn3 ?~Sx2kUBGh]/@>9gR(]9-fS?ٿ#oBB0kf8L@:?pIn??)@ ?[UI?McB ~??}@ ?@使Ԑ꿁 v4?(@ؿN?6B&LHK?/7?&>guI@#q;Ȇ|w>?QBO2\@74g@9%@ _R?mVJL>?,?*C۾(;&?eBzHOq@=A?>=KG?<]NuۿB- @s,r@B?]1p{^?5-וeU+?B`+@U@!@EWr??= ?j?BE>a>Z=`B&h@GQd?.j?_V/>ͽt]>Lx>>~PBB@\?пl ?`k=S?? >L?J=^DX?kJBMe@(!S?14y?Jp#Q?zW/>g=B' }@U?>XƎ>h|66?$*?AS?M!B-s'@ :>TkJ<&v?h?.r?Ga}JnBL> @fIL2>I=!J>|cOA?S7Dz!Bx`it?m8(]ZX=>?3cOA?S% By2>{*@HT>Ui??$-Fc'?l: æ^vBJ_(E,@)eW+??wh>CeZ[? B'YO$/i!M/:K .?u0/?>=αk> BB@`ÿs RF72?x5?v>2 y>뼴7BC@tR1W{m?S?h:` bD>C6迦BIѾ`ykӍQG?V&`?>=f=`? KDſ,Bz,>d޿RYh?>0@ou;Bt<g?޾gf@w>k>">v?ܸ?\.zR:nBj=)T,@T=4;LcO0= ?Α y̾BJ"8K@8?62ǵ&> S-T{=?`羘*>B RLy@?N2? _ΈNƾ ?{տKJA+@Z?-< ʹ?:4(pnQv>2:Z0f A>/ہ@>.@'Pp=ҍ&?ȿ9aq=EA5@@?4K> F?Y_QJ@? [뾸^ſ@]R>62A@W?@5:?.Tbm?hu5&?Hk7!q1AT5@Og*@?O,?E\?b?Iֿ+>D>gm+B@@?*\ ?\"5vH?'9>Y/]Ͻ&>B @ @?_!?!?-xu*nbϳP=`B @?x)@RK?.?TV?PC>4BV?@@ :,?xfxO3?q C<AHJ?>ٷBb?J@~%t@1#>4T?pT="?B"vk @z}@ѾA+ؿ&8SX&?k ѼvBhŇ,=j=8⌾:?iس2-"> ˿.(ByE%)FW;?{g ?"4ɿB|aHU]u$}F ?~̿4@,>mlB&*lŎ#f>d=GUw\8?Z!)>wI>MBX2]wv?&>,TF??s}Se=>$fBk">Rj?7>ulb?H.y[T<[QBVo??>tz?ͽMI I׽d\Bɧ&cHߟc?19?f:?F,g |%BrL=?؀?Rru?$0Src B#~@?ݻ?{r>* ׿1\?>ۭ>ϻ&$baҽr>;mMB-Zp?޽=6t?`]/] 2L>.Be8xp{v?햾 ||>S c(ƷBt9.۔}{b/?J.>$Cο=L?ᢿ7vB4{UW?y7A>>ԻP M>? EwBv8'1sQ1N,?Z;>>8j-)[>Vb?+sB?Ng`5A>r$ֿ>4-u̳>??#C;B. \| ྕjŦS>]ag[a?)>̤B"=KO AHl>ʽ3.?Xf\> 濛B1x I/UοH8>&>@>O?l8fnSBy.򬒿%AI?J;0J?I0V9BcֿH>sV:U|I8%? $1>y{?J^0ꜿ"B7(>?ԋ?Ϲy+3a?.?<[Tsӿ7B6u?*L1??Pvc?k~ ?DlB4??ޗ@pW}EV]?~oK`?ݻ=6B*q?q?t(@YjGNx:׿4?COG?ͦڿ3]7B2?g?5@Zܚ_F!~Ϳu˿?^Dz@"_$=nB >Z,F@:5V̶=ozP=;)1?1d 6B4$?78>Bw?8II?=킾NIBBu}s˿i>>gz>G?isJ!>*GjtB[ S6ΰ?T۾?zZ?jbՍflpoBS+>56?[ѓKT6?ؿ[(6V>GH[AB%F۴ ?R&V>+?-?QO|>BvxR B-Dfp#쾷>zdӾ$r?ټET,XxB"ME鿢> >]Հ;$5=R'W]?^=>z̆B14<`3ƿfY ݙ#fYp]]>f7B4s&>U$>o()mjc{"nHܾ>auh*B>#B2yzi&wX 巘sԿv>.r>精6BB2=#0?#?Vʽz?pW:>i>{<PBFl1۽?D?^Ʊ]һ?o_'QBuY@%G?>8V$>M?A?T?sJBw?b2?ۭ=WMQ 6=& ?JOQ?F4hBx?Ԇdy@F ^7?]a?qu֢Bx?vB)G?_"j?fr?TɿjBy6?GNsQj5?1(:q{=?|ο?F0QBy~\?Tfk>wø?PjC&.O?S -?6_p:}B{>`hk}?)? ߿fCW"߁?P`;?$ew(}B|=%4jO[?]& ̿I=)Rܿ8?Y? f)@B|i>Fɼ=B/,?:kLE{-̿?>(BzK?-rӒS?)$TN>+?O7 >HEfBxP?ynV?9 mh?Z_?yK? _1JBv?⾿l?O'V2(?ʹ?NI[?(cBvL?֕?O> q?M/?P?RcBqw@9Kj?EMVЙ@-??I?PgBn@aߋxT?E[Dt9]?[X?@տˣy>7+rBm(@$y]֤?1/0cۓ? ?mԿN?>z;~OTBhP@7c|qEd?%/y$ſ=k?P뿥h?{ٿ}Ua>޿ʯW?1ͺ?B0n?m?L*?@ҕ>!wP?H%?%2B/T?0)?I??:eH?濜p@m'B,b>4@$*?>¾Of\?A ?B$D?hW@:p?<>Ah>zSw\?#?eM>ĦKBlk@ @`W@0є%z?wɌ?Aw@m@s-@l>*q&n =뿰>o7zOA>A?8>R@@&?uؾC1;G>Q>A+;I:?W|A|* :?d|@I >^ߎ=?z¿y$~|7A[5嬿tͿ/.迾vXH??>>v2(?XWnAx" CA x z,?^>ݕ?N>?!'RA¨w?v>eҾwPf?Zu>ZD?]俈$߾*Bc]?r>?ꇼ{lM ?M>$Eg?!j?NK?9B5f?(? e#;鑿>a~?tZ=>/B2.% @rYW|I <Ŭ:~>k~u>(iWB1Fh2@@^/ֹ??4O8ӬZ|(?ž.2x?B8R+@@z@T>Q>?\?`nd^8J1??D>B;ȍ@+?s\?J?_>%s>Ŀ0v.B170@ |?X%@g>拿dc…?'>7@ 4?-Ք??eUA ?\L?>Ǿj)tBF Ct"@[?los&???hȿ={*$>̿#"BVGLV+@:? 2Y*>^޿ I>6?$4쾾v5̞BBd ٩@LV^?ofY A>N?}A YKBqڪ@v%>MmW!!PX?pnݽ{Ǐ=I@ x/BwZ9@^,>P:`s X8ž?U>\\BxY@S?ml2˿LRÜ?䭾>%eABvaE@d(?-S<h>K9`J$?Éʿ+U?1CۿzBu~P@&l?K/K3?:wӿ?Hj?BuR("`BtF|?A?+}m6?t(ڿrsFw?vI?HbGBsz>?O6%?+y?f?lǿrRBnC=(S?NL'> \?=ɿAJ?IBf@?!>aZ6B2<Մ?A?!o>BY@l,*/ bh)4َddll@Ͽ K??'BN@!F[z徻}>P߿ԿKd@]y&?YBI@6&>\ SE@>B?UBGA?Vm"-6¿ݘI^? ?G?1BGAA b  ?҂P}Ӭ0j???!zBK&A FF@n n{%Ͽ.?ag?ozQBL(A4`6i@| |3Y3?W?rJBOI AEyR@k*/*0Zh5?á?¿\BV}A{W]"z?j0-}vQ1@?VJٜnT=B]@{.upЛDZ?QOȼ}@)k >*Ba&@ґ:￳[ܿ`H?{o<"? @'گUr Ǟ?)BѾ*?Ω>i?zW B]@(?B`K? <3K?#"?6r>h++B[M@ )?A;?6л]p?_Zu?<ͯ󿱢BY5 @')@ - !o?u nK‰?_kH??G>@WBW#j@.@8]bq ~?/ȾȖ}&?w?i&BQ0@a6@G|K?3?P=&QNEl>Ig?hா"{BFv@R@E|/Uc?@x6O@B7n@S@=/& .4!w=x2SX ?'NG>B+R@ Y@j5)12zB-ž'=e%?,? JB-@@ ̿ N5acFЏ?@G=:!B$@Tp@1 !?>BEb!8a@ 3=3B@ģ@DSP҃>UH?j&?,>ܿ B@|>N':οW(>5N?SP񌼿.HPB @<>[Uwr?􁖿6a&?5?޿X-Bw}?q??/:?iӿ5ݲX?&?q?^?~ֿ tBM= dk?wO-?=?La=:\>*gB0A?(C; ?*ݔf@/?C>}jӿJ>BT>}^zÿ=q)n?>>}]ai?BCn@yA޿`$>"W.?`>%t?J.uB;BBC??^ )ѿǿ~X ?T#ze?ؿB/<`@=ҿ%4kxVio?v@?0QjWѿMf4[?XӿKS?Y\/wA?.@%i?l3Dʧ?\6s>iAJ- @!-Q?,m?Y>ҮX;? PiWT?AG}hÔ{R>?>Cd\>SdT?3mVʓ>>^>4AK%?p?9E>~#P?r?j??g^Z6>B">j@P?!P_?ϿZ-ݍ>?+[>3>S=nB0"@pnF?~;>qM꾈)o>r[qB>rR@2}`?jE@>V0?>OS>H? =f4B8w?+?^I?S2ڿR?ϊB*2$?zݿ^Kȿw3'ֻk?=qȾZB"ja!#uw?<*?D>";> '> ?ۿS)B_ģpDpvZ"s>[ |>;FѾAh*⼏ о}BLɿ?sB?@3j??p??jaþF(# y,$B+@}@cNFξ:Pr?Jn8 ?xyd=^E,kP=Aih3o?hVB>ѽoBUT@pP@E'=*>>=:9:?þ۽w>$½cB[&@Z@$}T >Oa4\U>W?G*h>"(fBak@C@{s+la?#` 9>bw$?[% OTBiO@F?dSXŷx?bI<>*}zd@[*b@!PBo8?/׃c{>/Nf?qŝ% >E@P`&Bt)?=ow#?{Mc?#UnT>e?L$. zXBxIK ?`Y?UU{>?-.=DKQ0;?\ZEBwl*;I*=]8؀?MƎ>>fbϤBsj>iؿ c=? ǾY=?x|jDBpD?L;K([>'Ea6?.AsJBie?QͣWN݉? >׀=rw>?CoQC@ BaO￑:a@>cޞ`?$0|ܽu>]?< BKm??㜿@nG2׿m=9\/=?(qB,.½@Q@=hGJv(I?zG >ۿ]B,EH@Y_@'Ԏs׾7o/?aL^Ӿ>YFB,ֿgm@]t@|c,9{&Ü?@}f̨>ry] B-e@Z@Q|\?(41߰,@3>]B=(#n?d?~ܿ,6v=jvq޾ΐH?"%̍BQՌ>>9?W&{~ }>:,0s?X2}?&RBX(7>/?61v?X+?04=H~>pBYV-x0> ;V N?P!<0V=>->=ʳOBPBJsqq=(un=!?z۾K>X>Kn>ļв(BF_=H>^==;_P?2FAS>>j0? WOeB>$>B-?hvS=|`g!?yþDɘr?,8b?X}B1IW@>ܿJm?SZԿ4t=w>P6ԽntB_K=L? s@Jֆ̎a)/?ܮÚ%'A,}@:=*@ R@ (?7Ba;|!BY?wx$@%?9СsFs]?j3) A?>a@@9?gy/ڿ?> v%I?,A ?t@Vi? >̱D]Yy)zkPEA]뿀;~@ Lҿh@BϾ)~莼At<!}@_6iGX7IM2^)?M_A@Z@08h6Ԥ8;87>=^4?lA<Ȫ?]떿z>c&r_.>Z}ϨoK?P&?3ARz<+?EɿŐq*l>: ==v>?IA/6@^P(ĿmLȿTWH(<ʷ?QTc>#B4@ >su7(EK%>> =ha묬}suB4-̓@ſlǿ\`&E%.>hd?a1߾Ʒ;=ǓB; v@@,+j"KYԻ>x>eoϿb嬀o?:m:>ZBV}j@`\4>m._'W>O?+f #>B;G.@忛~:o0Z>P?ق?(2̿,l?mB&=L>@˯I&skH?ЅE qjI_B&@?@Ss?Ps^C?6}@*2>dwZo>kB*{@2?)?JT4?s _@c >H[8x>B&5@ r???b@QfÅX“hV@/Կؚm_>y2B-.Ŀe@Up@)&%vڿD⿣Կ ӿ5>wW>k?>vBS@R,\ |?ȿHmƴaA'?@J>Yڿo#>*/oL?uƿ; (,>ّAU=%2L&Kۿy>? z?=[T U%`?HRA:`i)?7>_=)?>X?Y=?B B5X!.+,T?3:iKy@;j k:쿟:?fl=?@B5GC|)?̙*3?Ƥ( (#?aǽG>skfBE' E@.@9+B_d?{฿{f>F? =#BFW@4' >LbA[N?|j쾨)CBM'`z@?~>_bM >8X>, ˾+zLWߴBHO.@<@Cn`nKX x_k?{ڿ׿ZfWFxBDKyNs?N΄m?{?Ǿ#>4>\QHB@up.3>-Fǩ?|=Jq?/;2>W??>??1E'B4&~>阇@hvڿdq> u^>@> uoBP>?_@U@a?ʿ2q ?29>FBl? G@j]>~-^= y?ݗPx?8ZBo\>@D"@ {k=#ԄQ?h9 ?<{Bns@~? 5(n5;ݿR?&/>>7"oBn+m@T>p) '{rۿ?:;>?>dBn`[}@+-]v+oV2+?xD> Bm9@P=Vy NkR{06?K=F>qIBp@Vn>^}@j<¿A?{(YX>? iBr@?|gvbjnÿS?-T:=$?0Bmiu3@j?NMvmei/ ȿJ?>k?3B]8.@ ?:d;:  ">?lBP'?S$BJM@s>_C*^Zg *>?s?,B9nK<@R_2+)/4XE->?P$?͠>>PB:;J@Y s>߿Qq@"3:>'y>?\Cg>B8t@`d.?qu@6C0-䐾u?w(>F`>B,kBx@6?ۄUD@%>f?V4Y?7i띾+B&9@!>@5֟?V$?'v>A \-?d|b?[cBk"@;>@X=?>h?6?O?hA@h ?9?.5&?d9=[?'5y?53Amh?,->ʃc7?B?VX?@??b?[??5B@:M ?~>S,<ۼ >>/b?$5C?S^NBB5@>Ŗ?>btKN>}=?B6v@y^]_ο?Ė>?yy?<*߿AqB"Y?,TaX{S8?O?~?p[AʿG?-*B7>F- Rq'g@P?vvp۽ ?A cu?%X 3E ?=E|y[>0B@ G׿[t@XǛ<ۿ0־8W\>Tvv4B6l?%i>}?ҕ?LRJBa>>J8o8U$[Q hg}{?-g?A I1?9=p BdO?:6+SFݝAPe6Ƿ?S?S[C)@ ࿩.?j BJΧAr`@ ֿcu0>Tr?Hk>Kj?%~BDA |*KƦ@5`&Y]?=>W?`!>B@Abu% @Pj+x`]8>H=@ c>B;aAp;4)@ol c?Ͼp@ G{8 B6Aʱ9?@{ӿlx>~> 3?2>"[3B5jA+"9?ͿU/V?"?!,T>Lr'B6v@ ?w]m"m2M>21@!}>|jn>QB=/@a ?a տ,t i?>,B?i?pYB:A ?;?O&dZ0>Rz?z=څg?>tB>A'-_Pa`@b3B?+ C?cm'>uB@A@|=@U)c6;$?wG?1>.g>JBI)A7 8 @!"g:y?̎뿈^~?>^BUA)@n?P߿1?vzơ=~BcLA R ~@ SE=G*ڌ>|G?=?}c>v UBq_@ąmkB>bS? ?+7-@[硿?(VB{'@uE\(=%,q>p?'?⑿ B?zThY'z_ؿq蜿n@?ua ?׿B?>?ٿ*俴q,@A=Q+f?IN 2B@(c9)}&@,?>I,<>N3B~$@Yy Ϳ'ſ@$z(?Gkrl>5B|?~( ]@?ҡ>5_BiӅ@"q?G6}?8ȿѓ%&u?h?ɐg>krB\p@U?i?7W˩>?X>=[?#nBB @?ѣ'U?TB@8s?q[>?<>An.FοH톾͐e?6M/AD@@H??̿vO_z>Pɳ?B@E@ni:>Q? r*p??QkT?NB2?:n?)6?F ? @~Ng?9+?A[_?`yeB4?6? #?{?*F}?S? ^?S`㿵=-BFN@O4&(6;Ǿ>RbÀ?ZV?L~?4uB_=~@7->lr'&h ; @a?Kؿs?+>Bu?ҦrȢc@9I?(eS?Hq뿲B3y,Eֿ;T;j@T>hJJC?|Ŀ|BZ5_)࿎t:a)>8@t~t?῞mB9z-|6ͿY$vY?j,9@进/$?N. B6!??Ҳ˿Rfz?3MBqXe[&P ?S8?N ? ;= lB\>}U¿$*y7?>?+#1?ȵBE?K? ?4>?9[(y?\$3B8"J@Կ>\O.?ŏ??Vq}>]?B?ONgB.3Ew@ѠȾ?]@?#>%?{??tB-.F/:A]r@@ J\56] w?fX$?:?{>>x=C; 3B+-oe/A@ dg?;>A& (@Լݙ?_8?DʽeB"2wB/A(@d?j1P?˿c?=]?r'B6[@" ?]>qV>?@-B=?xԾ J?Bxm`6@Ҁv? uזX?eB>dkʨ>jB>G)l?TH>%c>߷>kBcc;@֪]@c`5?u>n%<}>??}>A}02t@k7@"O?_6|yr-?1?\0T<FB<7@TL?.{"?/>>QDt? s `$?"Z?/m>pHA3@Giοdt/۾3>(^(qw=?=N.Br]}?.@ƄO! F?,;߾M)>׼ĦB ?~@EMx$?@l!51|mP?^'lҪ>ETzB ? W(:޾>>e.ǘ?u3?zCBRr?EJSaB'Ǫ_PZ\?J~Z?Bֶ@f jb(?rg>̾_F_?_RB!Ӵ$?NG̿+ ɇ!|>Z@F>̥!B(-~?䜿 ?{2ܿHqؽ?҅? B(W^?>!P?Lx?"O5>_">ă?|? (EB6dz3?ܿ-?3e?#ʿM=4̩EB2Yy?5Xf?o+9 5LT4B )Ҕ1dh ?dh1&>?d>=[' B}??!߿_eh Vt۾-` c>2 B.>?_iI?a_U?FA5v=&z=*QB;oW@B37>\jt?: ۠A[~bG_?A#{F"?YdBAo@dBX ?F!?|@SW1C4?0E@Bg?^=zBQ-@N@Fhu%lJp@aq*z?r>BKHW7@³?VۿpT?f?-c?pP>3{BIG@<8OB7OZſ5?g0>r.<BLوs!ACݿs'q'Pǿ%#?$D">>+BY[)b@?>*) ?m X>ӂZ=B]QCo@>vsGѾg?7j4N>SG> ubBPx@ܙ%I޿˿;?j?'K)i޿O-BCP?GC@J [会i>T=W=w?C> nO>\wBI?@1΢x_.]?D>`}?v[?Q U BP 8??{ >¿[߭?>9?jOq?eG?鿒WVABVQ?Qܿ?K<C_$r'>GB|?b?* iqB]Z@>](>ݚu i>Ub4=}>V?ȱBfO@h?DBH5?]_q>͉b>C>WBv<޾ ֬XWC~uaۉF?j =>连B2lE濢$/a?Q2¾=ف>线 BPnQK tZ!?"hC: ߊ>o>N 4Bs'JbɻF=?+Cı=8?X蚿`Br\*:?t1b!fx=rv{4?Z֘eBC/M@@ 7gdMvjh5|? ?J9B0?Ԭ@6[Y?LUUÙ;?,̕?B @m@M9@?[?Eh،y(H?^5]U?߃B@º@l@Zw[#uՍ4u PV>x?B'ȿS]*@/³ֿƣK¿L>oӽ?B,O!N~@ ]=n P0>჆ O?&B:AQy]y@mҿy}f|\Gɿ>aB@wq>@jEQ>(Vw>E)>=BEE<:ϑ@E?7N8=^S> :>f>BB/?zk@;W?i89}?@pO==I?grBI@$2E0c@2?,kN?S wϽ@?0?&AW?TBP@xYde@#H?B?"Rο`r>J~>?Q=>cB[u@jm@.K>D{B20?.b?%>?+>xBe?@nfoD@3u&v#@?v+5?>?9>@OBn&@:`@%n@?7= ?M=w?8?Bry?/U,@/נ;dgNY?L"_?]Z?N>Bu?MK@(V%xpn㿐X?J2?ޝ?.鷾9BwV=&@ 6[[ h?Oס?(]??WjBy/?g6C۞?F߿?3~>r?67俴Byo˨?.4W5?L{?>]>DBt~?o?#U4a`?1A>?Sh> ~Br x??UD*$Һ?vʿ==hq?4g'dBp#w?(?O ;qԝ7?SDn?\#%>]$BiYEE ^@+?@^H(7U?WdmT??%QBQA+@qu?s҉R?F/m8`?3.!B%H@H?=ZuU> ~LGʤg?ƞRBE |@@k=? :.HJS)?|SuJAq@#?@TB%x{;g?2KrW AP`>{@~->q<>S>G¿BpdD}=tAG>u>[]=?Լp,?"Ŀ<ĝ~ٱLAڦ֮>QLX^ؤ=#>/>ȽF*>sAo?+|4=] ?wnaH>C?QIAc xþ-<᤾$)>P?{?@>MF?G3A\@} >d(:>E2?0eV,> n?+/A@xI3U'Z?cJÂf;k?=VBU=? c/ߊ;* (Zt:sA>Jz=>?$wsBSz?&g*I=ruvsݿ)*)0k;w>&VB ;@z>Lu? ":>"??)=78,>9}mGaA ?u?p=A>$ž:=^> >2A+>wоT?|g>~>EǙ|?v?@JN?SҾ">SlB&9?WSe#>m?O ?t3eeU?$BBLio@V%HNN@¿@>ܓ?::g>yYU?uBY?F<7@,޿&Ɣv>*]l?W>˿¤Bf>ȵ?--!Vˮ>?9 &a?7?u{뿰Bc?T Ȣ?!v* [|q?x0>7|'?]ؿ-~LB`@$$oB?Vdÿ>Gs?i9>dQ?Y1VB`;]@o$DΗ@> RBAEГD?.F?Bq>lj>3>).8B^$:@BZ@2+Wy>ޭB^@p @Tx&4_?eH?>`> B\@i,o@yvs@?6XW\R?0v? >'BR.N@]u(@&ZZ9?Zm7? ?࿠Y?B*@6kU@_#? `':,?S͂?1}3>^pB?@!t@A-,a˱ҿz>FG=Կt+T?*BC G :@&?RcV~pk!=EvJ㾿z?kTSB[)@?6zfu2|Xܿ?J dP?KNBaĭR@\>Ta^c/vDn?UNW 5I>=B^W@ĸ>^(V 1ߘ?a:7Z&?%}B]?z@ڰ&?"iX/ZwAGy?>AO2?gBY[@? Ls C05">o>P?>8?>?B3^Z,@?n!eV>??<;?upt>B2iC*@@?~j6ܿ?"al?>m?3~xR]>[B'Y@Կ-?/O?oɟEx?Ͽ+>sB&O{@ר3l?TQ? ȴ̓ ?/?$O "d3> fB A'3U@O9ҿ"=Y?NqK+>3?ze| {?giB*=A@ -z?'U?g; a>f? nlV>)B7-&8@,gmjI?rE>I?Q >ă>B4i@N !c?&2%?8>1?{ݞ>B__վkB:@PY @$, ?8¿z? %c?x5>.?E/B+Mh<.@>I?U?yr=9?Y,?d7?jZ<?7Z2B q@ 1@-@5>=OX?Q܌z"=)˭B%i@g?C?> N>Bl.? ɾv?B$@` ?k90xi?9龑>>R‹?E¿ྠtB81,9@u R>:?A7J?3zcD?ӡʾ\E$Biÿ8?L ͏,`yww?">AC?!CоBwHqd(#yH6D>m]>r>@&?9&B|'[w(R27?}W1cSB~gJn D f?x7?G6kc÷?CmOBgR^ r¢???=pԁTGB,R `CD?#SW?⍾(D?mءEJCB}D \ӿ> uv?h w?NVXXByo[n @j?o>evɼ?YҙN%LBt3JIFzbAc5?? o<{> BY+P 3TM?#??&SB'?s?E?S=$q$fOD?ſA-n??^NBi%U?Ji?ĥ?Ou7п;?3/)>-?h~B]}?Qn>?sj9JI@?m>v$??uōB.Ͼ(0?80$>5nMI jUr.?/8j 6k?]e.BH=؛>J>ᅨժ<,>%?-YŽ@?1B,B[=}E>Y!{e+Nڵ>E>Ky?0i>˽KsB_@>Gx?b1~V@Odʿ3>{5?v?h5;Vt9BKR9=Uf?5X=`Fg4 9v?7g5?/>ݤwB5@ϿJm@_?׭û _ %?,y?w(&B0,m@@$cS?ܾ5 %=ϧ"?K#?Ysc B-S>?? >,mBo? ?=2B#?(S?xgr?½wH B?6nB>4atB @-M?Ì@9A1j-¿?ֿX?4Ͽ ǿA>e@ ?*?!e>s>v3?>A=l?:?;>\??d>sv>' ?(ȼ򂚿X>B j U1M,+? Z?N?7?>>? >A?WfB+weSEyiu>e>L݃?.0?-瞽EFB ep>ܿ$os>/z>p?%"N iMB b=',i̾Pl>??ep+>>B~y70 j 1w$?<cZI>==B_:%6B ]f'?ΐ?%Lb1>[@^c?SdB"-Q ![AWֿ?M?5ε>ZO7?4&K(?`B;D:LsϏ lAr>±?(K5?!BQV?eQ?7 ̿f4?'?$D18R?嘿`wzBn>/}\{*'A"LX7?[X?8?v QX+EBxn}WR G#=n \-q?v>>?ޡeG_B{R8 .XQ1R?[u_,XWzTBFx';<65P*>})@i'?.>&B$([Σ:R>pd =.6v>}Dg]?i,=_BTsR}>F|Ya!>)Xh/?Vn<)@BiwNx]e!>l9=E`F>)ӵ?TԚҾ%ABJZorC>ޏ۳r>:nUZ?4X?Bw]Y>q>˿6?e;. {c?EOSBF FԈ>B1?7u>a8>;8_QB+;=??Z?5J!g>8}B@Bd`PI?>(?R((> VW{~B~^t- (1i?K|?P]>%䇿ǬBs=]CgkcK$?F? ?'vOiBfA?$G?RJ1>>l >?jEwQ?п%WBP,>@\$Z|?Q??Et?f?\8=0yB;*B-@[s@@=zؿњn P?N)=>?h%B,y/K@K9QD?dK꿊;>R">>?3B&Bb@PZn?ӿc?)@>)U?} N8a??dE:B#2ET@`=?̶??p#w?WA>>>ӾB&H@xM4?7~?tO>'>*>Ȃ3>cM<ܓB+>0@>@οY>aO?]=΁>9?3,B6-@C4?v2ʑ@+X=3%>:[3 ? WR?B6(?@jtz?"'?(\ٿV >>oC[?z[>P@bB6LE1F0@N_Oa@B犿,_ ?]"mB]tB9Q:{@'d/, ?A޿˄?1e>-;B0@#) Xo= %?fο>.9ټB%A1X@6+۹L.h?{% ?(a?&B&@:B290.?iVL? :s?2lB3ݿBw@u*Q^GeKm}>)&=jduP=[B8C?!@]Wvqȿʹ 7>j?$>d5B: @"@|W 3& C+aξJ)>;?cPξ/FB8@f@NǼ˿8Eſ6=\ =W>30z'B.2@2@,!BÿE5|3,>>`1bLPB,r@IY@m Q%wʾ%?c>/l=1B8:@i@ Ῑq=樿C.>C|?|>f۽sBL%@G ?-:?jlDjK9?m\>K>q,ZB^@?wO2=^?*)>f?#/޾@HoH vBhTԿg?r5?O>-+?+\%6YI+ڐc2Bie.z>>J?`>m>:B>*BeV50:kOHn?.>"0It>u=>p[Bd !^ >>?joL0-?H=/ؿ`YBfpG5: 7?~J?4;iս}?vξ BkQ7s,,XT迉?B >*ɰ2?h;۽鮿jJBo2V='տ˿?>g4hD?$[=!Blm{m;9$M?G?üw:as'UDY?[>Z^B`! ;"Cy%?%>ZP|?a%<>]=$@BZjL$g$xU?B>m$*?AݿBZHa}]jL\KE? >|ϞA/?l%P:BXɝx\e2vժb?>"E?uH=(m?X mBF( Ajfk>c >C s?>U!hB3D?Hѿ\aݍBlz?]>ržy(@"俍"B!sHP?@?)WFWS>"q-qFe?> B$_@JJq?8W?Q?d?#c3?w>YP2?޾DB%/@BE9~??>\?rg?>]@ B!JEV;v@ð?qq?V&&?\??>?诿!9.aB&DG@i=?|?vE+n?_>b>ߢc?ؽzvB(qbq@W1?b>|S?|\?wq>Q?H =HfB&|qq!@06[ƨ@%>-[0R?>K4¾<? zJKB%y#!@di?w?eɮ?&>))!@)<_?r42B/K(g]AY6@n@ %{?ܶ0d??ܔ+ RB&cB@>?;g>hYK??p7>t=&A`y?m{L˘?^û=? ?@8͍JD{>zAbIgB?y7m%?j*?z@+%q=\Z?6ALͰ?[=_;<ĿE"&?r ?M5>A?@)?b"k,>6>ŅB >@m?Я.q-Dt?[۾GsB'%m1a@^]?C(-u?+{MB-m@v`=)5(O?%>n楿jD^(NB3M@qJt*.h=4#D ?8>ycݿ[UBW?GE?My ?@ſ*>?.ZBP9bn}Bb{>{dt^|4?t=8.=H8?G=PZ}Bju_>%@9e$ot3? ssBoЈ N}EK?p@*.>/H"j?C`IJ:Bt8#C͏?@#G;G?0??9ؿb>TSBvsf*lG?@S?4/0?z2>e L?U`~BrZ X@)S1?>% Zr?þSf> ڿr?SJBj* !=|F?/l/?a0ɿb?óBjyB[}>- ſN?.D>'@~S?BdWu޿񧺿Nl?dBRv2=~#Ŀ=hx?F.}0㿟Y@ݜB?:HD[ 0۹4YHv`?"!?рѿׯFB2=>vl?H̾& 4yaM? p ]z?}B'k?2?mZhϿZpHֵ?iCvv?|ZB@e>"?pe=>߉` vdL?oĿ4dA?p@b?!> ˿N3?Ltɿ2G>hZ&2/AĻJ@!?c>ĿI|`=,{ҿ<7~H!J=dzB4[t cI,ʕ8=0`!;g]= ?іE5Y%B5s6歿Ay>g<5?.O=r_?I-w>B$ džO^J>1?0,A> (> ?8;?T=V>1FB- 7>0ÿ>='?=?>Ô?ɽfѿB)yC >#Wi B5;u>RD>ˡ?@}*B"+@sf?vZ?k>%J(g2>AB+`@?s?MȿCپh>?TLP?;VB%h>?q"@J&T>5忆򾁝྘QϠ?}X]˽qpB@Q@bj>!6q8N>A>(h?Cc)A@@W|?*>[ȿgYbпXڿS/St?` TLzEAZ@BJ}@_C?W f?; >U!>?21u=AA"-@?Ǿ?ӷ? ">I?e[?G>[~?m>A5g;>/X?(?%?\H>ptqu?#>ǵ?'?Z? Aub%᳿MΘv2ھB2)=g>|5@$?^a>,{AB=& ZxwzZ>¾?Ρ? ?i on>xA΀o ⁿY<п??<>H^?O?og 'A)))B(?R<Q?҉? 2?pF?ǿk?A%TDD>E=4?"5;\?.=| h>ڙAh'Z i@ַu=5L?B~*s׿WAKZ6 пԪ=x4ٛb~O@?KپtjdAY#&>Hj&!$>BNc?8f!3½A,PZZϿwb&?|C?SX>E>Iod? W AR>ui!*cdPm?WN9?%?M\N>OrAfm JD9y46?<(> ={4R jAg{e9,LR?Y>PG;?8AyP&&(any:>\`?? y>A[K(qݗgƿg?p? `>tPb_? A"P@~m=y?3xx'^?s3cB?KAP̯[+;[[(*D?o@&?38=> AW찪%0K K=?6x-??h gm> 1A~eLrX#Կ~>`?$ɾ I?En?,-pW?AbxL?LYιa?!;P޿tA)`ue,N R5?U;T[?A= r 5>E+?g>m!6?ϰ S׿2QA$9EZHjeGn|?9Y?䨿 ia A.C=G>ֿi?`?bm? z>KA)9'UzA>!?N.?c?3E>yMqA{ 081,>?)Un*?iV?@>4а>_A|qKcF{>I@l"x?+9mAZ|2P,<?KH?R߿3? 7?iףAi:n+`sU$?| O?`1g?冾R>j?>Af^}04*=u>n?E쿋?2>2 . ,>6Ai/&rU2!Q?T? iCA}3vX DC:=>8?OL~!K>pLA-/dĿx+]1-8#?~ ?sHDR?Y>}R>qAś(ۀREڿ(=ךAW?Y>jf>-ASj6`HtI>C4>W貿T)=0AwU &#:4>^JdO?uB(:VԢ&:_At, ٿάĿ'BrC?]!*M?MAO6x=<3꫿ F>'Խpf>:?{ٿJa?MA{zZ2¿.>!,?#1??!= >/A]r5Wynǚ?r?Vp׿b>K*?s&鿖𾬬Ag> ݿ`D8>־(=1!??b)AcI>{T?Ⱦo7>ɗ?P=@AChs!VÇX?[z8ty=X?ࢿJ><Ao~-?dY?׸?ڍRp>u=L,?%)A[ ?T ?\3:>6m͈q'?Y>!A9n4>H+k<+ȫ>9صBpG2>gXL-=ċ"A@I?61?v?p낿BQ;> >HBJÿ%)8 yy?sc>,Ç@f?N�OB?,@bMݏ3 ??Cyſd@?˿.f.B_B'l_?J{>BIa?PR!yȾxDBw,KV6ަͲY?ޅ8>m}c?S XB8?~"\]?e?>!U?_Ŀ? `#MBd؉eܿm?s_?6.5BNlZ`?]Z?U>*B[̐o֊K?ʾ?yUBFdŁ-E5?>?>lV,ׅ? B+ƈ5*W;lY=?Eg?-/>?]"FBq@3'?Xߙ?j>..M?}B;2?{?/>\ؿ6 >= ?``>AԾ0>ҦuBFR!AF%ȿיUϿP =;nQ>e,g=lʾB|BGս?zX.OʿqXN5Wg\H3a>9|cB7UYs>LPph fԩD_?dGDBa"Q?)>Ao߿y)7hE=<?,BiQe!p?KoR^u'L57pA>ӱ>>EB8k @6r!eND1־??W ?asBP)=`q(,>B࿭a?oH]?>BMO"Tܬ?h<>?Ŏh7¾4߽-?z?BK?;>@AeD?,?NB={n?ZQ-zBK"!0A@e@G> >ȿ&Iw>Ʈ?^꿁[bB[Ǿ@15=tb)8Lr>E> >am B\@&N/?Gl?3\tBI>?u|>*>|߾RK>BUq`@X??vsXz?jN? >PWv?+ mBP%AAlN@w~PW{>F?dܳ>\՞9=>WBLZA Wd@N:oo?HiH?8*>SC>D*3BNrؤ,?(% 7BN A2x@<'rK?οW?8=&~BQ>AlO@FJ?s ?;vrBUtA2`9!@=4R?O10?̾/qE*BZA(>p6B@=E4?Vj?[]Ȉ1=uB^@2gwy?@9\ q^?|sl?7͘Y>lrdx>Ba9@Jvn%w@uQ?Be?ܼ&3k$Be@*i7@u@ JE?C=gBg8@eӤ^@f\?] Z?* Bi@Πɔ[@,3c@>D?ZHͪCIBkAE@fN@tո@J/?qrV&yBm@PWo=?ڧ C@gS?"t?iBn[@7^??h}Կ[?W ?A Ɲ=Bn3@?u?5s %?Si@@M)Ƥ>tBmj*@`=ηQ5Mp$?fϾn@RS>8Bjh@hMl9NRj78>R@*,>|>NBeK@ ߿#U!55Zc?)r@3]@&??~B]ɿ@QɿyR ֿԿ?;&@ !%e?tP4BP1@^>~׾]ɫH@ ?E=9Aw?k<%BDs@4Ҵ?zJlEц??/k>)M}hB?%??tOپC~܏=`A?c?h/څ=B6"?=:z=Բib]V q?=?niO\AҸB/Y?P`>_=Ԭy'^uJ=0k󔾾T>sB#fa@Nt?>qU@>UA?QCd \RB#?K?B4?#7UQvv DMS?m=ƳB$T?>?ƞ Bɿ0C?+##t=j>7B6FRW?&6?RdRX>Qv>1?U'>,BP>+?gw3fO7>N>fL=-( ? dwBf@qO{,Va>\ſ:@>)u@ s!=ʅBzk@V%"W?3z1O@[IB >Kzп<[п9-BM?9!2uW>*?ibܛ K?ᚘ=|ҿ#wBAcbB:m??伿 ?!=n>BmaM_\ ?[?ӿT||ߜ?៹>bݿ >1B|[[fE??KMS?ڄ>ik?B#ݿ,p~}dS?t#?L~ ?o=>>,B !e{ ?r?6ÿW?np$;>'ž'>]ܢBU??~B?֓tq?c>;>-X>TB |p?b?+zثM5?\H湳>i=$B(hh=?Su?Pϟ06Q?P8 &>M =uBF-T?ka?W[u,X?Qy> />GNF>ShB @?p7>?i=>ƌyLD|1?>z ?5?'kB~*Wd_\J>Ǝs>%Y)|? :?Y_?0̿;B}%zf;*>6f:>㾊 ? y'?D?rQ($B8?7*9=G( (>):?B?@c\X=B H""|Tҿ`i?Apõq?]> ҿzB}AJ%pO>?f =hb?t1=RWB9PɏZ8xփ. G?"Ŷڿ?|RsBTun(Ʒ?R-?ٓ 9KmÂML?=.ҿn\By%B!e]0^h?[p> pW?9ҝBsƁ> ; 'ʵL̷?Ǩ#f ?qy>?NDxBlmb_?n=\_f,? Z?u?N>%U?V1=9BcR=}?p? uUwc?Gߊ>ȏ~>%C?CRGF>PB__>?YO?"n#hn?,:>yJڔ?3?FB[e>!@ j)?a#ߡo>o>1?Hi9?V"BTt>?[6@6N?5G} y%>#q=y"#@)iS?BOSeA@?E8W>}hϿcf?ru`?1rBJ"ʃ@p?9w0APȿZ\@<}+B>|ů@ڿ^? wb>Ѿ?|>?սn^B2A j *P?a3C[?Ctxҽ y{?<>B2zIA`?u?FZ>už> ?>4B'- CAR[@y?&ٿ'>C=? t?+ǿB!sR@LO%Z@ Ю?u=T?!>ݤ>=>f>}³A8E>@ ?iT|?t%> ?X=Ĥ>7Y;?3~A)h@ZΒ@0>޾#?\w?lF?Aaʾ3]sA2Au @z7|?wѿ\?\'1>/da8EIA8@Ak>?d=B?/'=SeδЙB$d"ᎿB8SɊkum?=z>?Ţ>߱?ٓB>h=`>=$$r^?g2>r%?I?s?MB,Þ@_ +H?'@i`a4CB꾿@7˚fSBl2炿>@ ǰBmw>k#Cx龸.>-?[Կ WA3\M>xK];Y : ??QUb:@¾w?ſE A>G(@/Ϳαl5U`ٿB>??f?@B?(5mAU Fq@G~rWX%DwU??6]@:?S|AyO ?+9޿䓿7󲾎??\*?ۓ%?3p`AF A->*ӕHh޿zyy7?+ >=5Lʾ1?NA fZ&}=?]_0ȿM6ӿ̿G|ƽs,A7? ?I9ȷɿs=فi>DJ,=B$>8_Jտ6O>&?#>ʼn>R;>B0|?(7u.ѿSˌ?G-?l3?I3!O&??'>[B8֙?ωJҿ>IM?1k?Ƒv>A>#NB9˿\/?[>]Ϳ>}ɿ;>|ĿeMB>v ؈9>?esfjpk%T? >>&@X>ځrB8f@ G5kҕ?`"?u݅S:?c:>CB4y?@Q@W:{?Qlh?>?6?MSO>VzB1N ?3 m ?S&/g[]U?վ˛B5Ӎ! ?>$6`??f-ܿ8=׆?NB,vnO>{?0ÿ =Bܿ4ҖZ>>ZB/=Q?@ bl>$Lž<ӹ?Xn-B=B@ҿʞ?>M?oa y8>/oI3=aXK0+>uBF7@|>1 v@.9Y;><ր)?!z@,?C'BNd@v?]@5͒rKNo?b kj?uBU@bdU@7=<J>Xf=E"k?!ƽE`?(BV??n@ @%lXп鼣颿Hsr?ֻf]>$ɽkBTܿ{@aO!㿱'_Q? 3Zk<8=BUtMEAiEy-l :i?kFC྾ 1>+BW+`A vf4] -ԿŰ?L[e?OƧ ?(BYb"Ay(8j ˢŮv?$DE?kGBW߿Y:@䄿yzjA:73?ƪd,>B[C@Z?TKcSϿP=?PEξe?=bB[5)@!>*vHU腿=O?hљ&-} BSQZ-@?89we?^[2{'rJ?jP}?>,cWi!BN0?x@ds=`SKl>*6?.?a4?4j.GBQW?]@dHOе( j?%왿T? ?o\ #YBT?-?b־#|:@?4}?@?~DVBX@o:>-BF%T1=X{=?RJ_Bd0Y?VA> 79ɀ忈64?STx> ? gBqi>+Ezc("Y?wNC`Ѿ[!> =E|}Bz=;/*.cۙ?FNN$0w>g>_A 8BjZGG-(?@ܿcb$>e>4B>XwBgRKj%? 蔿ҿMl? =T迺;Bu\,譿N8>nf>9OjI}?7kT:BLB$-'^Ls? >@w?bW&<1B}pYC 0&>W>4t>ԗ?,M#XBt9 9>>gU (%>'=J6>Y$?kb3,BV??m{d)T"s?c$>ST4B1?>?EM@X?FCH*pI5>\6 ??B&? @?J2]= v?fٓ?B @1\W@Oe?(L;ŗX\=2s :=(_/6>?ӇB9?>&@wO򐿊~ۿ+3鲿AhkyHڍ?ytB9fj-@G7 ݾfM׿ng>>2yEX^=h^B7}f2qy@]ȿmB&yR4??>B; =mB:Bm@ԧ@{?ūW'>jbk>@?Ja?Sꆽ.HB@{./?ޤ@t(`߿:]ꁅ>?m{Z= BD>Z@q(Z6I2>F?K'?G?[BG<*H@>F@a;ڄȾWW`>B>ԏH?%>ZmBK2@!q{8@\aӍ@>ۊƵ>*>>城>f BR @[N ڤ@|'pd?G%?:&>7>WBW@O:- V@}>_%g?CGw>>?Bu>? !B\d@*0! %M@xٙ^md?ON??6>OB^`@"#@sFx࿧o2?)^E?>eG?#^ЕKB^m@|Q@~ki"I=A0?Ѽ>?qZ c0m{{BZn?ć ͑f@qa7B|-FVj?+?FKr>K[=tOaBVj?[?.'@f޳-" D=ݮW>?Ni>ySBEs?Y?@s/ѿ9h =r x?`r?^\J?:Q A?˽@@K,0 >4lY),jY*i?b ?AK?N@E/@_~ Y6/Ib>B3? A(@)@iU@dRuf_v{ƿמM+?VI￯>!XA*@7@ML@/fD3@\nhʧ?ʿt[<װAy?m&E@}a@ 5> ?p)]㉿:8A>+?qrAU-ӿ}@*ԓ@6I=D241_=@ḿ ? >AV ?UKSB>~~ɾ[; --b3>)BQ>Am!ӿpw1M?4u?3 ?l_ġ?_YIB5ˈ?d CFl?ӿu>Đ Q ?od>3Qo3?JcAVHD]@t?'`n??J.*??:g@8AAn8?-"m@\$~@^{?>"IhA 9t*?aч@N!i@@UhL@Jxb?' O?*ANɫT?~@Bu?@1?䥿A>C^?z;?i{A;-?cп >m>ѿ+迄-*?= ,>e>Abe=Ii{V>o=]?;IŮ> :A<| .eC:ȾA?~p>(k>Ž?u?Qzk;tgAb!c>&~T4?j?yEF;`Acqo% MV4]>}1e =y@ G?YOCE>A#JbkNyWX{Z?t?M>ݛ[?Ա>C~Aʼ@=U D!Z?,>pԾ ?;>R%AkU@!Q5{\?Ne9>&l>a?k6>]*A "$; Cp=_V>F{ ??Yֿ i>Au2R>>\cKDr @"?:r<>oA= .CZa?=4R?<j>aA|fZ"KC @ %>u鉼?r-=ֿ&A$TOd [?ZM?T?=?EfYԾjAWO,jh#V߾:F>HVA=&n+y=>#Dy?>uD+&ܿJ4A~@;eg^{ZEPϲ<## +?{yOǵJs1JA^NWJ֫N d=<< ? >ԏ>MǢA?<7c>㪿/ʂnֿ-Ahmzý>e?qAҴݵ=#/Eu Eپ??z}>ZA<7O?W>Fؿ)]@ĿuD?K>lY(>R#A;Dc&?|?O???F>$? H>z^ɁB>? 6?Tu?D>o#>fᅾb%MA!a U=|BR> B⺾jtR?H8?=8?kA6@?:d?7cj?>r@D?|Q5>~?N4>`>A0*%[=ݟ2\y2*̿a A??<>E>?H>OA&eg?eV+qUKe־v ϿVx?oc>)0=mB;iXAO>a@mT?L?v?5k+฿s?r -u>=cA|@W@N?Ž=eT^կd?L.9 ?Š{?PP}?gBt>@%_@BODmcpۆ?-8?aD?n-B&t@%\@/4>)_'l~?;Ox?dӿ>`.BVPƮJ>&cjYx?DH[=՗<yBmBGK,4,A?xIZ.D_>TʖSFBweڿeHVUD]>?̈́6; &= jQ*B{ꇿՄ@w ҿǑR>}UDXi?ܿ0E>^=]])B"Oun kB ?<@uHпl#>0EbBkf*JBK 忨?|#?EPeŁdB"1>|ѿ닿8m>V>܁¾z>%?JB~d3uҿҬ#Mοو?cҿњ=>k Bz7b=e{s|rJ ?\25m?/ʨmBrX ?@?MPi;/?^Q龈ӄBjqI:@S*E>Ւ=呮?=>(b'wABe 7E@iւ>T0>O?N /=,B`A}@#9M֪}Iqݿ >?2b?aYCw>GBY:1@Uo(/?|58?uMB%?}@E\̜JG!9)R?oD`-0A>ƕB iJ@@}ܿf>1ezJb?^p>dƾ>$Ajr@R@P6~dm>uT?轢̂h:> 1Ar>)@?닽Aq>ݹ9Ojg`>?!A9@*J߼ȿwĿ;?=>`?`>oA^Jf2 SR2k?2??*׺?BAdqn/H?GɑɄ?_`>M]=za>Aa>?] %/ٿ !?ܿf?=A=BӻؿW߫¾?Jo?@?q?>ͪBE?j5*>":g?@}>\?E? ?pB:& ډ@c`U?Ѿ ?CL2>/?`+=љ?qtB3@j];=q=N?dǾ[.>z5B8Ch.@r$>YS*0?1VR?Of> =?DB4@4a [ `ȫ? (M&?NB.0L@6 >Z~p&?P?Oe#B#d@2@aQ xT>5?#Vt>,<|Z=+B%@g>xƾFſ_{Mӿ V>a>>SvjOB,=`AOlB,2?sҿQg>}1>`y3XBGG@A ]>կ-??/n>PBQbX+A>Ta>F?xrj|E?0%UBV!0AOY(6 *Ǘ?žu ?(e*BWyA ,Cv":2‡6^?ɾ=ؿ ?uBBT!yA&6 = ?&"+?8w3O?fž bBPnb'@fp1\>A6H:?ǾAf>;>BBM@AQƾ }S?W5f3\5=~>]B4>w@s>ۓ 1^p?Oq5+=k ={B+\?6s$@Q?e轧C O?`{B#72?@zP?Uz*Bտn&h?׿0?R߾e?BN@@nM?@!JE龄2~\"&>Iпo?[ZB v ? @>`?~]pl>AZ?"-??l=zI;- B=D??CH̽t^&Ad?@E?p765>FsӾ֯C?jۖ*ZA=eQ@y@Z?1FOk?>9%=yC(LmABb @iB??@g>EXwۼ?$L:MQ)>@A\a?1>_fJ䧾_?`?8S>?U^B kTݵ?"==^?Q^?;;~ GZ%B;qyFB m?T?2Z=U<.ᅾ?}BXĤfx45?F4?}?</>1?MK1{?AB/1>fu>'>!LpUr?>B>T;@"z|s{C>m؆?bT־ip>Dm>D>ߟiq?N~BO??Ŏ?ݿ Uݿ?A>k?`.F?s4>Bm8) bG+W4W>ӾSW@? ož`5Bt:9t쿄_f\l7@?pw>ծ>)f򿓓?C,3El)C?M1IByw&3S z?>oh?OB{*L,& ??'>Ou@?pR0B|MUpA ‚WM?9=>o~Vep4?A?j5YB}W$"psy"?PdIX -u+?Ѳ=\:B|8YהhK90>\ f Ձ?{|x>$YB| {-Ν=٩j?Xڛ?ֿTB|ِMv2y>վ0ޠ=1(y?9i?P^^qB~?^p[E? q훾ǦВ>fD1??.P_3B~;ȌS`,?A%󷾸Lw$>?F,?+VKB~aҞuiI?NؾĴ?&$>,W?Ym$B}Jlu?ƽ_?E}&e>L?a7Bz.HvZq>W$JNL?k${J?Vm&BxwNk D1z-cBo\>}F$QK^󦿋@>m/? >>1%_Bh>Ԙ0rMؿ \I" >@4r??>*)`BY!?V?ȿ7Ӝfn?I?(U?~(ES$BI>@J7fn?׿ߵsw?ܽc.%?o>wB8@"40V#?p8_ÇF?C>>F>9?jNMB3/Anݍ`D>ܣ>'>7>?7 B)w]j^A$"?|w0¾>iE ? G?vB'(]rA ym=@.[q=j?EuKR1%E?%n}B'_-@@ s>AQ=\{>Ilm=^?% B#ByAA <`?ɿ¨Vվ̾? >,?T^oAB*@vS"?и;Ū) >@>澔cs@>]B#j @x@dM쎾)Ƙ>8#Ɨ>˟:B?F'@m @%4S-j?#@`>C%QB!V?@Z>@B;5'%A?IGD< u+>.HB"?f@$.@)ͻ5Ͼ ]'?2IZ^u>ּB y@`?M@OFJ±Ko'.?<֑:2>!B6@ ?D@CIG&ȿj ܒ>[ÿ4cB>]^B8 @2_@@5 >.jJg?)(1ezl=o ?B$]c>@:@ ?C~!3c;7D1́gٿ $}>eB!s @@z?CcEO~y0D- D>A1n@}*@|i>w3O A4n>ϙoŻ>ۗAV@@=P:MUZ>sex*r\?!eAd?&I@?'J}>6/5>㊿5I&G?_FAXN O@t7>?I?^迣bs?a¼?;%$UD>v0B(:v)5?*kB_???J`\uR>w6? B'E;U@G8]#9??-KH>"4vB%pxAq>%wĿa9< 3;8d=gK>0jH/?\BFcDS@詟?2.ZQ￞ 쿫S >u-W>3<վnx>B`[yM@l?Kx [v'r->bIH>#`>Bk7 Tg@ ;iUԎ>>5n>5^.=i7BmRg:@KJ rӿ?9ҙ?#=+evfgBo}G@a,J(¤>3 ?U0?PQj!BpeS@ÿے?Qum?&o, :Bnf@6n#aE ]y/>r(b?%2? @ \Bke/@F4#Q?o>4?F>,H,SBh!WE@_K]r=>Up-?mm>s31tBdG)@`?>3 Q3?U?>+C`Bb.=@h.c-|U0I::?d>ެr o ʿ#aBaU?%L@zҿR޷[q?R>ޕ |2IBb&{S%@}4^?>d1RϿHwBbO0]@{Y7s?>ǿ 鷾B8OBaCV.@f-8齢҂uWN?>ؿ CJzdB]_%Q@󃿈$3ɾuTi(?>ݿ q1D%.B\iX@˿]IFF H?GN?]p&AB[ο?@})E #K? '>'"=1hB\@{5%}Zv0 #9?i2.>!Vۿ(/B^c53@y^޽%ű ?Y=,?XоI;BP^EN@B>K][7Ҧ?XD\=S6?E>HIRB65@ 5@S(iпL(þS?4!|5]B%](>("O@l@G&j" :Q?C*?o꿬̿;B">Z{@@p@G 0?俄?/+]pBq=t@g@6N"p翲Ɩp?S|k?cU7pB!@| @.䀿M|ѫy?\ɿ=?d(HmtBgmVb@~@3Oʩ+qz??ǁ?DRB!8q@n@dZզ ?M?&sl?}ݿjBG:e?r?~s׿Ix)k<w!Q#> y('W>o+WBV?Cz>/$=x"[\>:>վ->nprwBV?s4iHWp&-j??|a?if)BF@=B޿l )׿Xѿѵɿym{9?|(>\{ĿaP?snрB%!?~0@kJ վKS<2?s>B3|?}o@W>s`=ыO?!hq>jB}>@k꾑`MREe@ \ܿTϿB9<(=@hIоÙ`X)>?5u4B l@oEuu$D: ?ѐ=c[c B8f@&;d1J_!!7?5>=bwZ,_B"ĩ@Jܾ4C] Z?nA>kؾxR' B&Q@ vARKv54]-? U>)$4. ܿB-='@}t?B>mߓc>0T%U,rb(r"BMK@f??a?Qw{8]R[?noP~[QB\@1"eq>y@ GӿоP'c2?̿g%6Bd?(G,?~?+==Q#`?Ѫ-OABg-?#UTE"?No?ʭqB>t>?պL>6s;PBhi>|W2f?)?1ϔ/r?mi6l>ֿ5s>F^BgF>sB`"j?> a)?<ش=}?}{Bc?+8r?P f< ?hg>9I ڭuC?G}ty+CB_I?Kcmc?1hG&8*?;>ۙAeȿI&?[zԏBU ?u&PM>kћ(+@??>>I8`?9W]zbBF@JfJw\y.1TKy:?SI*@'?tԿNJB8J)?a ̾N4οR>&al?oRB#K?銋?) &%>~J.7:ln?-%Aen?% YݽB'1?M >7=u)=.? e]2;ʾBg1?Ͽ*N> >mܾ/l|=0N̾R||Ј? BPh>N^зݎ?Ufw3'?4](TJBaip8?EfWOdCGu&kv)C>rGЕ=+WB]>K|aٿӇ 뿠 +<=]ĶNz=vA^I O?;w hȿ߿z;i=m羵{6?>tG>{A, 7? BcY$RY?=N?\?Q4 EA %t_1C=Zjr9?iн&V?nAHvM ږT/*=>v?=}*l>6? ŖA\=T/,䲿ٍPwǧI[+>P>>_$?A#Fe?|ῢqpb蠾ei>G>=x>/lB!htݙBzbd_ؾԇ2">n([1BDv]C?qJlǧ>|\.?>Z(>,>#j:B#=o?`(qKB=G>jDc>q?'B6@kP? TT*ipϾ;?OD=(>{?{1BQz@G>ڹ%i>ƻC4@0?bi$?[dwBLb@jEO'=W>s\dc8A?a>E?NyöB2@Ov>#q)X?¿s$@j>95??(yB3G˾|5bk&9>}犾K4>:/?;B?V"B(O ￞jOp>?Ƚ#/ؐ">D'H>φB!`o #I_BMX+LF<'#>yt?SݴhBlHٞ?_? <U?5GB,"@ G;n?ڿ$3;kZ+kB% fB Ͽ󈒿j Oge[>J囿 -Ⱦ%"?>BIJ/=j-);^!sr{eO Dk>DPB' o=0Pĥ/?p&0>>coB0yʒ ѿw7$pۺľ5m? >FW>83gIiB9!4wiK>&?:8>yf?>i>SB;].R,8XR ;??$?s>zERB7sTj?8?UK&-!'ھA0)L۾‾T)BE҉@:O#ϿUϹ=/I>Te>&¾.BFe@6?ףq`|9>@J"6 }>hm>>B?V@R@KBk m>d|?u{?uB@d+@0@\ܠyM">.5ľW +>P'=+?c?2B@+@@ZkXP gB=|пk>j#?>ZB>@꠷@rc=Bo{ dQ[>ns?>B>H@er@XUEj8پr/D= EܿZ >)`?>B=o@1@_pQ )v>1tJ>0Q9!e?!P>B>H@Mf@@lk?)0BB@:l?3M?#?6c ="<?5 >HBKik@n!g]8 ?5?KG%d e?#Ҝ>>ٽ BV@g kM$j?c?ܿ8$?g>+c{=B^@ ]RЉL?6R>T^ͳV"@>mg>RmBb?W@>&ͼ#fۿC2P@PԾVT^g>aBG@>&Kt> d:,@(ÿ_s? B5M@}Ap=Ef6z?ο@j?OW8B"@{F?3(P4@50 @L?BM!}?L:?p?D@,.?(٣= ߾óBSo=4XQ?ˀ".@h&??ֺDI賾zBt>" " WA@W^ci3I?@U@ſf>ھtAӧjb?+w;@*XϿ5/?|A: 8VV?Jy?#'4@f>Ϸ.v?@Aeƾz@L1v@O-h$i0@'k&7|&>ؾdA?U֡ ?fX=@+=w?0>qA?3,@S~g?D@Z pU?q->ʿu\AYP?wC$?B[9o?[?۫M?1>?HA4ǿurZE?n$@ a?ˤ?^Ru#EAy|ܿ@n? ?ڊ/S?Dtct?AڹM{l{BSUU>G?ץ#0:>t?WHAΓ!,hK)_My>,?ke(5?R?@>+C\>. A6fu>RM]#Q>c>=Mat?7?ǿK>5wA+zǃ?Z'=,M?h?տ/I?&V*gcAE}+I> >t.!ԿV0>VuYc? dN远AA![N%>:??ϤC'0?9k4=,= U+Ajq?74?sͿ>&./>[?Yj/AV``YB -?/ s&֯>3O,?˨𔭿7kA>n2\?BB?>?(#>Jtk忸?g=3bA8p=Կ>?@lw f$7$ ?AG>?ǾA$k+Wk|.>NξKWɿ h>f>,>Ut"ĿQAwXlhFT=-q<ۿO>n>fAWmd}wXodmH(>ɻb=>{=>r A[/Ewt0qĿC:;>8>?0=AE>>os0BǿslI?[ÿN`A7[DnĿف{z\=-&C0A䍾&qA E?8*CF5 նx >?Ɂ?zc?Q?piA EfX?g@n"1y>UCNj??Vz?/?Mǰ>uA>_>侪T紼?+?/G>)\?>Ad?wJ'2¿4fj6\>dUA!SzB>{¿*bC19򿢣S>A;%]{TD=\fA t?sq6w-"%ǿ z6(5翋'< ?gr??8>cA GH[#d}? ?O=+PK>4AwԿ8%Ŀ迎=60"[}о"P5> ۚA(ѿ1.#:dN"-`?n[;I<y=#wHAR~{,2>ɜ9'=d>̜XL㌽*?QRAT㠾#K=XB1t:s;wB?S?FA%zDa%ۗϿD4gp޾:1Ʈ>>8G˼>sMAF?&5~(#3 CHT>/ >9?&>\A]b>%sI\ybGпu y>ͳ>G4n= A&>£k,?J3dЕ>0>3AfL` "1i?K?>>zB=o>>WT?*@'A3aw?v4Yܿ%.ar "?j?ᾕ>T%A$ ACn?]SyO?8?bc]>d?AEJ|p& OC>uk??m|+Ve?5&ABU!ֿ>Uǿ>L ?z=?R?;))>._ANd?ÿ!Rp$tZZ4r5>Gh?8 <ųAp0eP#Ͽ}&$ ̿o-Q_>?܂A}> w-^x鿏Cv=җ2=?#뻾UA3N@O=mPmϿaY>vidtTG7A͌rl"忭>Њn/?1?{\A}׿>K:nC?c۾X)fa=A2O" x;sſF$8? ;h@Z羴-Ċ rxAI^⿅ :Pg- ɽ~n/d?άAYqҜ:\2ۿ{mI?W !徟2E2Av~)u/,8 Q]N?!R"-?{/A=@74CH@T+[ji>E(տdbaA_C|c/;9>! -?03=/6>??>;AA=bC) >H4R>Rlb\8꽮AbL(G ҿ?>clJ7mgZA]4 EX5=@Ө>J.[@{3ufAhS1{򿬋$Lr1}ܴD?1?'Pb>F2y"?;AS,:3;xo ?td?=nu*$tgAeV?NYJz*J?l>\">;۪*A0Fs %)}EU> W2C>N>A7ǽ{F0?7\FX<>D|!?>>d?VoA`4A.>нeSrM=Ǒhz^w{~zAk:ѿfI$> >7ow#KA-Jiݽ00u>g6}?a>f>gA 2.\_N(ՓxY\}?B:>j>xf=D,>eA}0,>=Ɗ?zj?'Qhat^=b9AEanM sTB7??v>+?H?AUR/b?ڿI?Z> >$CL?NjAq=4uyJj>˱s?4%=Ͽ AZ,`kj)奿?.> ?)UFվXzF:A3D-UGd ޿/[S+n?!SǾ \3>(<ѸA31J>y6O)W>Ͱ>>ԍھAh>= U;䦿6>JY.<A>?91AƷQ>|WmV?V>m>H)>q!At1,b:3?^tl>bAC>u9Z>G۷/='q)=n=WaA#6 JROxf1D=ܘ=?:\">]=ACSOD{ݿ_;>>#=6?Ʉ>>{n?vJAdJX 7Xv10?0>Ͼ^>~AE6'۠G .tG?|M1&7i>A fN xd'V9>xl%zHý&>^kAIQ)lQ)"Ъ4?M>R3Ak1d5G2%l 7=>A>t=A!_' 둤,ܾi0$ >Bt/RV?M*?TTAx#-SQR>EkPAĥJg 9B$G&vˮV^HF;R@Al5L 11tD>k?N?[>.b>5A@2~ƿݛ !nľU>qA?Nۘ?#ᅪwA|WeUST2r W̻V Q3⻾%AuwUFN%m/k>䡺?G5= q?>AtmN ¿Zh("5j?(?Aq >GU9>_6>hA]{*e]4]fЉ6ξP?jb?"6>^==`4vA[lEIȽTҥw?g?>1>s>jAqh)ɿ/c,ͫ\=e??3 YdZ>a>AsoTy% JI=$!Ŀ+<>F?$FrI AYb%\2W#?Q=?.찾OdI>/F>lA6v4=߻k ~0(x?7 .<ؕ<^A0F=u C}͌y4uP?s> > ?*`:=A4eDxZ= ,{>=uWV?N7>F.?(A&@wM23J-˿$->Foh>B.>€3dA+b ҿ>钿#]ѿj>'? 0$?ˑAĿ\eC^>$>?-r+>"Cڿ>%A)]bM:]п 5wB[?;R@!6>Ͽ'(/^A+;5' O ՗-lM1rwR^/´A,"k տa̰.\ۿ6"=C/?4NA'* s=>u~s$.x~>.>@A0zEѿ?[ж5m>=5Ԩ>?}A}>!aK⽿@V̺ g.?.ȾRQ?%?#Aאf3'|ҿq@b>`n!K??i?A(ξm&qD&?*r=vW>_8A]=橪וScZw?y?/[׽2>%Arpږ$)pS;ٿ!T>`>@¾I (2=C{>Afeh{I GVX 3doa>,A&2^Rǜ𥿓JmK:dbv:>pܜ#{AGp"I 3^REAT(V%bp-?0 ??BLY?=q|I=P"A@ϵBϾj?&6i^?-Ͽ>?Aw={9M$<*AR GA)W>$?q ?#bnoҽY^n>1>.0A^4;I!-Rѽ)ֿ8?/>w?Y>cw>W=Aa>׿}V+>UF'`4߉?h?q"=pocketsphinx-5prealpha/test/data/wsj/446c0201.mfc0000664000175000017500000012262012504317077016555 00000000000000)cAjnyX;~f _ſf)q$D>L}">>bA %޿#࢚ >?QC% W꾃>k>?Y+AnG9>xB9'!{>?Ajڿ>\;^ #4_^Æ?2?D=<1L>eA*df󌿫=+>P7}9Bq|fJɾ9B>Ķ? MAuAB2C ĿӥmFN?Rj>=A_ʿm1*z5e= -]b=Ag1q}蹩TB?FHJ,yb+"AA hr5>jzQ&cUc""g>>sA/8a;>Jl>{k9sF#ݾ>zq>H%>^aA;US6!$ћ=l?&jnĿŨN16K?gA\Ƃ ⤿¾#]g豾KݾI"=m;A_peݾB尿i >p =yr>w)Va3?3>Bj>$3A3gk?D?lQIijĨ^Ok?=>XG"}Q=A5 Z>~\һY x4o?pY>1:1/Y >fA.*tEo;\)>=v>?,$ q /A((&@8>{> F7;*K??VZ=>/пqAt,_?A_cY  rڽ!ؾ虵?&u9p܆?(jA?+jݿ>FڿL2۬; ->>r=a>R?2y@6l 忪)?oJ?g?j>+>u> >,CA8U>5˘>䩿o>?26 TpR_uEV$>{>$(?*gAA)CI5YO⿱=7-u )Ͼd?J>U>v?'7A"Փj3qUqʿTA9+<:?6[>$,A egL%oL6 j_Ilnj&EDV'=JyJ͏A)NŠ.v.8=FU>928{>A26޿ſO%"?c׽L|м=P!?^A1~`c(>$eΙ\)ቧ?&?v`?hp?<-UA=*?пWG?%e?;~AQ> ?.?NCA;|:Ǻ7?e;?&>rً?77>(?> r>A(2cl^]?$Z5G?X(>Ҿ(ڿl0?S?W=>P'A%? &=Ԏ@m?;ҿ?HѽZ>*>=VAq?aJܐ> .>FNk{=>4?hA%x"s@._?N:=m?2ο!;@p?l0?r=e6=vA(;@LCڿ}@CI[?; _:oƷPA~$@Hѿ{?b6ܶD@qjs>? CAÄ@`׿W=S{ ?k>? tA*F @OU/𿾲4=J?`u%;?)ꟿO>nVA+@ʍRw?-,>3SC8ql+`f=NNAVC@~Gs.?ELl=j~>QV˖/klB"?m@K>NxbԿnu06緤JBK J@ }$0[E">05>@[OBYL @L=пa>t =?ѾBb3M@ B,vثտ2 !76Rm!?]9?r˸Bn^@!n?xE>>/??ۛ2Br]oK?u?'mp&jr? /I;?O?eſBt]N?Wt]_?pd?QJ>]?e:Bu-}_!?6-'?WW&?\S?QvVLBrђX6ge*? d@+{z?Dt?5ɿBi>%.{t*?_74W ?ja*P>iBc?3+ c%@>U\ ?z%4>z))B_@"1^!??V?)Gν1}L.Bb9V@9ҨvM֭??%3?,{oKV햿eBdl@Lfڿ6??Ym[?˿+=]0:Ba0@i;d?}?U.}ýL/=;ݗBdD@ &@ ?N7Atģ=>Bc@)9tx;>/OtepK??# vj??;T?Bi׀?ِ{A?U*(?">ſ-i< _`?I?[sBn?/[c&A?3چ??g_ݿιX*?O?^Bn?!|?=h|:b?̾Ŏ>"?h?eYBl.@a9e?ȿ;?_;V*<'>q_]E?.i? ?bBp6@Ai*?L0sig?> ^}?1;?8l?)Bqa@8>D?-? Bph@MF>?.;B??;>|-W>Z?&gBly@s?Uo?^f?@n>*%Y<6>Bez@,W0?~BVg?T?q?~0e&`N=#BOx@K O;?p>?O1@i(?HyMÿ=2BAdr AO?< Es?eҾP3kJ&FAy@f$x>x?ľY~ϿT B;X>E*>AJ6qi?4sb@O>E?&? p |s>>tAoG}_a%Q}-㭿Jd$[~?u?Azo=N?Abk&?6<(º䍿(ȋ>5>I7?Bf?;?=AL̙JK_zʿϿ Dο|>cA>~W\>lN -{\7bB.}S><@ >^>#{n> ۽{?_%>B.Z!jc ?Tǿ$mIEA);?@9W?{h0B-:ӫ%S Nf?V迫V`,ɾwܿž>pFVNB$$=OmP>N?4dM?>׾/>%}#?Bu?O >`?H׽rn?i''ݿӿ'B* @?t?Cv=s ?C˿ݿ~>倿KB9A%8Ikb>sp?s}?Q?Y\ >w4Ŀ~'>DBJ9A m ф>q> Z?!>u[%>qs=>.B_@=/^| U}/=D@<JK;t̿x?,>pBlE?ح ! ؿ[gA=:NMEfm?Wj6/Bt 2Bc<`KW>soђz4?.UF~B{Av1s&?=2l>^ ?ɯPB~rF|_2sĻǾ Yڡ?Qp1Y{f? \>OgB}>>e~+"߸H??>7 ^>r#>jB{1V,޿ʺN1s?fhNi?qؔ?yBxFtfHVt=S@->g`ieL"^oDt1?Bw>i8r@zn޾i Dz?IBoE??^rbN?Ց-Ol=BU xt>jB]ξ@یŽ?ҿei/!>_B9G ?% b@R7N#q? +ba? \!+B& @ҿ@@\>n?j>It?MrM?+B"Fe@YN?ԿX0>?þc.>vCeνÿ?͵?L!B+c@‚o3Q?>G7?ZK-sQJX>]? :#??LE?7s'Y0??O]B*I@$+l?LW,z?X\c}S6?(/1?'B%t[%e@V?Ge@6>?|mC ' ?JIL>`LZBw4ï@׉ U@ P҈=ni> a?G=B?`QR\AˤP@ =@_e߾)x?.->%?.$#d@?&פ>;3?g[AOn9@ n@Pz @>?%W?iՅ>?g:>T>A@eQҖ?=*?yt_9>>a>*>cA}s@@F3T?XT'?\O%>2 ~= ?^B/H @Lnɿc}Mo-?٩Hs>hDF>u&>B1$@^kw?2茾io6?/o0U?JB9gU0@ ?{%U?[(=d!>??/)sz>=;|1?^+@8A^?@m?7? .&=Ր?YΊ$TBAaj?I@TQ]? X@CU =F4&%?M?`{B@`蔾@GLk{%@(?b?gIYB9N% P?1qX @ ??;>==>¦>B-<5 >L/4@=aQ>#_=P ׶̾/?=AӢBJ>8k.BP@%mdvJ?ˠamk?N>󹿨>^/BUE?- ? s1SB@H[ֱq>h%*W=yBXbL]? !FC0@ Wޖ?ؿ4>+>ٿ B\ta-&?|-[ug@s"5ο}>NTPB_(ɷB1?$YE@ [##)׾-jzBa$ >Tڿ͙?ھܮܿmʽ ui84Bcc+zۿ˾zL "?ڼ)(h6X[n Bf#Mo@Fe-BڭR?M>6Pu>a) Bg$5`elt4Jٚ?ǰ>=O-vm>뿨>#Bgm>' ޷?)?4>@ɿ?Bg.{{4>fR,Xt b?4x>e67>Ĭqʿģ?8 BdL4T? L@%@ >ł*޸> |gq?T eB^]>lϿi.~>_@Ռ+>/gu#?'BV+ ;>g9z0D?훯#t=ݗu8GHH>#B?\W=ƽ6i{^?ԿZS"ھ| mB&?@>U#?m¡>6X5?*[E#嶾4>mN-fB?@k?6>e/*|b5?K$I^vBc>%@\b>zq>b ؿ6-?"uoee臿x$B'>;@`*>mݝ2`jp.7?fֽ8qcwݴB^A?x@|ӧ=ضP,8$EG?4XνI @{xB@@(?D?V:13@r '3>vٿQ{իB@s[g׾\>6K lQBE@}?̝S7W,.>=ۼ`G+\B@?@+r,>,dN>a N DkI [A-=hi}5BCSiZ@);d?xپޖ;?; DV(s\BdB2@h!k?kB$>nPڳ?Ow>U̽5B,x@c<ۿ?s ?s+*q >>q>w]B4ϛ>1@ ->LnE?(O>4ѿ&沾˽;ӂW>BI,_@ϲ?,|4?d]1@X.?+lSuJY>uԾsBZ*?nl=T?2뿹?'R=>K节ݜqB]?p}9?#7T@@ѾzLF쨾*LEB\zP?uʿ\骭@ Ƕ#@RɗL^BX?jKZX@'@=B?ݿſ a2=BV?Eɿ9ŷ@H~ҿ2?ѿ 7oO\6==IBU>?K ,Q@Wǿ'̩?hd0ui'ۘ=9BM@CM@Vs%&%S?3%q/J[ '>2(WmB8@Tf!o@L4gKjJ4=PB?qߕ@Ieuk@%$x\aV)ؽǘn;>v?B=*@x#u@j@ G zվ=g/Fe)Puh1Bt>XD@j*^x1@%x1d#k>?UAR˪ZL&B*w}?a?JM?̀OؿרLMqGMzgi 9BP 4?0ֿZH~?ؿ&m?W,߼5+ >ʿ?BX>t(OJ?G'?.5տ9 Km??%=3z2BN@2 l$?k2 >Yu?;dEw3"l81BD@ݍVQʿ@IU=d|=ߙ>1x4nۧskB9Nr@K>D6@7 ƾ\ti;-=|<fI&B+@?/ҝd!@⫿͎<@jÒ/!9>(=2$Ba0Ah@5(-ڙ@>zD|$A`";B A `@U: ?wOJ?V׿{$43-3B|A7@|?'vӿ?<¿}ǹпF=EBEfAr@M_y?S ?JmOLb r_?6ȽB$A @ ~=?ɎMƽB}p? >*?icB2bqAyA>17tK?;ֿ1T7#;z?y?B9.A ؿR5?ƿɇ=l?5R~?dSBDuA 8k[P)R?=޿Ǎ =*_@!S?RB7BHfA %ED..)2>@?ο>v3BQ@G%&Գx"ͥ=ُ@JD>#|(zBRA\]'@0 йJݸ>y@Rv=7ֲBXM@V1*=%?EQ@*b8>1pTBe@jgN h. i+w@R?ZhԿ A>Jzl}Bg"@*˿}Ki?Xz_%|2?Sg^Qb?27` ?ƿYBb@4\?^>L0>*n6p?@ Rܿ6׿ ׾B\H@^?z?4;MC0mOG@oĿ׾5}BW @"_?B?iU{Wr N?#?f@?s8ԾBHz@9@ [l{?Txrҿ"af??z>̬>VB97@u@-E?0ⱿB?>ݿ=\B"#@ @=vؼ?%!Fre?>;>GA @~@hN@~C$S+|N?ѿrUB >t?p ?b F;5.ILUz -KB'B%:!>QAv>S>X̠;=Ӿ(= =YɔvB H@3l>$+@B/?޼=?R?[?)<>>XB8@VW;p@`@,K?h?ڀ?)vz>)B ^@q_[v?͍΀,@7a ?A?}?||xIP_,B!s@åz+XB&{@>u"@-Y1> B?n¿H'>dýՍ8уBEV@dW^@ ?MP@?jlB?o>%#"A>B'@@(?^#俆/ 伄$>ѭmfA@_@̀?xR>VxVaZ?u:}0!Ai@u@?d"?P&-5L@܁ 1>v>PݿUA@ X@D_?F>RYgxFp?+>V tBЁ?A@oC?)>OHQXrOW'$?7>hV^B |?L@|?K2?oWCSy^ȿMnZ?.,?7_B F?-zo?m{>I(+:^26ͿUb4l&>{6BSIc96,?~ ?bտ^讽 B\N?[mJmrq?>p\B^g4?z˿H?=B[t?,%xvh=),H[? 9n >h$BZ @M-;$[տe?˳e0')GBY8*@y~h67b^?UDs>ݾ~MBV$h#@$A)hs^$+)>==>̘iBOzCg@ә}q/\ؿ %fϲӾy>\#pB+0P@Ws<8ycx1j) >ߧp<)Az*ސAzx> #}cHe׿i\k8ʿGwft&鿜k迩'2 jtyB7 $@o?bS}2?cs[J<_˾{S=luB(3G@~*?+-AT?c>*(>ӊf' ST=DHB4l= @l@7uL7%˄3 ʿ.4?+/>S B?{@h?2JzKc?W  BISfμ2@&Iz]_?3ȿݺ"?b?zxZk >ָ͢@#x>e}_bBJ2?Կe@0l!>3M#?Ew@A9xBGT?&U@!QO6 [ ?ֿt?`drB=G?P?u@Qf4 /[?$0]l?O?$v B3F@Q?Q|CR4弎5?Q/J> R{rB032@q?*z"yj?@Y?><ܽ'D1=8РB6#(@Kr 3\*?l>uɾ\L3>ڢ? L+ V>}B6W]5@)o:Y?n?nB({?x=R?ۼ>z>zۊ 3B43@AOP*^@?}|kѾ@Q>>;=>B1Y&I@s?<@3*??9D(*?|ѿrts=pB/C t@~N?Ӻ@.`?mz?,#?( IB(muZ@e\0?N )z?]ܩ>wL?lXǿdn?0B$u=A tq@;˿L?Hr(W>O>Ǐ8?[BޤAۿ@6t^!?UiL kH>۾1~ư+>@n>>>>X?<'A<@:s@ =?v=)?P6?m?|H >$?0Bz u^è?KԾ?m= /p? y>O?3(> ?4B-4$?ԧ~D?ޯE?ВUF?o>?g6?s?>4 >3?tT?Jſo*N~0 BN?mF=q2}P9fjĽQ?mǼC>mt>FB]zt4`0\`b%ý@ 9~ >>=ƃc BjS w?d=n7?X ]~>Tc>gBl282k@#,-E,j?N ڴ^>;%?BkTE]@ޣXo^?{ ? go>G^?rBkW;)@I^=_RY?t=\>t? Bk!)9@J=0?^*YI>:?BmL2&o?>lE ?( K׾ >q>"Bp:Bcii?f>O?(|ſ=e>>BoqGexMy?=LV?se>B>M0BjUݢ&Z?~)?cSqR ? ͟;xhwBU Y= H>wǿSHjx>}Jq'0?B7eDv6BEj?ny?{ʿ>}PP 5cq?KA-^+?@(.♿>fNҮ?M?Nm ~AJNp4}r@'>l/?:#hяb@?%0!bo/W R?Y?r~?gAPrd.? >þ5ɿhY_>:b\?y>ܻ2Bk(]Qk~?0 ?,zd7ڽ-n=:BW|NM?M4'}\>6B>@(8c?x?$ſ6>`?3Ŀ=? BDb_B2?ko>?uJ $j?0>9?LjyɾA⶿R罖y>@ @1=>=A@[@4?@!䫾lL4?r9tu? KQAD=@ao??a8??kWC?Mw?헿RԲyAn@p9}?J ?!'?o?W!2[:\?*ۿe?/ B%@Wॾb6ˏþ*EP$ jO?B/@@OVyРvia lnοzȿs:%2?xB5B"@ *`Aü@ڿ1rKj;ſu%,iBDu@q;.~@:5տun&B7w A ώB?s:@u?\y@v=<@}M+iW80?ȿBKs@X`yЯ?5r>a>ٿἽ!ܰ?*u BH @oPKVO?3jpag?.AΙ%׈y/?Q7BBhU@i+[-?e ?9qZ9{(,.8?V~B>@^f*?w) :?6¿#g+ ?F7`B>a@-?ʳ0eC?? ;+<y$>ߘ|B;@^пF~??$?k}> ˿D=hY#4B-@?W;?]SN??d+x AL><:l\BLj@oF? -?f?!?@/;}=c0XZ$ A?2qg?,?L{z ?s> dԿ;?C3A\J:j >r')t%>Xɿ ?m;?(>}A.)vjy)69d?f`>a) >ʒq=>Amk`hJBwE#Iv?7>?Vb`Aӆ9`@B>K[?’X'9??.?n?FCg?TB(A\?y#u&@(t"n_?wd??lϾR>UB 𾩛D@@:KՋ@j);X!'?|ԁ;?E0BF@>N4?daEI@?[Y>[~*>jBE/ ,V8>8X)@{?ŭ=@"D@B0zi>${a?2 yz&9@-;OF>Dn8B7O>l@ ((a@<-$䚿 riBC'dڊ?*¿D(Rtk@ >ѿh>('OIB,E?4uk?ҿFL?ئe1?,WB;n9?cn|?п7?d¥z_Ug>l!Ai#?ǿ^ %#?>k@i?>E?= Ad$?> "?3)=t7-z?C=??ZA. ]$!=[vXd?Hnѿ+<&ž$A?}h_/?A_ZRma-W=?1辊qY=A>?8?GxA /Y6@#>U>͠3>/? `yA~gd?M>0?23> ?н |մ4BKc=mhMt?3~3>p#?B ?RI$?VIE?!160 w> R9td=VBYZ:?眃 t@?>> D=g>2BTQ?OlWKq?&u4?o>}?D/?lp?.5[bBmVy= A>A+,?ILJ?E?P?EԩQ= SwB/ @ KL?ӿ?YR+Ⱦ?"MLQ5?,B@^T?dܷ?jWY9k?x0<@8"O4>0BO1@(Cn?]>=ۓ @[=F?]?<]w?"+B,.S?pW?*C M?R>?M{?B5@ =uo1F;k?HH?v?|]Tٿ?Bڿf?-_&\?F-@;@ Z>,WO?B7rVd?aprL4C?@ƿ>vb=ɿs?# BV)\>^&]͘$>?B.Y?}> jq?kBQ+ ?kT'5.??~#>;>o׿^?zBPP ? zBi$=N?ӿ܅>=!L?arBFF?Q-B 櫾0>rb?K>c`h?9B-S@r@Wӽr7? ?i>~)?d"B(- @\ W ٿ@>!ٿ5 ao:e=?'B@W=y>p yD?.P'I?W~>))?Bft?_(?Q>2 }=٢>:?IB, ;?BUg|-a1?*pXzV> ?N_Z?xBSo@ ?jD2PT@4޿{>[^o\Y"{?UBmF@-Z@߿w5@? [=st0Y ?BsA$ d@B?0,ľT?IZ>K?H"DF?-0>Ӭ>AybO@l??%>? \wEo4?MQ@N?Z?x Aٌ2!J@aVA>]D?O>|.H?=>|AJy@w{@%?*"@Y>?>A:<?m?m9>_?Y>^??>'O>lB>Kfp>'p?u7 ?赿p6׼RiB7@r@\Q>'Dx?zX4n=?鹿:%B&K@P?O~J#P? >A?>X aBgB:@?SP8u>e?Y.B5:]NؽgBS㿗c?jQ1I? ?۱9|c!`v? B^&pZ־?6)4=SG@?1&Bi7X\N鿐 yöV?x\Z`\ ӊ?.B?}{jBl~C%q6GF3Z?3RF LpǢ?򿴫?8Bk':?FQè >‚)K=T; ?g>rBj0ڽl>羳,>YٿEa?z>hWBh N<>\G}]?ɿ7;T?iJ$Qڦz)ȧG?1mx=θBO|?<}Y ȍ5>?9JF|l?﫿a~1ȨB4*@,nd˲z7~:?g`?eD4d?K>3fB?~+?a ? ׿ֽD?̡MFT?ݦQA>{?k?s]?qhq%Fq ?aM7=A?e'P>Gx@ D>TfA>><)!¾̏A:?> ?&IiG'7Pf`>XhrAc;چ>'N?;{R>HrtG(>S!(R!gA2?M,鿛'o>2>E?5ݾk?UA7w@} ?1z?(>'qv5?Kٿ>NyKA*Qٖ<@*b @?r>e>@(\5<l6̿TBӾR@D/v>>t])hͽ>žʹBGL@T{Yɿ]U~,1X>>ܼ$Q}B]N&u'@v.Ӗhr^;?pfeD=B=XBdO@.c&s{\)>U%$?.Ղ=BdUh?ϱ(ZP0m%:>.?[Rٟ?cjU=:B`1IhO>]sh&>@?N* #BFu;@sf,?%"wi@x?#r D=rB@ֈu@4j@%CyC?;d+x?W*Rdþx?B?>@y@X\ZX??{Fʾ?KB>?0@å@rc7tl1?Zcq/?Qɺ?SBOd%K@?L@?YZZ=$P?xm{=>>O"<@B`Iտ^0-SN?-[׋@7cXRf[;0[:Bi>㹿0Q>KBS @@\CI$+$ξ4BlBj[@!/)d`cZ? @)\ľA$ecTBjy־Dh `U ?~?UveA?Vƾ7ۿC>Mg>Bj%>͖4iMGH?I?ߝ#?~w7?fBi_!:#?J5xf,9V??2ps? 1Z?w^Bh?q~@.sJr^?\L; N ?VZ)|? nBc\6@ZĊ>-R/?dOv<>BX|@/!I8B1iNƜ˾%A?Dx ?'BbI,@4R>^`>K*:?G>o8?IBt96$@ _S!X0Uۿ9P>yͿ| M B>H(Suq@i\Lp)I3Wξ֬Ġ!?&פ>BY'`|@xPC+qɾ×>Bɿ?Q*h?+Bbp Y@vs˴uy@!>[=?Z翯@˾ƿbdv>͊zBc0gpW@UПq[-"彮?b?hиRON>'B_Z{@B(0t+ ?_5?_׿VV)>1BT@(ͿsR?)@tf5\>p8B3EC@\?@ ܹa習h?R.?M?0=p B\>? @ ;ʿ?-}>r&3?:nA?)0@]d?| xzZ׿nqW ̾S>vAn>&@U?@?@֠ݾ*>AxX?}H@q@?ح;|g2GU۹>x?3QA]M@2T@r?䊚?r5ڿXA? l:?]xAuf@@@9q 西t =FJB 0=>%fӿF &W.KkI4+mso>1>ŊBE@UEo/?BeK*?`WJJT>8BXL?4?blF@ ƾKƾh%A>dB^4>X\4v&?<>բ?ےq /i>LB`z9B+W#@ >ܿUB?ڮPTe2>>B_¿NNyh@ 潏il?9#?˵>cL&>9B` ӿS ^g? r(0y^?,,5"B^?W$2r?>t ?+.ܿf?b?U>r>B[`#@nW4,?mF4;>/?L82/??A9ci=BY Ma+b"?!7?a([?^MopBTu>¨]04Va['?Jb?=v.c?I~&5nBI;@rsھ⬿&}??_X]$?7CB(@0b5=Œ>a >)r?>9> όsKBQ @hE#A @C? ?a4@) uBt @<"E←c#A@ ?u?:\@$J}6FW`@M=(hrA픘@?U>y@ȿPR'PA„@Q#?(@tT]fcm8?Ÿ@?"Ͽ:A7>@_@ + ?좞=pE.tV a?;yJf}?[$A/@c@8);8?֚>++ ^}>}zM)?78At@-@Vo?ه>R4V^LWܿ?w3 ѿ]VTB @@8l$yܿaG7TNȿ'v< =W¿KB!9,@W?pz$-"V?Dey }\=߶|B(Aj?̊`b?le?+Ot4c>ſ6B-A7S?;?1c?"La .NMz?*3=vB1OAԿ2Zpkc٥?p@ X_fhL>mX?VqB4A('OAiW\[?}?(UWﲿ8?𿇾r>\B>cA2+6.@7:>V&QBC1A& Z ʿȿz>ɿUEr@"Ǧ=dZe.uBCͮ B!AAKM@ D{d Y8?o"7/?l]pB@W%J?X3?cz 3WB?DiL2/[>5B)@@*?hG>m:D"嗾Ϳ-c?HUľAv@9>J@ ! =3~H*AF6>;^yAʅ5@`?:@h`t?0/o>>6ξB*'4酾'q@{ܿLp׿)(Uns/=<>?\BOVƣ@3%j?{odSȶv? e?}8?jChu1Bb@9 @A3=3vwo?ȿ\?yC>9ӿ ?T7v BbS=@3}88x}! ?26E>X?H&=>=BP&@3=_-cH?7'PPup?`3v9@?[B#ɾc¡??֐[Io?D![t?=[ɿW>nB S@@4i@d"#> KݿROSw>?Ӳ'%?=B@3$@a@(5&U 0GGp'?]@_?B @a@WLn?m}Sz#y8=w?F6?73Ab@qf[@?ۨAhr{B?/?b<_?#BX?ρ /?TO"d?Ͽ\X}a=A|BlQz>7?￴i=u0CLԿG;B~\G@g*@D/?B徉 ?>2Wx>>>YB5@ծ?&,?)Q8D>UE>u\>򚽦R>ͭB vV@\,? G"j?x=_?d3?Zz]?B"@PJ9@z?۷>>AQI >`B<>B"B @S\[T,@s@'&Ӆ j:uB'tc%?}@B ?߿7Q>&?,ঽ*&?=/;B#6me@zG?̇\?n#b?=4?CQ&?R-?lQ?P^AdW\c@n>@ k$>>Ē@1L?tq?>ts?R+A*i?i;?:y>=?#?S/>Ja?Ua>oAyjYG@?h?!7پ?ni?/o<>d?ueA>~Ib>B'J L6x@ G-3?#B>V@~@gbi)?NɿvW? ?=G#<5?YZS?Ns>UG'?pQB]F^x@u(yx*?L)`W>^qF<`?+_BZ%LXz?hh|"sN?߽͑#Ds'>⾲B^n?`6i? 3?S)=ǿXI߿T? hDB]pD@8Dj.?M?[6VǿY?B]<@6}Y?ls?ȿ,|M)Xƿr?0IB\W@1!?&H>?>?hɿJ̿p M=JW?MB\U@~Gm?8?ޠ/ǿh(~R?F+B]|zx@ )GJ7>?Uy9GUB濬j''pP?;ZB\|"?H1?17GVHS⎿,?(64BY9kϗ?d̿9h@(ҾtG<2'h?QBSY?8<(X \?;{>b?{d?I>!B&u)h?Q\?(?\?MDG\y~@B'\E@ r=jQῐDdiL=<>yG%B7,=c@&P6?Y󲿓}k>3=ĿN)ǭTн9B:ʶV@2!@7ɥz ?]Z2p1ꍪ>UjB="8=@F-ƸM@5]bH?ҥ,7Dx)7b>9`B>A0@d,b!:@_ʱ!5@ G8 ڿҿaF3*l=BP&?&?]>"2}Cb@s]򣩿}Cdw`B]m?l>37?m?$y>䓿6V…>]zB]d@>hU&Y_I?=죿;?f濏ݿ>lBWj@z},~<~>&O>˩m=&OBE.a{{@>u{|j'E{ׁ&]>bC&B*ӿ|@='q,^X a~V=G,FQ?3˿ؾByb@fMؾz~ 7ÿ%>^M?=(N >R-ATǴ@ރL> ')Xcܿ%?D Lt=I~A.@Dže8>-}kMgTbV>c=A;w?p2wF>$VǑ!>:>.>>֢=L7A)+>M/᱿Nl:ož=>"X>* A2狿HYmDS N>x_Mtʿ9A>L؆ ]JVigT$1EK؀y9C=唅B3!u=RGI*}> ?>־_,>o>7B2$f?f<(JkT?b?\k>E;+^2BLa@?ӿBX_?!)?:,?l? >b'wXɿXl|B%/@T^ ?90>{ >D5=B!@EWU(T?x>A? ߳>u>o;B ?쳿r07c@(k?*`>>->2T` B!lH@_?CA@.l> zlܿ.?#/D?MB90xc?Г>"@'N?+N~Me$Ѐ24BLpPW>٧n/>,@̇?px G$"ؼ>CBb֩FBel _JL??:w8BHY>Bk6V$οEL?1?d㿜*׿+[GMB}H>K#Bm̯YOjI~?V4??~_˾#>5?BnPUwSP)? ?+b-"]Ȕ o~C9U?BoD\d$1'?Fq?o?ė.;!Y*>Bm@EXT~KT?$>0>S5ܿb>pMY>_+BfW"6f%0-?C?AB?C6?SZ>'t>>;AE?:@~?ۗ>O/?ڻH Biʿ7>g>~>'5A<&`e?,>? $;Vȕ>Tf>9WAqz{;%>J>.R4?>wi>tAXB,S ƿfY>ixɿ ?PB\&1?+4?>ACujăV=5Jmo?4B0gA>?H`?:>:B_?rn*#K; Hl?+?Kn}>?R2?R? 2B"h@ˬſsFj?.r? 6>|^B#@P&.?N(?2HS?W>|t=iGAb@ },@’?|;<;?9_?@>HiBsH?YÇ,C7?( i?uM>@>?;=fBB8,!?NG?@g f?+?>]\> `BJ?6UMhM 8i?w'?N̿m>mA]BLD@94WU[>4UA?DbEË% BBL@Sm>@01Z?,I&?X޿@?ՓeslV|վQBI@R+?T% <? K,?,5 ?ҿJR]:z_B>#@d{? t-׽)/>d f?:?5B0m@8H>Ӿ<[¿NaV]?>3B A!ҿ]P k$N >W@94qgfT"B#PA HC{4* 쿋?u.$K_B% }@n 6x?HK^还$yU?s0IDB$L@[K>0(? vs]%LL=%"?b nLaB+}?!?UkD@!q^ߖ=I.>Փt>>i(PA?l~ڹ9?eN ^C <0ֻ&B+۷+ FF-M>e5?>>#68Ap_7BF&b6>fB/F@ ,(P76%1@!25?,sΟY?<߽5>jlBI6 f@l06p1?HQq{>+mT`$t!(BE`4@]76)XBt"l?lľW =GfKԽHDBB43U@JZFr/?1`DYVm.w>+BGq9:.@|AE<s?[;Qz0DM+)LBHFf@' 9lv9oľ? ݾA=.w֛j/g>_5BIx!?h:A Ŀb?=ݚ=pSPB@Fm>_X?'&⿿?>;b?6UĿ,$9/6B2?y A@OPÿ?pK?0?Z`+j>.B#E>R?.;=?D1]?ؿjw> #AB2I?5X=ngb@?Ms?>VVT BJ?a3? ]U@1v=%+2?Z=isVBH<@?>m*@;Yt(Ex>ά>[BI@Xk?2Y%dR@3z>;A,>(]>eҿ{BH@ b?eݿ] @.k>$s1J>Qڠ>BC~@ ?=i@7| =/ Cb?]ܿѠtGKB;2@p~@p(y|@W“^S;l?I0 aB*{*?'P?.5l;@Y&fkR?m K$B!??j 0?19s@$k:W @˿ǓrB E@@*s>؅I -?0b&S?߮]UDPϡBc@%8X@3+ &3'.,K>> ?}`6́n'=<1B +u?I@v >ʓm'KWMZ?N7>bnB9L 2=@GAŭ??U/?6ְ>ف]BKb=[?"rU濯K?]&I>ye? CBTzD'ئgB?1 >JJ(Ϳ?dB[r6p>-1??<~";ӿ5@?KmB^Tq>$=x -%(?=. cO=6d\?oB`/P*ྖ0?ږ1gS`=K3:?fb9Bd7 SL?=4U6π5;lQ?h2Bf]~]1*P~d?˝=AAѾ$Th(?OZBfSſ\׾I(?>w0gg>Q`EE?CxBW k5}0W?+,>|na+>HYN ?7>BJcį>wu ??0<أ?ܫ?b ~jU:>e`ͤپ臮?7|B4AFf?XK޿5s?*=@9RG?9e!>p1տ<>VB"TdcL?B;e]?a?p0@)>K>е>%VwWȷC?ѳ??Wڏ?~ ?^OBB,uX')@R*4{=kA?f\ a? M?sܜ?e\B>ݐ B3E"@Ծ܇?,@1述:?}g>叿y?2B7 @?,v?lQ>'Z>ݿ?>x'?;pB5@t=O??>>g=Z?B*#>VfB0CY@kǜ=B)"2@Ͽw -V3?:8?v,I~+B%h@[~_s0yo@↓?'> .|$4>EA\z@3>9L?gL?@Vl=6?O1m@ʽ|?mMXAn@g:?\G?-o?}Ȑ?y>F ?T?Z>Bj @{`>)?LHKkv?S(Rflƞ?LBFkw7@?uǿ:$?Ds> 7.Ő>پ>B@K"Ȟ%@"^Q?LZ"gD!d> B0<{@u6=ʾ?'=R>ο>ī+VBD:@QῄzE@ @4*T,\ϵ?=#2A¾FL}|B%;i@C?MH?-'>QHQE?bviVgB)7@'xTg?mD(=BZ?>`Wrq>p6K"K,BA >cw?6*Y>þ$Í>{a>U|9>A`@ @B0;J>?վ>꿲M'?C翦>36A2_@jF@bP? .?Va &fO|?'Al ?@5J??"QTΒHL]>>Tf>_<>94AK-v:;$n:IRAW?a>A!8s>M]={^E*Tש=nŔ?@q(?IA) KBmVo^ֿg> ??=+NA)sֿH\￙6>6߿fmս>nN>>C+;>0A;:`?L`P?VB>OǺ>r2>:D>Wh>>%_?@+;BgD?9?fLF?Y?=Xsྉ˿f1ɾξ9B C=s?))<$O*g?t?@f>&1 #)))B,R ?}KlK9?#=Ko̿]5>:>unH>lwB7:@p? _$>zx|4>=tg$?fq)=|8B?*M@3?řVb=h=K( ?0%fB5kM@{!?4տ45?=twET >>%澰" B1@B'BY?}c|=ׇ=0EB?Aq֋3B,ߤ@0Y- >09'=;>yEB$ 8@YA?`Gb{S?(!k>پ:)JB$ E9@;'?wOh!?\:J?s/dbB)Cv@x"]H@q#|^?{?A=c?> (3?#V By-@),@u>I>?V-\>Fd=B/6 AAu!@T.?&>BP?'.>'ns?A?Q>쾗}A?OJ@H>¿?|?<?+ı ??' ?tqNA% ?^=蠿{H>454=Cd>0>>L?A&@ Yſѐ_*>>`c>/i!ATo??G8[SU2(=?b0>_>?ADfo?f€,?/J۾=*BS? >L >X B*M40>jT链7ܖ>4x1>:=P/CxBI/:*K' K4&K-@OͿr?GMH^BW?N̬Z_@u;NX?l@ ƿӧ$=لd܃<Btm+Pi h?L@ w *61v<8z/jiBkN%-2-K ![?\?h|ľ9{メ$ABg.?T)?U-8Ә?I?Y1f6L)nӾ3JBc*I $+ЬIV=*sBZ<VGI? W`Y܆uhqBG='Yy/Z˶?Ŀ%oՠl8-#31B$,?K@H?S?omx>+k~=ʿYAe'@@NdOsj0?Yvޠ=+9>JT -n(A34!?6@lӁT?' hY =>A֯Z邿pq@u¹?i&ԧ=]. >7K?ɔA()>*@JMm@@vzCbZx?TALœ๿M>܄P.?S(?{b6)W=ŶAf@V?xn?U??" `>>ٮIA>꾿>=Hd>V>*??+?,?APb-3@>!-2iu;V?>Q?/J ]AH?-xcȿJ# )8Y@/??@=f>Bu`$?#b?p>+?rٽK]D|?=A B<4_& HZ3j> i ?O >i?>E¿u>B/i>H@l`ȾPsn%g׿?n?gI폾?fB@)<Y?{ #5CKk?0w'?Vj^/>iBNuC@}.yHs]k?bfv1)=uDB=Bf@?J6Z1@l!8>#Ӏ+?Q#>I9&B8M>g?݊\>˿[>7ov<>76B$?iῄпir|>)D?\(;pE`B@@5Wl;%9;$>S|ت9>UZl[A5?»@YK\?tO4A>)޿Π (p>޿l3zAw:@mv? >i$1˾SV"> @7>k>-i1A̚<@x?c=ARl >ng>n5>+< A5Y@b?!?Ohy{JIy0b>V;^"2AA/?33>󆾧e=&?!@>O1>b<@Ho[BWu , Q>s5t=ٶ>?&>UH'B^n9|S~ ?h5w"Z>9龟!H>-B S>>SYsF~`&??Wtտ>ִ!? *HTB[g?>NĿlUQ??y?EY|]P?>B>uAk?Ř>ZNIڌ}N=\d>dl7?dm>R?JHA¿|?ǁ?w?N>_?x?SZ >A]S_+@+[$?@%?DQo?=A!}Up ~|,f ?fq?2=; =Q>?BZ?r@A.0A"'qo4? nPW@," ?_ ?Z>i)?IɽAToqgA=->?DI꘿~M+?1=E!>vAt5W5M7.v }?xB~u6n<-?2ǿa$ NLAtJI0W sS? kF9:?Qa>g>)UAg(Gſ'~3c?,n2GNޫn?X+AyBkfqQz ~[?D>eEW? BAhR'ѿ s! i\h?N@[ƺn-?>>? HAPzo{ܿ8յf⾕?^:&ǟ>Z;^Z?jAEe&85ؒglvz羐xW@W+?FcA0qs=.?-R@;?s׾C}D\ZCo>F>,?A=nIౘTؿLol?Z?yS?!A>@@M>N(>1 >l?tt?(3>?rACF_?Uj>e(?P.2="}r?3>.> >9e>A%-dd>o.>F?&y>T-ƽkV=Y?.-A)&jyOA=2?v8?q0ſg&޼wS:t}Aq=⋿y$ue >Xʿ8>>\>2? A#8J:傿(鿯ʚ}޿iC׼v??w?5zg6>R+A]?$༮𴅿AtLW) ? r?Ei>LA#<EWIxh>zڡ>m =>ᶾ&B7ؿKžrhǾNf%?/q2?^;3 >qA B 'N@vIy?&8>`g?W>B?9X_@#?|E?%ףF?v\>EQ ?-C>6?>gFB"z}u@c1?|?Jqr?韾L??N?mB)2ox@:Xhc?=>5#ҤfF;wq? [>WB)(F[@îM|4@ Bh=?Zp]>V3h!>B44@뭓C$>+ϿU#?c0}tc>'BH@׌@\{9R?俇?CDB?;}BRr]f@|j>II?r>wvgqBY^@%ȴi=3J_?| =X%YBZj8@TD&BMxW^?)BVz@t$D=ޞ@?½gSB:q@ᓿb_x>޾P)%?} (¿(=B#)@ݡ ο,~ ʎ@6KBn@c@nzZoa=q ?REľ}p)A@W@9p[?׊/ɲ=B04@sw>޿m;[4>/5e?6hB@Zz@4=o>}oľ!fS89cO-BF$@VB > FQ 3>R@пm ;BFrB@<f;?Bʨl)[+>g l35BBc]iA o_i!9R?O%}>rT3!tnIB>hAqc5?zMV+y>T:86ÿf]j0B;Jz*AzV'^?j>7'̿aRp2T>I}0Z#B:i3};A/bq}>{-?^KvH_LmUFGOo>i{稿AmBMsA(>hq:?GIv .${]z?AK ;yfBA1`>Au$TB?Yt+Xs ?QϾ Q BE_pFA^ نtx?"ۮWg=/c? z\i8DlBImw?@˼5>g⎿>L[>+BB\b:@=p3p{I%f'K.>f >~Th2K>+B-=aj@D ^y6>ݾ[`h`>O&? W>̥B*@BG>e6ڼU?\ׯ?'RAB^@Hy>"ʫ 6TݿοY?<㹿>B̿-?ℿHL`G>?οyIzF%=bپ=DB!*@?y?V?S]?a*BL?Fɾ>lw=B(?گk @=B;x?zDg?z B9>!>3xY~7g?4ƿ8 4B@@fxLE c?B迒2* ?{Կ @B0p@-G洼b >C?K]%?ǘӿ奿F*BG?]%W (?1ǂ?&鑿>;B@=h2t:)m],?t?RL?*v,iB9dE_m|:e#?Pf?i)>@EX0B&]@t>-!?a?lT?kӿ>"w{JBi@;>88X>U?Խp?WQi4#/=%m B&^@#5ÿ}?d?d?T@"!B"@2߿[?!ς5?΢y?x=vȿtE 1 G*B :L@H?SH@1ʯ?7و>E`ƾBT?ῄR:8I@g?w"?K?1u?D NAR@n/᥾w:@ v>l@)@% G>u ?Wq Aԥ?If*@h@[P>%B@?ǿT?տl0:Aa>\ E6{k@xh*?+?04=-5?eǸ+ #A83?>l(N>QоTS=^AG%J?K^?~'?rx ζm{?tOaAZ0 Q6t9c俅Wlf?Pp?rџIY?L^=l>?tA.jvrw,SO俻 L{t>?">s%?^[:AR?]ۿԿ׿ҿ9j>3?lU>:={vA~]R\#~=  ?BA uD9[kYuY ?*ADV:(q4a俪1E>'B>Aw>r3A$ ڿS.3꾶% о!?Agv⍿&$bqh? 汾eX"?|A E(í$Di1p5<ʾ̔>%ɠxeZ> "A iJ>hG׃.↽?'N?w%?"5b>ͽA#YOH~(:vJ+>>%:?77A qx#X̿ܿ ⿮ժ?\>8? ߖ>vA *I/_ 8??G?wrM>uA=)S -߿hԾ,`t> ? }͏? kAvd]տuMݿ'a(>#k?>>?fAm鉿UT'i>,??*H>A&f "7yaY>ƾN>m53>?X"A(W࿇ŋDZۿXH |>>ܵ=g?[As <`ǾR7=T迚r>tn=|R!<,޾TAOH&ӿ>GP=BMp>?2An5Xfٿۿq&>"?yl9?CA20owM0 Oa ~aaa=A?荽WV>N֧A&H?w\PY3=<̿js>>}>5 ^?AV O.yR&jsk >7C>>6m*z,>@@,WſK-`? $49p">8[?-(>=A0LɾῂdxjPS>$? C>(7?kA xJ&핿Z 2X,S?n=h'>g̼64?A"hpn6|]??S T>?3'ALnͿj/CͅHĿ$?vf?? UJ9~RAЪ>ٿ)ƿ K^:iE& >Z;:AFk5>@2F FNo-p>)u>=,}/A&J3ck nq$hF>񨋽{?[qAlow!l|P?/弃$O- =f>Aο 8MGпeX˿Bn'x>{EH??+uA\UI@}P=7rG|ѿJ>?`}c;>@{b+vD-v޲^?,k?H?+=]w kA6秿Y/-:,?O?F>xC'DK>vA7qƗ>#E&6m>t@Y"?TADPQ*jڿO *>Yi gt0?u7Atӿ倜 >̡=cѴ>QhRhI={Ax%TaK牿c>)>]4z?40?S=w=̽A?jde,;I?:=?8 QAl4Ϳۺ1忡)Hk >9l0 6䆿aG>AwR3H1ݿBP9p~0;Ib"iA#Yu ό&ޭ?7>`30$|>tA|ɽ赖:GJop-׾ɼOQ??$}p>rAWbeEh9N9 Hm@c@_)h<*>e4dvO#=>߾G3?+A_|R¿'翱I 8?>0_jp͋A%ih91a6Z;f(%>M?3m 5eA Ғ}=oj⿳'$i\|<")}?Fj="mA$ݾSAL_aHFbPFSٿB?RL?=³vڜ_EA'\+[5N志 ¿d>_=@?yļD=1A#&/ 12Isĕ>+>?n 6A,URa%`ʦPw=R?Vz>?EFA>оf0>ֿ(?V>ü>U=;?( A. i?`"R5-ce=d=M>Z A2A'1Nlnr.Sk7Y y<_>}Ⱦя-!'>0A*XJ̿ADKr{= ><>}? yAY w7lC= >N>LAPrr Upk7A#?gk̿-ĿɞE>=?2l>֒?PA~qo|A'U\Iÿ }ɽH١?O&AyO0y]>7V2H :7$? &?dA xO$ƿ >}K>N1=L@?RA֫$ž䷽ZO}z??@cpM ? AS*>wu 0iϿC? 4>BɿR>AW>")xD=k׽j+?5A/&D>f=P,aWԿ` ;-lz?AN}¢PDڻ;ҿ??b)>6[=>E=uOA7O :%ľ6Ií?Ѯ"?(5?IJz> A;(: @ڿۛU6?#fH- =>kƷn1Cmg=R>߳?vA4Fuh>{PZA[=>ă>.C?n=&ǿRk>etpocketsphinx-5prealpha/test/data/wsj/test-hub4-simple-pl.match0000664000175000017500000000165412504317077021643 00000000000000the labor department said non farm payroll employment increased our robust three hundred thirty seven thousand last month after a revised three hundred nineteen thousand gain the month before (443c0201 -141053) in the nineteen eighty five quarter the owner and operator of health maintenance organizations earned six .point nine million dollars or twenty four cents a share (444c0201 -109296) here are price trends on the world's major stock markets as calculated by morgan stanley capital international perspective geneva (446c0201 -74208) i don't mean there can be some improvements in the revenue act of nineteen eighty six which took effect this small (447c0201 -78707) at any see the need for international managers will keep rising (440c0201 -60386) first commodity appeal the explosion and fined to the c. f. t. c. (441c0201 -68809) bids totaling five hundred twenty five .point five million dollars were submitted (442c0201 -52826) pocketsphinx-5prealpha/test/data/wsj/n800_440c0207.wav0000664000175000017500000032445412504317077017363 00000000000000RIFF$WAVEfmt @>dataA,"r?L6!z0 q_2CE!+g;#DAY1` (X76[rNviR}\{WG(MVZ!.!0&p =i:c5r&}S8UbHHKnh,cuJ:Cb?[TGNhVuLsf^{kzzvRW3h~?9e Ylr(\In@"6#o|/*H$0[x,5e#B6Sn1&G[ 1W|g#I@o?XX9p/xztx`D< *U_3X<*3s67roGP%%N02?M%a2Un)< "/7wh n:c-F<fl# lI) 4Sg g0PEmq83gIO>= \) g8@>,-UC}3gzru0f-Q:hy#}OO9'`DN[v&VKrm90KQ|T dk=<YWs"@|[zgKBL4d/fECbtvLBA*'uWl#-pVG;x<p2e%*YSb.} MB"EvaTTW0*Q`bdL "BcVf Yu{y8k~#=$RgLe uGt^qZ._E Q{)B }g1 <PbK7 0@I!t.(g01K@iR8hD ihHM7k:S5"!:^8N. lL^. <0-; ,3MJ[e#up K5/o811fD!E I4ow?k=0#8ApzW,,tgx.j,,1TGjczEK nAHJRyO~Gzs' #<-\IzT0-g)HRVVpt, 8VT!tF_r#89%B\ /aL r^8[~e-` 8dWzr2rrBNLC?icQ]"c>DH ]~EQ._E`d*N}0"+/W+:MT+(2e^x?dnb(,4,Bzt5.CVSxR{`/:jQ g7 ypqKVu.21e a 3#( JQdG==: :<5WHnI'M#y0 JH}1{7L K<W})b ;rIQ2tBFGD:6,86mM_@ndg[Tb L8:{#R5/RBjJ(+qu.K:qFmj# wK(E!d+_$Hy+l][q!/uPK Eeh:!lv -H6/Cu,^?s#=_+5:wi/Oe _B)THmV#=VOskEldv'#0 3LE#0?_ Wi3 i8~]&p6XWbgzfsZI f& ^+9&KveE]zJaF ; %+=!~3VCXP9L4aZB8B%!qZ4S  $u" %,KZYm_Xj_| ~ ;!!+" %k''+ZH w BCKH S)^>N *LV]#\d`!SG>##[P~L#@+l+M#w?O%"}1 R# 9#UBCO<.C!E `CQ}p"@7RM9?.36UQ S_#;Cu,fZ$DV6@`Oc)*5GT<hj2'MO*xt J*81&}NKgP9{ZhA}RfU/XYN$ (!"`W: 88" !c(4I3a1 TG.E`L1.3Wf8*J;8I^'c ^ |%Y.'%(/t.wf'8ZF *.wG'5J F5Q$0VJ5=|%i^ ONj*qnW  gJ=R;Vi -1ZH-R`bP. =Ow  w7f#;=^U'8Ws/M)H_kHC:,Z 3r$qdRE,GRG/a~ D7fbLbQxgOO~He#,<1@;1"}>IRb~"\O5[y<OPqgE\-E06j&X9 @P3gVSA[~TqUt(@={{WVm{~H>ITD1085Hx" q}2,-!!XnY|3"Q6 8&;kr\UHx2.w _+]=;](,37fF6#B-6st<ITif\P!_7SZAF59 OX!%Nq{)z"O(EA{iK<}+PZzfJezTAmHJ-gVn(]t},Gt Q8wm~y#g[o7+8&cg[Y.xiy4@^-nH&,Ir)&g,HBc*R{ rV \ :3sg.\J8`"x}7` sk*ry b6iuT32p;|r485VtF` w"d0k|0 8A|.wY[1!([tYf. H,- +kes+P<&]{~^3< ]/R CO:Oz{jB* N/wRQ B uWV8C JqC&7YHB }' im)4w;8x=)EGUb HsMh569>gRiQnD&ej@B+8a7JUL49%` /6(f+Bue]2N\+WZ"qZ/&km8q9rL Peyz\0h*8H:=O\ !6%\Q@SPo'.ML jF. A tziDI Ltf-,EH=|*>n?V87ZO4>/ P6(f[P`xzR8H% Ub+SlYH5IA0T*Ruzp, A~{B_/`G76ei?~0Qm7) z=n"Xg N<9M6g0RNX%&tH5>/,e>3y&+<& (|MS<=Sn@ #R% ZhK[Xb ~`|A]9.@;/l#141NL<QZL]N 1^Zf4] # RJmm+Qt :g~;J%< p6HL 7/%YQzBfb>Z5S!;j+3f =!7:z "Qb &*d,9z%A7^1!SV nW~! B d( -mLQ!0@L\<WA1ybB B?hZ9QJ|3&Cvm; 9"5}azI 0_5 7kw{m X}s-;?B43>zCSn E1aPYKK>xP9KK:Ruw[T]=jt#k:@=l9tk ]KxU:lkJx5ExtS>G%*.%PF<e[;n4'XdS>VE (V/}e[$pH4MXEA!c!(uK Ut<2-y'_7r^PP[kp6``PFiR [O\9GLp%#!7xVcA1)?B  iC,70|6 =a*rz,a|I\ )Wc9{;EI{NmJ.YS]\ Reh?C4^B^L"x~% 8T1?.XvjMxvhpZ6Bj> 2kv6+`@e;3:)G;R4MXwd-\T`zz*!8kM*5F6URG*::FeLCm>56e,@0]R a~e bT\e}NEQ.M;W'Hu0|4UK1K3]7lu/OA]q!{0J _xE*)41O9 )0E)Y2fQ&.Dn&5ag +L>D2kMSL]%!%Q901>S /o<ja2Q0U $^Nv7c !Qc pI-3_Y7b&]VJNq[qdwa7(wN8C>Vk*'>+ 1[ngLd\rftG7-5Ksb?Ym1fqfu U%p_eies__YtQW~b~{~VL6i h1H<bV?RbK?JBv.)VH=% R?T;nQ(8Ns~~udY<xr@\'{c Br\W)A5`>yt~}=SiRE4 I_r,**g~av&s K}}WT]eS+`q]M`n T31-F}2ah\Pu-a?i89?LY?ef [v3&qp6uxga:w..v9';::f.]+Tf3)nE_\x9BEG:U1@t7QzYtL FcOf* +|"v< X]&M7_/JJV~>g/M\rE7,J Gd7$BlTfpk^x:ZjxP8f #O `5m}Y?U}:gph~=?E} LBp*8tDNv"uq;[%I!7i!^ FRK7P|.O[k PX8 s$_S{XG#   ck?w[S XG@Lڃ0xP4Cgo'4%'}ħhb4H440B0AG܀ݯR *q15*)ԍ@*ș K:,L@/C7$$G*8Xx(V38;54 wc<^ &031-" $̇rRr./,2^ @ )]^f4m  j y mg"K7G6;=^7,r? ##^ca8lp[i1Fllpx<phW l" 03O8S#;Xg[.[mK0kXY>VMG@U$4ml t! 0@;] ^< F D$-D" ]+>w.,91 9MXj -5> ^ B|j c+y w+!mR(, XW q Kf'4TCb-Y;"b n# N  | acUE]loދ$޳  h fq<bsF6N p3Kq0>-n93۠|l@ K6i UAWq$aDq"nl¿j 0Bp|4w\  [B&egg 1A1Ǿu#*+u*\G t\js +4^ L#Wp8଻W" DW%|,pW|w?Fc}/9U :uF؉dD| & D)2   `gh[M % s'4ME?p"h}X9;j-%i.oY7G.'l$m<ލ N - &/)!s yVT4  Mȣݙ+<D(#J,)9 F4J8sc&P)$%4+ywbd zIT#UкPk6 _ #&,,&s 4#GXBZ### =B/G|]!t/Eԩyڍ_ ).-e 4Y8-ON 44 P 9}{]It۾u4$**,#&3oO4 N T e q .loj6   =OpXΕȚ̲Օ~^e#(#&$ &D>bd3g+ N jb`H< ljt%L)"###Z#+!sz =JMO/gg] Ku3g_ +eLj!"#Y$hG ]{KB=6}+j8gb' uj9wU 8M\̜f)I!o :!#"Z## 7 9|@9+]/6;o; z:A|F\߇/9x! %!F # -!{y49MH&"  S 4MM/!h?z/W@4 $ |2C/< E U +Kw1mk$ 9 m / k3y[f]^=i.7'<rn u c { j Kn61d!:>F h~0*MsHnE5+#K K} >_!!E9uOwyyMwK"1~?' YxG8dV`yYnDj=3S6,.w ,s6!LmaO!rX+y w6/QspzJa<]B DD =B]D+AP oCnXn+BG1T<DP^i *@DUDrq|/{u[xAD 6+PbQ:OJ* R-Te@s%F#Gxuze`  @K3uqOGF;uQ#\|n[|4]7|eY]/ M |!<1K KwB!DrAt@z3>P+5PbW|M hRn]'v6/P@\fH.|'x : -MKH{y #n"i sPzdPJ5*l~Y9[%dBN*~ #w|N4O&~48ild`1+{EE+ T-ݏ\P */` 2U A CHq'` &1԰֮ _ $"c X߫UD1sGP K Fk   Ul£ [DL+&0 31+!O1֌?%d  %#IKOgN : f XM}kAH׬| K(/x/6q3o4_ eM9H׷ҟ+$95"U&s =jT=! uC֣E2k֝|#>3J, 2>30n;Ы68*;&pnP :8= R uzjw+U DuHVϜj?T'3 ,y.LsVVԗ!ޯ3@zz  61! N !   WWnnoވ#ϛ9! +&$) unEQ-#;DW G$ 8$  R 6ٗϣ~:߈[| T' !>{  N")}1 V`   1  0 .\ WQk̙اO`e3 k"^ FrBL ?H    m1 [X[ pXR,b\}; u*'  lk Z;4Q+  ` s ] s  ,nr +Bmt% .B,gg>ޥDEC] f`J o_=. r   FW[YF,T&ٖ@^>J C# # 0a&ExX1 ^ b ^ W W X )xܓp NB,0 ?xH$NY eeW{}~ 1 3  CA5x3 :!!egm').= <c8 {)} ; 0rh)ôKC#!q(."`ڌՈm?1 [q'% %.r0 {:!!kf`rgݹQ$݀27-J,3'fR^Іw.#o$%!/$2 "o=&*')+# "D nx4op%aO3>?,.$dT>x84p%"131*>;p-#E%{6}8,H* +-Ȫ^šKne=(3V=H429 Q8m"%I+)! D' ,$30,&k B_ 0mh)z3O3P4!/' 't;܎؋Ե8C! !'&eX@DrB!()q(m#h&^ǭ[ ׼ܙ #'(H*%@ [T=2'X|FH 4kA xdUBeL  QIw -Vp=xWHXyn   Q %nVvZ.( %FOIpd}B m,,Wl$K@@q% hgI pkWh'F dAI&gGE/=>8F@@DvddnP<<!IcnG#Y7+'::SJ9-`./7Z&3<nP^WdTIkf!)p8{  5"XQaW!ss9bY~ERxT%gyf 7O}E|m; ;  :01Gky zW8/R)_VXm,mX%9,w,,BX,S$Ep-! "#:b693tQ>>Y Nz" 09hhVu6ψZ *46.m#f1 }i 9E#S^ p%q'o$7XRuoDrM : !p&F'("^ ح)¤J$8 1YAPIU;%+l?CtEmr&X11+!x e=G)/R #,N217,[ixDz-GEWz1BXRT_Iw6Y ͘޼e(24u.*%O 1[h(--./2(mw͑c˸ɶ &F=!1-AbNOD2FmůkÝγ g %.0+ ?SDLܹ F2(/1<0{(y mcм`{ V/>kHKHH=,'e0ˇ-jӐ;Z*w7*/ 1)|1\1+x1X2,I%A;:2%j!u !;4$AYEGvC8U(Gޚӭ!&)&~| zX&-/?,$Z OKK _Ff%5c?BA9-H qC HT 3EJ >[a  n'۳+ʇg1 F&/$3y2*" 'rstu"O&},-T~[  a +$uGߏڋԎ؏ڿ C#%C($!&_7NQg.[ wb!>x>.6h(s G | wMPzjN,r s c6  k)@Cj9aj ,ccfS+W ^ w H}fn]&SX N{(#auFk} w O|hW H 6s 3 A({#HEfs LN7 1 B#L }~AAX  K G \ S_DZ.` G k!@>VAG  n/vp\ r r S#'Wm=(}+B[| pTRzL1 3 H  s q k=8wBB)=B\   [g LI7}tE vMz Ai1N@#mm5is=^ 7e 'dDXZ ,%8 gH{!`+ V)xdN `E,= CpP0%X,J1qf< +v ASBo"B YCL5~I{+(Hs  ;\s=tA!u_iVh:< 3  r .5} MȈИMe*2u-] ORSW  YSI VLQ hg QLO^ fbW;vȱŲ l!LV*; f{q@H0!?xPg P O+.0!GG?8 _78  8WG@wN=xXp@p($w*0 70PaA "'  H(X(7 $+P4+_8hhWXpG 7P/ ˰8.^1?8(#GPgp"G?8 טo+4.0xG0EC9D"hG "o_7U/_'8 (ȼG$=/#G g `pp7B  hX?_4_9)'X g g  5gH_7C/27$0"07ܧg` Xp#+- 8`_/*6G-80hO)?&x9$W;)x `` 54I\ ew1t+\ Fbm#l g$l YQXWTɳ <"&7<`z4V*X)Ñܤ#&# m"E f\EMk+%m#gNQQY˵(ġI?Rf>VJp%"1`AV WNWE ` .+m#f\ \ @ :{ݐ́Ƶԉ }8;Q61 +IyCܾߣ A H* =wv# !&%B ֐ۊӃ|'%5!03811 . ӝiݼZ'G(^ !v/ $\ f!!#/a8שvD720D10q(M5)] sbֽ>FjX!0p%7 !s[*3,$)$~ Xa{†$E77T1/5 =ڛ5Ɉ@ w6u.f)U)C [3"c4p1-|%*%EmgħX{I"7H<7H(^ `ӧёCE(+)>) pcej8 ނ  U)-,!#j$" Ź q4$0GP5+*)oL" OR!!, (gu' !# ںZ)b0G)D$(#mCN `:4 M!$\ 52  ]rdSa !qS aNt=GqZ|sI,np eR<|| 5K6Wc11|SU~s4AX _!ZQ9IORsl\gbWj7Rav44`V~4,#`S\RB BP8^~: =cD+R 4_X\3A\ }]amaw> aREz!& Y)Y>ik&l[V+ >`;_9mJ5A~^#VO:"w3=TzL6 ,~ i IEn4%{JVWIG5z4<%tD^|E \0=QiI'@; mSJa K`y3X/,YkK.5B|lg#vG-BkBM"+H5 Ym 28D(Xea]P;}Dm87C&1[&Tt4J~T5 vt6c`55  ^QEh5A)Mx;i,Y& 0%& O Jv,VN`dqM6  [SKov' ?2 , l =1 ©5>M[=x#**X((!= RnH^ #G('f&"CDW[5h#'#A > @gܰSw @SG){57"1(r)B!:۷ = W)e-( iixA $(H*& \ dٴрϻ-ǽN3 k2361r)r) Hَ؍>XI+-%h >?l!'++"n +޹ذT-ȔCg)G)r*{5+m#;] .>:ۚr66F'# }OEq !!$wI7ָ؅Km w>), 9 oDleYg +Lr} b!:2 {> /HI(j+66x!Iiؕ@l 1 ~ssMV 6%>e,g=^Юtܨeek0C#ea] ~G i݄ B"D$;  2^&\ &:fkP0S"֎>%'\ AfY3.(<\3 -8kL`.Ww] QQ=rdC aztxn1 = 4|n r 59 r  0n d##1if$a6 mN`S{++y.YX!5lA (K+tuttR\sD%@0m3tc{Ve`e'RP|rD!'x   ;AeIz={iEFM{,>lTA(,mWm,h'W+B>k$i&r n.i KS< {L! ^  m"c>C ]  n}dQ|>m 2p+A  3 1 "F?2%YNR`V  dcqt4x0;:O c >Wd)wE7vQ* 7\ K} v4{~N&@YG s  G "KfLXF  }<W n)-J r H ~B8hc   F6w9Rf!axnNVK _Vsak 7 R,er 1 zO  B=p6ih   0Oh gLJJXYN7@k=rP8>i!^&RPP3K^WrO^ Ek|G& ^Y's__ 4n^wRhoDNEAVOfbuzTJ%wu3,a)!LPPUw+f s;0fm7x]q}@5fVgzSoaPbo.a#z&iDd )0iE w4rV iW<dPEfsz8]e 3>!nV wJ?C,qQeX;vAVk+J5 > +_={h%iI|2J7Ii9_#91D/}hP - iSR.mk 4 3#~5<D]Ju!+1}ckAM |$!^K`ob~O64CLJ%Er#z ^fgJ"SWT g{wVf] oYmK5rrzz C#{`o5 ZQe\J5. `,=_ /z!YYsC;  {`e' 4;vX\6O^5&caSS+W,YXWXW'XC8}SR"1 5< .V3 T3 i U$(w,W ^  ^ Vї:2 a;ka  MsHs&V c .uNW3   Cv0 #h&8] !FHQ);h;srMW<l p% :wN2`b֕A  r*H*%)1^xUDY`j"IGjs #%()!;[SmC3 үBXgr*/t+%ACI = #}8"Tl *&D$p&;a2 )H040B!#q'!0K.-9gܷHH(g YpDD!.m""0l!$S Uݵi5jW&q'%t+? njH)6 m"\  Gܞ|;* Y~o`a+~)|wMM. a V|$, 1  .+$|MDjv)W '3  HcJg\  g`+vO  r  iWM!2m0>߉ Vu#0aw,-4+Q X X c\ 0 nX ,=Wna;k( .  dx_}i!yC6b8bf:'[~]+Em!}lC>vB}&4vw lP5Hf4`B9-Ju3&%=:3y0v>Ii~I>i TJJVdL; BS@i'g mQKbN> pP Js} 'J<jk{:v^~>FANOeLS~}V5StfS'ON# V>p>V#mS`[T+[=mI!Wf^NO-sR#r f & E^+0~ (yt*J <$ g& N ;5)(v]  VhJ ԏ>#z$'?n" [=' &'SQ \ f ~xROV)XY q$ӡ!a %": 7 ^\$ dPC B0g6S>W1 1 Fh|$f 7߻~*gV j G K   H h&di] 6  "5<'|VBk*MFپF'<" QOE|$uB  1 |tMz a +!VL})Lפ}5sk]  74("0I QW0);0   ?  Wk'>#=WV hmQ3] n   p8yI'Vd  q $h1 [$SxOWYp s2 4xc 1 Rg|=)),CAAVBXA)d0WI ~h@3kEH  2  I'f/uE[.V>4V 9,Kl6h9 H  B4$y;5 n G 2 X7+hIkkVJt}hIBKj,\ (  2  v~Rfx[r S  eXJ&4a_\_,SD9dbX h w>  ] uA|S[ \  XV)8'3TNd r wh N^9mH u3  BF ~n. +kN}"cYu $(Z6+ u E,dQQ|+nF 9<~kn h\@@0 2 5LnnS}~& q ~f|)R-B CC,&=Qx/Wq K!'M$03 FL ~vm-p3J C\ ek@h&F|) o= & 6& o8xV  ^   >$< [{!=i+Xm#ydx   0G BuL<\  nF}|QR/*~Ob|0Q)/4=hl  a R}ay$ ~&g W u 0B=|NfE= j 8x [V+m$)X[   3 .1 xc3  ^ WSh;++CEr o]\xxfl0 |#1An  bn0_^ 4  )c~>  50[R7RF6 )L0N] [3 a3 6-xsoE`0f] \ x$W ^ \ 3 Q" = U0Vq)" " Q. '1 1 X&R6av$xVV,003 ] 3 5 OH& U4b} M~))Va"`0Tw=n 'N_cSB+  ^ = s +5 g= ݿY-.`.W k abQIS)-,VSX1 [Qs$',1 .. )S8:k K[ ,G:I!\ X')'. $wW V (BgG% acc7% 'w8 g%L# 4(tK,O4\kwG |ThS d O+pH0'H/T! C!.%z ݨDK7#?/[oPpO {4# C|{O c |d|?,t|_w[(L9 @ո7&6# p۴T!W$pd g /Twk [pKw$3G _ k + h,к?[C *P@,@C ?&9#X7ۨ0Dw Og 0?W?G@gx (x7w*OF_P8HO 47Gpɐ0'_9w(WX'a? w@OOxLjg.%I`Pگ ;71Xܐ(ɀ?W2w3oo/GO G >q00 g?xGG _Pç0'PD+(5B 7G? .?A8p_' /' 8 @h 0` :+ +(;s5Tx0 Ty/t5tTy fK6Pbd$Bt+] 1PRu0]tsn >Imm:-f rJrn1w(GC<D, 5r*<ry aJ.*}N0}Jw&eP |p3 {tL {b5>%Ngp>G*WpU#tY}>p#bPGCYg##^ a ZYL Z[ gg ~=# ]ZWoV*-#QPy^H ;m 3,7V~# 5F# }5' RIL ZePj'U )  nf+I9 N "w[q(Zb7cQJWR 9m /3 54O6JG[' 'K,OI 5#r  /E0=. S6 z _| Sp{ /W+/ 0pK?pcS 7_'t#T4p+g'Cdpwt35s v' {/3m kAuF4OwG /"F f/-( C ?( +3XT8p'$,tW k3gd0 wL3 C  TU_G qJ u OigS1/!USC xJBbm# KC? 5  ? 0SH :} OU B}IM kzCUQFU"K0 d xW} ?wp w~5 oi{^elOJ4-DI M4<?( X} Sha7KDU 4 |Y'V- H1IxW tYsL~FC:ufWWx JG)G"$8=Z  A\3"~mk !ro(FSc}vpcX 7pVl!0toj^g( |.4hh pp,,pK:#C;J> *4 tGESEm_)_}uygq f^Lgh)/X dFk+3 D-i$ !8  G YU,1+Q=$  R\\2Z5L'y6- m( } % 3WMN~@rPQ g  E[^k yc)- jf bLPtY1v;k7#Qw (^s LUvXp J1UGNJ(Q_#nsRo  JyHJ!s 3 dtHU}YG=s 5Z}|0\U!l i s#v /P :$CZLt/dw|o-GJV's$*d ZNt n  94DpmF|H$- lUCPUg=F `N 1#'mc+iO_x /  4 m9qyy :}!N'ooG LY'lkfz7&YH^  dLwSIbt6B5,YQ\-EI}>LLL <u;  8  s% ,43}:gFx t< F IM)hv,nv!7MECUm 5 '`7=+Y DP, zn %W%KnK5x0Iv1  K*'o5Zg +NnK~w&ic-AH{8juhHN4 S L pi`:6[d}C$e{5E`abYfs'wwn ` / t )>[Ih\B-VD U9x]KOX,(bPtonI. w +>S@/<4 } DD615^'X]KG#' h]RB  6 wz #_\JRqfAL:=='10eurq { W U , eV5SIo~|1"E@E~g^^xs+AwJB:p,LtP=@" |^;P 1 I # XRIUA7)Gt 7 #'nNw4YPx,8S1h('-.: },WobkyY,15:5 YkgPkG5b1uQC}k)]/]xtT,b}k_} kG}k=]NKj$B33 h}   3. (~^/ @1o)mz y5 aslemaw (;B[#MY 3L}UT\~n} ?R[4 L \y8 ? 1` vG{$ 7 '.DM-%<;X:i! z}[`@BG3 sTQ+F_BN+SfO y`!Mvbqd&^'fYKogx1Lj;kBPuK,f(9BDbtHsiucY&}yUlC :25wYY844|0Tk?7w{W[7c;{?Ӏو/ ?dH  g w{@?O x?c +7̻݇tCp#X  ;TLg tt 4dd+/ . x7Ԡ(`P"W27._'7_hp Pp XW?wo7x!g%(#?g /ݰ(ɀxP4;p5-fGܧ/ kC w[l k$%G$ WpΌĽc([:+=63) #??;C cL&:A{'gX &)'4 g oG7<Ľߘ?2k?S<32#(hޠXW," !c '4K\8cc4$(*c& D.Y&͟Lk2#?O=G6$G[TWP\׼ڰ$k | #'C 8L4,";')3)!O L|ó4ؔ3:_91 G cX30?Tzg !o(sGt@7L#;'S*'!Oc`ă,gC.34."OL? dۨ07 `7gc {KF!k$$,"#'Lߜ٬P0;Gp#&# @ [c W  #{[4/;?ncb  y kr@M {wYZ~g5U(0 1  =E6:BE ~R'Vwx ,f!vp8%G<_-Gt 4Y9 0`'{U  #v2]L5Cd4Hxpy|*_*I&O45R.uCGtv}<V-2p p :<TQ~8#666--g1:G:Pk1HH~lP#6gUb&IKu;3 ?@W72,P$3H1g }}_m%+,b?A(X[? < ,\ X{#  d T48 s[#8g[  |Tk k @(cܣ0L$(#[ u/3< ??K/ gHtd   Br ># =OA0(dm O} ;K'S3,$:<&;'0- n 0J , C ? ?d # k ' {]e{LY  j  d /.e V#!e  Kemu\YTDET7k 4Fk|8 g+`r)/A5 ' } 5  /]u?TDg:1d >, < dS+$i<*85 R  <  e!Q@}jrc~3 } > J6W;me` ! C  [<<(,7p3t d [3SXp<  SkWDP?k G d  T ? < # [_Gدݛ8\?` PG$XhW7W  d < tLd L #  k ;p[(tܔ` [:@C 3g`p#H|0  L Xx` ? G 3352W2π__ OP,/ ePp 7(0 gP"G?@OF;_01o@h'8 $_Gx((o?  g%0pݶfeX%:)BFnJ1(i" st+͸ G$)x 2u  z#*Y%%&$"N`Ɛ B(4K@LLLR<6# ԥҤ׿N'$+#W(m#9SaWW(.30S 4^$yϽJ#;K"" 9 :8Uwv  pL `  ]i[)y-yUwAw>Q g / U>kwFpIS5 ` n  IZ'wqyk7=$  s `  &py`$HODU [ ? R { JT5rhMr ( o&zc6nTWAI)u U%?ue} < N  =]!; m w98O p uRD^Hp / F eIbtCQz;-PB@lH9Y>w'P5ZgK>PgoT)9AG{~(IO~%1|y 8 lu:g^[uT%tb8Tw R49` ,cE +2]-#7tY%} s\I[U(;Vu{*< :b  DL1-R "pf|^ Jj,D}Y{Q {0F=`;k e A8Jn:r>wA M<#d!d3"G 5  P9o!Kb:)Y  .c+v *   (xlgY%9+hcw  3?G?p \ <  \ oT{_'x g;SpWO s;xp3;7\ ss(c0K ?D+tW|TЫB&kG s O[kdG{PGGk'KG 7sD7@+zKC o vg' ` $6GnW&jbGbuM2HCt 9 G#YEt>{]7h/{DJ)r!<*k55*}O>P:L:* W)d'.s [ vSXe)o(#Z 8 rf* `] SwL_k kr^jtK8}>:%P};y(k7C1RQdpl o-^<>1yyuC r,nJP@>!| ?  g  L)WN}:ro1 K \ =5 v X k luMGP?8w8 (_ g  C 4 '#?X/ ? ?, wO3K # PZ=YG>4N d qvQk }Y5Nbp4N/V K)1*b <>0G#G!^bW]oJrN o"^@T7E}`#jb<\L#m!E.t59vGKE% o@&bbr{bwer 0m,d`3B} dN5Wr'z*G+dNa#MRk>v^[4DvV7I"@&XUbfo0gb]GT9}ot:a`%qyS8Li8["abZf ]1ZtK* :a]Gyo1t ,( 71zct d,Oxk k$PPk,'|#< xK`W_  oOcK_8`|43 $ wOG/Ogs  C< [G   k[ 4wHѴOS3o, X,P+I`PX38C,  W+/g < C gH  x ބ\Cݜ t4?8 ,@ُ+',&$? c|!q sXG7 WPW0oWpO/ph0؟7?>JgŠظ' W2,_'7X `֟ o,W)G$G7Ghp7(&/(9 5 P o8 7oG0ڨh0Ȁ'9H G(0;?8$(XHg $% hXwG +wWg P? x Wgfh>U,0x%,4p{;Ċ#k<,S*c&4X WT8 `   P`+[4&(o,37Ubz? .Q/3gݧ؀(#WDg./ހH( gw8)(#p XX`70):"'(0A"TDl(p##D cWd P'pc|TgX 3lk#), P1[(cC?-^!i+k? k 0dDlp'Xph[wG< Pk#o SC` LڄT/p#T;@WW7C, k \ 7  p7pGٴG 04G7|[7  L(<pDh[ SS(0@  I^bWLkܫ3` dԈ pcS4_7c \wp?o@ ` Ksgp|L xh(FXns Sc[|? @/#d {? c/ (<, ,?Pkks7l8 |<  # pw4H`,k3wP;  dI Sk ,@ _08  GPK C  L|\K 4?o$'88׌{? /  D2ppkoG7X+o |[ wc@L(ۘS 3oD8_7(\4o^ s+w ^`"W x$rt)x;%P31 ? Uy 8 q&W[![E6clpyCx!Cn+tEh  gpe  iVcg `ek > R ?,w//kd,@V}7|^ { (w71 ! Ur.! /AX 0N eye~Ptp#HZ_Y6^ 1[v lslu1  rXL} c|hV QA]G4">|>+6>Yf!] feT?;xm * J KGv<i n`|,uE{EdM^^ !W  eJd?kU - ^4Xty-wU>`z`4k#]JA$Hi*v L5 K1Zvh?^ D6R1='|O]ZdZDDBQ-d!RY@94n]G}D:Vi NPNSXn!N[ [  vr FN>WV-`1yn %48<k3|N3%7L#P>W< *h9|njG>y#pbt&k`3.dGej4P}EdRk9.Z_0j'#(5o5#,k:5GYLq51K#] bl`\<_vB}N7NYRJr9(b#5fND9Y,K& f\i@ EJAeC 19'/GjPn{(t}xU ys5~,X1&iCYrlmg*iAn);LiJ9i.$na>  i55;F9HDkK0wYaU y  v mEA ", j FG  fNTk * \ J ` R YOsOOVHs~0#G k  |G+Ok ` G p4` xx< s[;|Spk \<;7k  S hh[# C4dP{ 8 < o/WP{p(ۧ7,_? x! +c4W`+O@d ,_Xo0dc4D {O W7g xc#lz~< 4` 8  (CpCW  ';k<;PPc7X` o x _u[xUA f2;Jq* d %+Lg FSi}PSvk o  ;\T"> 4mF ;4mfEZv.>' v g  k ,ZX;{g;} ^.Y}{iA$*!D; ! +;/2_   %h28u 1-< EgBR7!Ew6$B~}'>>)(/< Hn+ J #PDd:MS C[Q  )mS[ -d>Hkp8  9ih[}  ` sy"9y  # voA[KR* " g n X|B/{dT ]]/ufF^_S  [ #+'_i r 1  fy Y\j<j,Y-#k'ai[5t0ECg|&KWk$/Wu2 9fxo%!!`EdKTV /0a5G(s0U,g QHp]P^bG't5UL1pk}Gz:P>=f,A`#{Lbron-/F3d]/S5.PooGtQ8S>0IY#NkhF8 Z #^Wr<{*KkNb^Wvp5l5L ^,T#k5>Gy^>Cff5b @Pg8GkMwp pTt 0n^'BG xk gDgUxPkGK((,,BNyT]](:1xk$YLbp(G0 OGbU}kPD06tp5DL->iPGPG U##b/M5mk|s+ Pxy't,[sG=`P 9bT}3|gfoko>>>oKgxPF!Pf_T0'#Z>B'fx:]T7`)Ws/7X9:^Y'Q`mG  1gx , Lj;\m48I WIsy o{i`x'0]L dbBb5a=I5 < &L$3oj7_yS  [M#YQB'ynkatN  C->55t=nm$)Za:TRsf!_$'ZfHGX>: } f<hS.pkLy:|=knwTV%PJ`7[t7{|A3<(۸kg | # ++ G,\lw##$[+S@C ,X+?KC  #ܔx/8 ?w  o (X o@ٯ݄OCCX8dp0 XW?7 t Ps[4$t w[ |8 pߔBJ= K5Y} J [0 |N  I` $4p:zt fd1  x^Lc/E3Y  T r @X  y T' 4$INgLLM%|U}]Bzn? g 8 k/ Oc/A7  lv >b  Ho6X>*tj8 N R  ? q;YV G MA[?uA  WO:L~-bGQ+l"c3o!{)f8&53ZjL30&4 G +cr@h v #  N - 9U# J"4VKJk?   Z}VhK6u&bD> p / R e_OPB 2;y`W :Q8C &U <?*L)U [ v ` - K\mzDgP#(T|Yow3ExJ;mb{B i W i A-b8o(VE k g ^ Orl0> Lx]w=H6s B b SH FHvL4G 1 E ^ K9={TWJG 94>}&/J+yQ(s,c afg;=!GC[^Uy-U %ybFz"7P55 j>; #"9 0U#1|8/(~ %T>so m]P-v7 ? ,^ 2 # G a]jFI G Gh=d[q +1Pt(xv",GfP'w#  ?#O_Pf"%mK{Sift r@O,VS_gKJ*@*utL>tyD"SP[5rJ! E*v9@k%U[#  /*L`g ; J<En*e'}, 8>K1d#!@<&^ttr8Sv\0%tICN#N5@Y.!(bSyf`fWAU((g##k#Lpk##G#GL(, (4c[#-w ? r.h$ K* AcbX =nCwPs\CPqY ctGP(:i}JR5 zA@&q/iik6 !5q/wQiT|o< m'E>:R'%V]I55bG6G59:=bD#)}pxa.ZG95eh bk51}UE0TG#tA|k-f Ct-t>a,YR=o&5M*! E Xip;py> G5 /p VP5UpiyQqEr5bqtpB ,xY F@Z I'#6 '; )}f; NVt0` cJG * 7=')Yt `>S uC Nj<V 4 pnCY[(Z#WBnc^CVV5x:8H:WL oPQF^'g5}9(>.t5PP,kT9_[^;Y,9GsY[LLC:oT>>)FPSUL,tkgxuq[[Q:Pk%} /Y:ZV.z7"[!-17Sd(? _DGkd{ ,O3w Oh,G _4_4ӧ߫#{t)koN_/ L` C P8<p X# kk?k`0(,џ  # &%7hD]c ?,G;cC/ T  ' ? Wt# |wS@XCpC`o%O+L|g | @ # # G #P|G {SD,h\  ttS ` 88w0wټ7 $ 8 ,[#_s~ s SCsp#[#KW kkKK?4[c$ 'P ?# \ p@s/k_'3t 07? d, p gS+{t//7ʣCx{7gݴ d3P((<   Ht kC gP#o ( #'pKW#HӴ( (ۋݣ g _^ } K zrxY7} g:FH>>t U[GImj n c[R\c޲! 4 a.v.  I0\lwN j c6  5 )=i E yt1L43mLJt~ݎo ?p7o#{L x_7KC8 L H`  tO g\p,PTkgtF p >(  ;{xPfC s=HH Pu Op >* U 3V<  ]#A Cy7e,b`dP0{%g Z![7oD& A&YukY5L>-5nJ3Ee2F"J=WG"?`f##[ gCP(5GQC%0^t}kUfB0o[NKtgnvnM:`381O y^bL>,:$GPf6_I}K/-,+b:1#]XK]ybkb-,:KtoxF55. IRH[H@:@{0qX}*9gNouoWNC(gUrECN\EgiE@C*t84 f`3L1`>N{@iE}PE,8yA5[tnttN}Lq; `J%|gS{dadR=n$>G5Bw9+Wvv 6k]RXR8hSw|BK!=9=9EiE"@ _nS"qW}i1y zOO Nc{u3% w.%?L.L3 g;*6y~ gIE^#4_ Md$\3U4]~8/Z=PuL|(4/C7SoZo"[+'M$D;Q 2H(q%5m`(7^mF/T?*A$DVgCm\w"2 3`HSzot:sx^ At0>WbZtSb=C:DyPL(}|\Oh{reI,4WH>N!0B*%!{m<kn<8]m:L>A5,G L/rYx5( !>\y]n8GYE t\qBj~McyYk-^CGB.P+k n"vb`q'X a/ [ n ! Wl-Gb,QuML~Z  )G [I&J>=!0K \ d 8*@b y N$ZBeTDL 5 ' XeQSDH`} Y  Lk 8\8d",i eZiCJ- ` B41 UVs$0a  y 9b}#-UGrr|4kSH"Ve D>""+o , 9|gy5B,:b1's DZ& /    Wl~+ { 5 xSAvlQb>o,G,gU,FwSarm}:B y y 4\p(B  .V# B( Kr]|r|G n w - A&$g&G fv?cj>k@sSRH8D@{YY  ` 6 ^ + + QD ^ 5 X HgCtT5t>#>< vwX9 Okg ^ : G Z{M X/ 2Z} KpY8 3#wmD axtfP  > Jv5vHY iR;d tPb(mf4jwYyt^,>|q;c iR'r@ BeRGHzT9'r reg>i{{0{ Zu[<}UIt.EKk0r]!U3t#bJyYKTO@ & C? /n 5D5Z="o G Pmt}A :5 kNM9&b= Lq KTrMFY s - 9G oF:E  pFmy 'MzF1`HqI5K  p XKs=H8S%X\]\U|b$u>h2\#y B^DFC 5 1f!e:,1#b >@ !T~= o;kb|g/>PkM"B+# kK:U>D(bou>wY-*}UP_15wJt|UYQ%}kpt F:V1VbK$9 bB < oisJMB* ? !}gk O!?4 R%C J YI-A P&+Qb8q7 PBY V#4P# < k sg 4@ڤWp [DW?OT[ ? c, 7txC  ex ,Xdݯ pۄ֐< !d/dl Ls[ og( T #;GG | [ {Sp8׼@# 6; "3 83Cp(D+xsStG CLX\ ?[ g  [70ٸhxT3S| Cg OU#|B mf4Y mCTGt  i)3ߘg;; Ui(enOw3GLE 5)  > |k GGXGw)4 Z~_4<o3W pu UYC;gy#Y { \?A(c*0*'Ihd`CmR T  MO7nDrY(!} UXVh Z\*SKt5 d f #Yoo/r% & '^yu  P MSFMlxb  [ +I,nT# W^}  ` Px8C9` 7+t,rcm ^oxTB8 >kB   xz!c'#߷oy=  Bo }Id SMK3a8wfP GAd_W 57>o=i+Kx[^ #LGA3tMez(_j:"U *%KE9{]3!pN~>|)E*Pf ]}k7Ekk{{!SGpHg`/w0KUmB} 3z DN701Y8`%y*ekgtx^t/^9]8J `1G#VI(#xb&s:yb?$Y>T,T?g|:,y[>XR#LpHPP4,-9V*]P,r-t C B"'#(['1rqAs%~p>^ZsJ*7+7*G jP%wR iyx)n@^ ( `Y9Gv, qH3x MpLyOHU8l6qNVKBQ/M/dMGt^NB -u(tcK|d@Li6rzdPFH POTc,T5GG},d#zo}KL0zWN4:tabP|_15 } ,U6TP:>15Kl;b7=]mf]Af*}mCdizpO7W@#b *iRYK,ML]o]9 pb:g5b( ,J05}g,T$)R%-g}gyWPl(hB = 3;E)jF'j`,}s42 Y  e{c&9!_Zd|M9# ,1yS[-U_7^KK M5HLrT 9uo ]# =J$]I   iaE(PE+a9w[{U>D>Gi^ -  [\zva5t>   [MX-QLgS-:PB } J!# d U\BOM+j6 /+ U0 W[Ixf,*r8@JPp4_H~RbjU C 8 * +MjLMeg  ' :bLE! oY'~u5MJq *  G %SD2& I!P4{w[# w-XR^8gA# ( SWke2fmI g [B"1[MmQ%2 -5v| e | +*|&Odj0IS {!Q5:#!5  Me"F>yyktL. o? C UU(.<+eDfYw5b0t,Q7_,0 v.. k)9i2BAy b* 4=D\<%?F(r *T4+>^z2Fokx p aOt$1m[7u, 7<iiIMcC8Rx5k, =\6B  # iYOf#bguOw~c??^1P] GkC( f NC1-o J B : *CE\KrA"l1 5b,#L1(C5fkooP(GWM!T$z r &Hz@Nm -'U _HH)~1-pexGt]F, wDJ`R{i = N i   U81{gP  y $ pKgd TPeAf5k'By\J^ N _ICS+`p X]XL u(P^'s"}Z1Jf; 'XIwZ\*r <  :*q&"m{,  sd.pKGk ~QchR;[ux & } ?1s]{wt?B 3  v0Dd b}0Zb`- L] Y Ed  & 0JtF#7SI4K4<S{E`2Ra-  /S|x  3iBf0xQqS ! Bn ,JCmB$XReIt !  `  BQBNXT;; 9gQe3A/tk!`3eGT!N VV0T 3} T<   ~zfWo_1A:p;w C 4g&t53a{UloC  0\ ]cG,iIIaS~T Y!ZQ  HY-PGYG\<%b_LJo)IS!tUJ}^ ()5}d?\o#1K %K<>FB.SE$~Caf1cP5PS+me} BfVkgWAc4. &!9t "P9Y#y%F}:Pbx^GzfkK4`[N,9B9 U)>ob|0X]t}fxk+#,tK>A5'3e p*s.Aa5,x/BR[9]<\3ABd`*A  PWUbPEB8nbd#P/6pb/ rNx*[<oxS/G55K>  !M+BSh F\*O5Jm`OlN6 |cmW;]. Hq*\l$,kCjsI/,Zj'} nq3xU m'Emnkg3Z%cX/+Lx;k&*S,Rj !g@,D!p#S$<:4D .SLuO 2HKVe;=%y4>OsszDvOw@[|>S0VA]=,a1o4kov!~$=R"WZx{Qdpe-h :Q%Wm+AH&LJ90H)RWj%3(1yUnVD\hz=2+yaK#r_pp(p}}kkR{XM'N3uW& /1 <gXsm  >C.hc/CX Y0bSB[lmE"Sd E +nw 1 8 +]P6 e }xP*2j% ,S`Q5lg[ttQ>AdU fA! 4c  r]o;.y >7#U5HW}'(jz(=?p;snbq1dlP0Pp seLUc:Z=N}:dk|t}tb''n|CToK>b{;b@k5}'X#Y'1UQ@w$ / 5A` ,(YYG,b L1y5t kTqw[T%,7roW=,|1z',1}sMCo_ft, Y,>q>bOLUU ;>0z y( C8 < zqeqI\Ntp#l4-moWeP^N=dU;4eS%#P}:\#rzPo#o6T_P}N%wq=CY 1}~MF'ppQt6$Y#5|#K##s]<L]T, x^PWh5tyb09G5oU},GK}A5tlx5%]#^*"1\q1fxT}Jc. N)Lvf YO P/[!PE:I\i{#i/8y3ZWB3KP"3W`d WJu*aFU(*`@&IG*BB/J0\r/AR\*G^$(q'YU`SU V~Kox/f~!OVqk!|F ";Cm*7p(3dmliM%9:#GSDIFp 9A&r`m ^ crvr'oZJ$seL[t d0s7[qwCFd,l7,kg8"d ^mz \[IBX"fm0oHN .u6J[DdIekjVH}(%eB vV 4?Mi/F//mq. S%X! S/VZ'1)Q jM[g1 HAScIpm6FZp`ZZii5$8 (g#z 9NX;([(B+qdw_q?Lg ' D T/ -5z$^ph|.p,-e;bE(Ex O\DUX;KHKp/|K9WA9jXu+%>QM&Z5N<S#f<HK]1>#^T#WK[U c`0W-856 &vmQZ;Y#S111%d}[I\'Q22pdr4~xD%B:BgcBtipB37i9>K)tE<*L;pn},cpBTO* VYu4`-19{)mTJ<W>* ~Zs?nG76:U`r8B8zN?\u'3KMD k]Qd<'<;x a9}&% jpN=#`m)LRO#^7Os8= 4}&X.1 %`<H=c|a=@gG*2txu3di=@7 YK"_BYNdV6_-jwek EK b6mN-N/jfa2#zmA\9or=;ZW/R2-t,ZzKc]:/ M}s@gg0&I@x_@Fa' nMMv3%f:%bQ80/`TnDQP34+q.mCI^|P*|^OzA=HI+N/"?`JE!:aM-DT*5FR'lAyHK"D+M%H=i5]RHQsI-q1"40!oi[q&!Ww^F0IB@Ly6hF HBwF#XvBpDh-JM0w2#BX#'W~;Nfmwpmo=*?X<E9`d,J\}LDggB3vLNh## ^3r];#>jX*! >LB9jtyj'IB?{AIu>S\9Kj<e5c}?vQ&;l./-k"B ^O6U'.c Z=Cjd~ M w<LZW2I Gpt #1#z0'q>9FgcH`YW?,MyE!dQ8pocketsphinx-5prealpha/test/data/wsj/test-hub4-n800-fwdtree.match0000664000175000017500000000142112504317077022054 00000000000000at any need to need for international managers will keep rise (n800_440c0201 -49565) the company has five hundred japanese managers have received most of them in key positions in expects the number to rise sixty %percent of the next five years (n800_440c0202 -91117) about half of these managers are in the u. s. (n800_440c0203 -33870) r. l. i. corporation a jury illinois based insurance holding company will begin trading friday on the big board under the symbol r. l. i. (n800_440c0204 -97451) a company previously traded over the counter (n800_440c0205 -37088) two other issues began trading recently on the big board (n800_440c0206 -42394) the agency is unlikely to take any action until the union's rank and file puts on the contract in two to three weeks (n800_440c0207 -69401) pocketsphinx-5prealpha/test/data/wsj/test5k.n800.ctl0000664000175000017500000000014212504317077017504 00000000000000n800_440c0201 n800_440c0202 n800_440c0203 n800_440c0204 n800_440c0205 n800_440c0206 n800_440c0207 pocketsphinx-5prealpha/test/data/wsj/444c0201.mfc0000664000175000017500000015157012504317077016561 000000000000004AMw#K lE:3Htm>.s?r]AY;CqkyݿWxM8?'T?lcv>tѾJ=a>oAM /?Bޑrʾ■ƿO板aڅCb=I>ĥAro{?S>/8 濘Т?,`>\B>x4?n`?>oIAcզA0|Jm\YT!%TN;{pf>Э?(6=]A`o? 4,yȿzm9>-_uAl5yP>Qx4f>>"?[w-NԟAPCB^;%B2y<"@?v>I>@>?>PpAd $GFMAI8On ڿ}c>s얽P;=7>ծt6$kAYVIiKٿHX^\?~?3>27>I˾"$ =A5XZ:[8RPi;8??7S?Ӿ->S>AN}Q[> 34>Qk ԿI`?R!E>KO=.AG@#롼o"G??8AMϮX5V 3G;>V?C>A69PO?b? a$} Y}>JSF uuAAV;vg,TJ>Z=c>Ahbbˍ7>3ZAWh=6 D辆:*|g? <y8???A?yd=jd {=ӿ%".z¡>ȏAja>">^&i<8A$ ""?\HAUwؐ&?!?p?&k=E$>ؓA)gu4XH=fV_|?X"n5w=tAH91ӿ/~>#$>s=Jf .A,_t7ճZJ&=.;OF>%Q?5ѿ T0A(Y6-Yg~0a!h>Ѡp6^&;A"57szq?\I?p<>BVA%PSixJſ킿+ʿi?S?/?/?Cg>A'KDŁ&m?V} gYY'> >2kAjj+<1$K ^*?v?"B?Ʊ>uQA&YEH Ӗ>i'?? ?K6A*q>w7[j@I${?~=ϔ<>s?+֛*VA#|w_>A>ȿQ9*:F?A?Kz?JW?P?8Arda$`O'U5?3D߾rz?!>ɼJ辌ȾʗXAQڮ`d ÿzK6>??]-?>b+AB"'>\A*>aǮ(nM/O<߾u=ef0h@A$:>fs;?ZĿ"E(,U>`>$A'˼0^Vd]j辛lB? naV>t? =0ݝAYTI?!+ooS?t,?;>IDNA C=hÜ?hzjLb* ;sp2>9A F]?9/&Ml?0+P3" [xA}m-dc4Ѿ[We >Vu`+?s>چ<A}?Y >WQ~Q>M>%ar?b ?!`yAj;>?bn=C־j ?d>A< Tu F gѿ^- \\>J_?PZFwA&WLXhH ?YJ2YLqek==>?Dž?A!2Yv3<ྜ>#av]^?>/> >(_?DAĿ"&nRUӈ!=MQ -'?͊=>GAE$x>Vi?O쿏DwӁE%?L;?[<'AA .@6{׿e;᱿d $?f>6sf>MI=_Ah?85>?5AcY?RA?>a?!eA ?<>3fhiw[?>ojT?K?ڳb>H{J='A'&ym_dZ?K>>?.>Z:A$w@%`>|4!ʿhB-y=>H=5AZ "94>M=d>|t̽¬\+`]?-pzAL62V>w!Ŀb8&뿦(u>"b?QA *sKAXڿn>h" F5ע<>?@Fz>qbG俕@<_?{>¾?pX>ǟLPAF=̶%F ֆ"`">z>??/k>*^Auyd@F"\D>$L5_^L\>M=i>9?+A,éL@+'Zx?Je?@M!>~C<>Z㑾VAfBؚ@$DR=>a?PIa*?h~?U>E[A ;?>%A*W@Z{k<U6$XanM~LG?ce> 0ؿ A.Ak@%⿈9]?d)? >_c?Jn?yz?|BAFn@??FHr$>%ȿ?ſտhtE?&x[?5A^@bvK^??9n0΃>MH%??l? NnA_"ƶ>`ٿտ֗x?ˋS7>u$=MSRARھW*t]hT=Y*.?R ?'E?G$?7ADv?2!\ꈠ= $%?(V˽KAE ? K2ؿS` R?Jƿ%ؾF?1*?">g$AZw6L!Ja'Zp㗿enžs⨽ ӿU=6}A>>pBտvtAAn>dV'>]AV2di?G$:".s ޾?L?Q `AH]{pxy3.9U_ؿ=бc?X㒽Vʾb A2q[>ῼ/w?$"?gf&H;>c.o(m$gA>2fE?.m}24?ZaWKT?!ABMཐ ?Fƿ?$6oOa bA4jL9?沾;4< >Y^оaA7>< ?(4VMp)a)O3?V?>I:EA0nϿ M2M k>i֩ɾ5LFA*, >bK>mQxs?NľfRI =A$f{?9Nb%?5>Ya39d l M?K 1>jAFA#4*>m-;E%ٌwx=>??cdqA#@%=&+}ȿ$Z%牾^[7>k=^+AQJ?` 4d:?"L 0Z>~@C)8A<8k=^i> k=T=BO=ۯġ>.XAwjF={cu[?kγ>]>ڻu^>ȍAz@=P0s?R=Y=;>'ʽAu>GxA - @si`;@ ,>A?&>5Ҷ>y;$#DB0K|@5bKp࿗B|~]׿!;/q?BJ*w ț@nͿ=A"]9δQpv:jBMtb?C^tH,U\ M(ҿBM>'lm<=ԣ쁿@Ὸze%CNBDjn-$\H¨,Ϳ4amZfYiKB6>?Ba H5#MԒoԀ`d fn>lʿB2@ݢi E?\F ?H)&&6B._@3@ٿXi;?NEl?6>y%B:@=пO(6?tZ ~?5V= B}@vٿm=_^>pҺY~,U@B@q"d.QXB/?I\}3>| ۿ /RB%{@-xyi?E[ ?%3&܍FѿB0? M¿+w?ο9R}>?̌vpt޵BCRk>) :\ a*$> 2qńҿSe8\"bBN,ۿV/-¿0=z}J-0ɿxG,BM癿˹_?"Xvwk/b9}e"y֗BP剿~Ws18߾fYE}ʿFt>QBMS¿&J@7 C}Kɼ KWB8>o1.0忷;.>2C N׿Xοk1@IjB@rt?phwFu~'qMh"cB@V ? cƣhmm?mʿf,BR@K?@N:^pϫ#OEk>_! _)$/,B@U?kzq対@LH?g9 zܿF,B1fM@JyIf;("} ĿB[n //xn{8¿g7l}bپBjQȡk})̿$𷯿ÐP⁾IBqf{K=*A˴T>U.o4> Btlک;%Uc^Ŀp(@{Q okBsG 2p"a"r&G>Ѿ)rBr<4~]C/_%7_[²僫 ¿LA?G Bo)` ;1ZFUƾQ}l3pu=?TzBiGhG0F>Mt7= 7aBENK#ÿ^ֿ@[տUN}.!BUleǡq`վğO忑&`UĿ X?4PBPq?C)ýI>>/NпO?ʰBH##?jlҔ>NAmG=T?(B7k?6"ƾy8 >䑡;=gz>?+B ᴽI?s uVJ2p󵿖)jE=En>%2Ax?@JMe% ﷿s%?!l; rAޫ?̟_>SX ZZ?#>{꿖/9uݚK`|T AF@z6PYFU?[>.^p│c/0A%@%^{_)E[A &{ [A@71z _?#ٿ  BzV|=,I!B@>opǀ>>'-󿺏ĿCs>Hi?q BxW@(k({ @?⎿7 $? >WBs(@A2$$ydS?wE=?>>K Bn@T2.>S?$ ~>*P>lo?nB @-fS>η>4?{>D<+^JJ?#~AE@SzTQ#J>hƩy1?W7+? T>ɼBٿ@B @Yuܾ|a@I/N@@X?FοJB Bp@uG0LweѾc@;@@gVBs7@b\FcϿݢξӕ:KG@C@]s@ B|4f@: eXg?zJ?ۿۄ@X@@'IcOBa:C@'N\/j@H@%@8}?:Ap¾;aB?Oo[me>e)>1?)-@3Td@/{?yA.@"JsfK 裿g>5=\_@*ar@!@:V*AŃ?텆 x'hw߬|?f@O@,MAE@taA4>F6iZ ʩ>7L.?~v?~A@ 5AA@~ڿslFK9H>[W>T޿ZHf ?eӢB"?Y?-NPPF>0=U.>!aڅd. dסB>yG% &BZ@Lז2f?ZV?ݴPZ\X.ڝ B-X@O0LKU.>XM?a^籿,>6!ۿ[#h| ?hۿP.>n-;l=b4B&'{;?JhW]?YOL#=sy?rB/ @hd/Gs0Ť'?NH@=ӵ&*IBQIʪd@ή.F(E~ J?YJi{]~kmf+BQ'Ψ%@"؜Wd{ƫ?kٿ~_L¿ x[BI(VΉ@b AR)oV|?!'OOVBHZ:@"\:0Y>oM4^ǿٍ OBH q @-З" ?F1X?PKY_3BD/@_z ˊ`J?Um`%>VB>N@7gwXM5? 3K潷'o)B#J@Pr۾ N>پMy߿{~XB0Ut(@ +I*ZKV+|IXL[ ay /B;sE@5I|?:EKsXtVHB;|>@ׁ|Sk bm? +£CmRNUB;(&@ʋ cǿD?6> xοi~ B:j@9vESriP.u?Qy>ϒTHq翕B7)@ͤQZ^@4u?a`{B5-@CQ=df^?(>C$fିXB4@QWSTyO?|[De>ȿzqῪ`^B,OL h@.g{ڿ3iK?I(߿*"qu;B? @8x@ RR.KUB3@z2L{9S6bTR@b5*.AVBgB C 8?$*ŘÝ>&"ɨyOƱW:P+BG?px O./}@Ʌۖ>(?mR#>hB3>Cy.{k U>rUMS>W*K=gaAL:?`t9R?MF^ B޳?<0辙B?.3יD%'>߁俀.>\vAn܅<;$nxjX3FKۧ$m=}>B3@ ?Y$_ki#Qt<%o>>?+B_pxq s,eQ̿= j}x_C =BcpCɿ*'g=G?~#;>>2ƾraBiڐ.+!>龺m?:A0X= fDbʿBk|_tѿC-s) ;!]Bo<ۿV%׫$ճ.*BqS 6\F\p^[2uBR,ܘBp_ +˳mLM/@ ً=\K Br1F$U#췍`>?*[ S=wc+ϾBkfoHJ銿p>-TYOJ JQ㠿BjQ>\L5%?zO)HMԿ!DBcZo vob;L?j #ƿ ;\BR,T,hd/!*x@BV>( .Ju*$dB<?5 2f qD+;Zc?&*oɿl*7 u> #B D@& AZ̿(&'KB=~yþpb.'Bmb@GY*ًϿfٿX U+ТcFAsѰ?~mB%V#clie2 AH2-ʾ =HA?(EuaePN>X?7>r6(An={Z6/?_l(?x IDj:NAH[SQ,r|ӿ`?bۿR><>MzG;?#A8׹g*ܾi `rⰵ?mg?A:s{bE>q`Vk 6 ?n>o=o8dADF <*?NJI?8?’?%?j#vA^@ ^,߫a?՗\ >*P>Ʌz3ަWpA(@ڍB?'>`cR54>LI>>Ak?SYO?/;ɒ j-ٺ?le%&Aƛ8vt0.@C>ߍN0!Uc>>5FH16?AɆ##ae@?U)VK Yk{?ȫ>HaAMGV)>TU<÷E4,KɿrR?" ?//>OA9A2q?T $?U?x[I yh>/ݿt>s B ʵA]n@BO$2K#߿ɿSZ ?>OB?@b^ vž1O.~'^$>BC%@#-&C-龡T޿N=ǽ5BJ@-0hQ++ ܷ>:տܟ0?ŤP.?)QBO @cыױ&|(5S$>?QpF!y>/յBV@O[ .񨟿D ?mS&.c?'BY;? 4ފ/ӿ߹z?HQdmtB[?v"=n 񾴄&>ih?eV/?ӾhB[>m ^Q%&+E>ϙ>-G>29?bk@u+~3#?+>;9 =(>TfB(P*O?>G?q D|ؿ 1_=CqihfB4Ks_>WYihu4oBHҪ+r?~~Mξ7þ>Vƿ>X^1yBSeQ`.%>f(>8_M'mΝBYԿ잓hDXK>F> eص>,E9 Hn@FB[geȟc?_\R>>.ͣyA`'BZ5x0kA젿?2N>K*Tɿ(ȿ(O .BYNMdRLw^}$?⿷>$տ8*"a81iBYPdWE2?>#)?om in=LBV ,jSq\C)?e T_?z^KLBlBU^g_++#~?艀 k*>ekd6J5OBS؁ h6c?>LpUͿo$K.[BQuXDS?R>T쿃%waKBOE迨+VMFH]̿yq@?uo0r*3LBFu1•<5iFnZ?nO?Ԓ/FuACB$M+Y0}wAGɿW?2UK?ZŁG>-,jV? %AF^5>x9>?a;?oOL5?%R?{AsY =ǻN?Y?zd?< =>D>~nAQ}PK?0Ob[@m>Ͽs?`h Aydb?%A1)?j?&?}ҿu<>>7>?449?SAj>_I|F@ ?ȟ 0t?6?Ŀ+r>A +tO ף:`l>~uO=_D+ ??*A ȿq}>4S$?6SV{=ĢM.?(n|?ن=r.F=k8ӓ? A~t /ڥ?`X?5=#Z>$%˿B٘ .&>ǃzA }N˿`>|쿒m#yCB& >l5Akk b<$>^CZ=>V>-?AWK|u16>u< >+? ?tAA$ Ӿĉ'GZ?<߷@s`6Y>tSfA =l BcE>+ ?&QH L?ŧ~?ڿuA,}!=>׿?j?% Ⱥ>߾:AA  -r=JAſ">??CAGLJ.>C@ ?Eܾ&N$?տpr?cAxf?!I1f p^L(>cN:?IV?,>CA]KȺ3տ@u?:ο8+x?>ȭ>?jAAwm#]̹(~3?UKfi>Y?徣?>>A;2??Ȃ1dL{skDxoWT??bJ>ʝAP= `NyLG [-<% IOw?S?"@?qAOXB<B  ZE?g `j?Mn?-Atfg?j$-jN9>=rp?|?]>? @?I`A f?@YJK8‹8>, $?) Bt@@]&͛,tr]?qlDB6@R)C W ߾łs m^ʿǞB3DH@ S^C?OuoW㾋ɾEB3.@6\'):3FN[JؿdB4Aē@ըbx,p;>n˿Z?:K>Bπ,hPB6Xc@2J>f?Sj>pZ TB/ob`w@1"xe?p-?>aCB+i@gi]^?eV??.'=?B0ܽ@%PO쏾 ZL.q?Nw>"^?0,>#( B @-@ck澡Ps?@??-^>=h#B)G@#4jA!,E?v 0_< b>rDB1' oFPgœ?ش>>ș'ෟ=?7SB?d WkKZC?JGj> L:T?>XnBC,gb})b_k@1|z&-?('BZ|ɿ͡ z ?L;w?fgg:Bi&Nb{d7}??I7u;Wj’Bd翩fXPm??( <`ͽOe3B^̿L0dj#6m">L?A_+|)ο>`)X-˕9ȼ]BW6' Up E ^"+IBX=[V>?sk <>?s>pT|? Uy ѿkoBW۟Ĵ{á*CJP>~Z<n鄶Fl>#ĿW*BWA=g4To_דt>~.c*k  }GBSP:\ bG] ȾG =BAdoΥZ=r_抿) [uy. *Жӿ"Yo>Y!\l.q 4B5mC]nڿq4V忝 9V0ObQBQ+ fJ㿹^ }WR6ﴎPENBSrZ/-ſ-8˾=if"jb.BTX]؏Cd݇z>Og&B>@BRcure H!>Imݿ>ʥBPRR+쿐6Pق>:\?lcK>0U?"bBKAِ^ZM402]o&=MzY۾E8Bg=#BN/#KNL?aA'(F?`M?"|?Թ?BK#J,,-} >KF?"5q>X9%>#BKo# PM`?}=r)=BK d %<3?gD=Bo;P+*BNֿ6: ȾgW-W?2>uM7׼b^~SWɿt&3vvοX-BQ%@Կ v%տ^ .͚3"LDͿ ռBMV&/\qib}7 hҿ,g;lB?0!u wr%r9QɿHٿ>ϛ9B\*IR1?q}$e<y޿+"B1@?74V\O죾߿]@"A@??ap{Uj $$_6+A@@28$gDZD&*ze}\;jIA0?8@O#^ȦuTڿIAjҷgɿ` B( ?,Qſ) r*>6‾j=98B6Ж?:t= ! >>>\S*> B<6YH)|vx.o?ړ?'gC>6?<B=\kú 5ewLe}?H>_\耠>~ž)>p?ИBB?Ii'Ԙ)>燾;?fB7C}u9=_@I[+o>:F?eʿs7?9;Aפx+Ȟ@@­jS?z@?Ky۩?n~A$F6]?Ҿ+?E\f[Pd4Hj?] <>By[ ?Oa?80>q=Ƞ>;?SK;Z> j;BKb]"{LݿKo$߯J>>Bh>$BrtWZ*&-QK*ſ,> QȾ?z^%BvDm˗Px?b懾*ȿf#'H+]?0?Brk0_'<𫗿үJ s ?BԿBoV?4<4Z}Dl*?$R8sBm%> >BÿhQS?OU俢Bl{h 8s>ԿYY .]8?~ԿUBjK#A^?$aNwJx̿/ÿ?FbJg!CEk?<Y3G>BQ~wÐӦrƿQx57F o ()=swt?B(T@bWJ6JWfO8C?3\:? tPڢ-AO?̱߿l^@_F UT ߿(Qֽ8@ V򄿁pA=^gA\@. 'j?pȀ>@,k>~ܓ7A7MPe@`?ҾOM=;?O?]h==A^L^j,(KQ?_}X?n#1=g>Y@"m> >J|AZhj8)NX?? _ ?և?e==A:9]Z>#Dd >?)Q\>&G9sBYDf0%|ƿ O? (5 >ȉ>,T ?ACǷQj?+d?7 :Z$>ŕ"B@Z2G8>=&͗kÀX߿-kB@@X۲#wk^P >%?aL俵tJ|` BG%F@cgX;=lqZ@¿T{]0*ؿ&BNX?@c$^v@F0H P oD!BRY)$ԕGpX{@-迧T[X1e]lN,BU.{X&*?@-ڿB=I DJA٬"qBVD*Y$>C8YXH@7 *?~<־پTBLEU^>4iS??l;<3RO0%>?sp?>>'wB@m ^W]yuu> ﶿT?>gM4\BB˿>bc@?zʧ2= B?&vqH>OT[#B@Eۿ?k&?A۬۠>?H>q.տ$BA !?Rmf=}{>v?.굿`J򸿡 k'B/˛`@Pa5/31"="?`#+5 ;2BGp.@CE>Gg7?u6qt2bx@5"A%q@X􋹿2;BR?@!lտvh?ѿGF-nxK]BJ}W?KTL*޾N0'*6?қ3yc᾽Z'BP-dYU>X&}2:Vd]v?eοs hBQ RؾGׅ3x?vKB5.f?*=W?bԣ ?+B?# I>fBD(e)8u/u-?,>=RVBDoY;^̷@-^>`?%>Ϳp>QB&N='@g@0ƊT?C㿧Tk2>VvA~ ^+/ A@xD@~C:!RFS??AJj>ث vO*A?}p?@bį-?UAw: (?[W} ?!c?X=l<|?"?mA?>+=%3E^f=A`-b|uDI0/?vAj k?S?YL 3)?Eѿ#9*>7=rq_?zMB>3 R(2߾ߒ>לJi}cu俫??BV",Dat{? bٿpjQ Jѣ?B BO%\A0b Lj?%`]d' B?%LBJgD3>€B$BN?_=|Ⱦm{ ;2d?}p.槾S;N͛BŅ=B1쿎#@䦿X)ھ`8uM;fܾoA|;@g?Smf6:?˱ZϿyx =MABX@3}ֿú}]?%}#W#f>(cA$3P@IZ*cL>_п?>ңCb Gмi<B pO?a$?>2%ʿ澾Ό>UDK?Q>NB C54a|@?B?(?s`c=1>Khk?iɟBE:VF鿟z?5?>!=?DݝApB@J`5#m@D/>a`htK4L=*{B!|UOE%@Nƿ mYI}v+?(?+B"%e ҿ,]@yA>|d>0??>A?nW:B&R[ο G$>{@8??x>a?DaB2~7)N?TAE+:!=UFYMጾH@"BC<YfxmTa =#z=B {>]߿Xp> BRA?}bEhk7<ƺ]Q/LJ$rhܿY 0 k|/B]3r'zc6>$xavfWZ^,1{4%տlU5B`(8㦎j=\QͿCѸOH=Oп.ix'TB_?]Z/sտJ1)yu4B]w@|>󉾔68ο*(@@BY?6Qj@B->ֽNyVIԼ2"yHBPO?'@%58]fw {oBJ@J3rdg>Z@¦u$ESc뿁 뿍[B:ơ@Lu ٔ@^1FVb0kwgӿ3KB @fMjq@< `̿zv!y蓿y9c,|ɿr8AO?Ҁ?uy?~D~Du(R;>~5޿XAcw@hݪ?y?:>x>k>GU>V>\AڤP?eyc=@!=>7q?m2:;GxA%Lb(?h<@V&%AX?/ٿs?o=o?F=@dW? >dB YC?' -ee>^fZn?DV%R>iMBGLJ̆>z1>@@j|feZ?pB>t^A > ?ʞY>y@ i @?IP>B?*L>TAt?U?W\<?iI?ݵ>TO>b{@R#Q>Y%jA|q@(q'? 03Ⱦ ?'S! ?"L(?q >wYTA@@`$u 7%Hu\[aFLn8DAlI@P@ [#8GR#6)b{M!&Ap@i?DGX3_>M >:R޿8gFN"lBO @?E3h?u\ӿ~޿^=嘏 VB@(?¯T/im?jп>eN*B $@=?5p>ѿhR IZs>/B9+S>gk*TZuߦؾ;eݚ:S>J ؿnƿMl/BM#?N(}F=K^w 꿋GaBMFI?G'|ԽE"=5ȯ)EAlVBN2ҿ?Mr/"x#>ּ6[UGBM1ij@Eϫ3 8?3 #|t{3>6BHrD@Z#xOȾ࿺>5r{ެ$%BHf@t,>1:?['I,4e料QmBEp:@Z4,w-*֡'?S39&w}#$\B?|@J#ʤ;Fv=5U`bE@D:X? ӿy* B5@D=y?8='!)& Ǻ)@ Ip:(u iBam>@LgU>Z5j?]h=oY5+SXf/DBP@MBd%m?l$f?L S @CA(?ŵ@NeQ1?cӿ3vWeV *ѿ AB@?|῜ >hHY @D3][ 5'B7@:?ޑb2]?&vcL=[ϕXbB@hߥ?U~b?4Sc=pg gB@>z9UIyEƿ 2<:߾ 0AB+c-?£"?RWcWpN_Ҽk8CB8?dEN?xfjo(x UPH):B`? rc_Vюf]Կv7 EAB<>g?_ ,m>`ۿ,e={"S>B0lB5ۗ?\>Zh{$?}眾.W=7VkB-%t@2 ><*?o5m@\38` ZQB@mIE>{ÿ"?l-`{8 pwsBJF@g?3r"6@!B=ῬD>2"&A L@@S\c=@ z>!J~OA*@ns@$^ݾw/e?B?]b7?"uǒAʵ@@}>?ƴ_Kӿ'yѿi\A>@ı}6?WT\?>}&xy vԖ@0'OtA?@mGx| 5qG=$OҾuA/ӌB=AX׾ 2?( })y <x?=1P>!IAgY&@kwH}-Qx@= ,?-4=> A~J)q@IZοƲ2>ˎ'=M=s5'Bz>?Ԛ?~sA?uΙ?HFҺ-0'C뾘տ'?R?>xB˙? >ev_?NE'>(D?+>?(iB "S=˾tݿҘN@K`ms6>Zf?vB#?B&g? P[5Sқ>05^^Dcvb7?^BB(>3 ;[O5P:CJ?v"2v#G8\-=r.xBI@,6& !`qNu?r,,\pmBNPmo!#ῌNC1?V,+>I{&nBP9 xD*PA}P?P%쿬==Nžᅫ[sBPuKFKZ*="?6p0[6־ϊn>0~pBO꿾LՃ?+N?GϿ$¿'_?R&BKkix="]d?|f>ֿvB?Fx.BI`4,>ciL"$F?:=UſI#v?󀿈 yBH7rA"?Dn:̤? (Qbk>%7jpr?࿇BBW9?_m\"bv?;'oDW >fK>ǿXB7K= ?m?ؿ:>AgͽۖXB" \?2@h ?J}.m>>Կ"ξ9"bsB^X?w@M+[dB?j?B?'ѿKPk4kB ZA?q?=ø@(ӱKh?N?>eVR'p=TQE?w Oa2Λ>$a!?&ʡ2lwB;Z\ pP?`ż7?] =$B.BCPh ? XI,BnBR?εᾔ|/YwBD͋@9?\IkGW>=,j2>?]L!9>`gAC?h@ Wo.r٩d>̾鿐>YA@W@K0!*?7̿8>?3>aAR@V@ *H+s>?m)k?Ĕ&?b>y.Ax@n_6@kӿIwϗ>[r?AWP?T=X;胼B@? EWdXM?㺺 'Կtz?([翰ũƯ9B$b?Y$-?4Th迄w?I运@u?lb@FShB)c??_\e?e_EM?v=$c,5B![l?>Ͽ9e~[ ?y6v>ſZ?=>p] B?Й?C\0\v$?Jv u?8*`>¿ϥB -@?܀J4h?ؿm?J|=oɿ)B@I ?&=-i#?Y~Fz? 03j-Ax@a.@?=5QU2? aȾ>4hʽLwA@|@x 8R6 Et~ <пē맿%AěWP@ekDT4^OؿX_Mp忋"AHRt@=u>Mq(ȵ"Wi_a7Ai@o}: jn+VqBC']>WGX B@ ^>=zO{Ͽ70RgzH>#"iԤoNBD,޿qs?eGrrq@k>yzBM+Q?jz>J >"=^>gBNWt3?6k>RVq>.sˎ?R0>쿤]BGi1y?2_BK>,A3=b >UBF$?ݛz8\K>ʢK>v۽) ɾ%&DBJ?fio@3>7?*vEouk6HBIvn@`YP :?scA";Ű_!T6BHa@xR *a?E>/NYUC>WBC@z@#\?پ/=Cqx!+hZ!(B<9XT@e. l%?@U<پ;3rB1GV@:cݾ}CT8?KFסG )lB"}?s@}h+>, ?>ȿ/@o]EB$v?@hmgAt?kך>3j=߿'Y[J Be@U7 ٿ>/>#?&(>LF۾>࿭tBL(C@XL|?m%?c}jpS>=t>dqCmAD@c8E?M?Se7?Q+??i>D4A%V@?/=An@N6?Ծm? ?.ALf>>AؽA,O@|<>΢=>¿||?e^">t?% 1?C:>iAM<@S?==4>FͲA%@}=Wd>oMQ?>C?z?\M?'>T>oD}!P6@,?~7Jӿy?<k=(-dHrB?~>{hV4R?V0w˨?8Olj5>B.@u?!'&j)@ 鿜`Ҿx?$ -D翉B @Qy?$<|*{@@ gb>kT2UB&l@(?ўM^ܨe`@p<>+ A@_?$_)K?!SϿ ?#e? 6MA@M@ 縿G=]?$8)c?޺)FA-@q3@ vn+V?c-ir>|ʉ!7A@?@Egt_{$?-#)?@e."A|R@K,@0y%П ,p?$%,$$/?pq,HPAڴ@y@a6=l?|C;0>?"92<3Aǀ@@FSB -m,BJԿm.F(qAU@]@5F~ &S鿈C9 ,޿${Ak@u@`[Xd nq@rBSQ`^"޿nm ] ڰAZ?Ue@\ ~@R,q'&V,`IdUAg?pdW2ſ8Ͽ/[91.> 0Ar?Y=s J+?=cK۾Fƿ$D>[L{!=Oa?;V Aa7?b),>nɿ#pIA? q?%\?*3?7[A~SF@sG#H"#쟿1p?e׹A.G' .=T_A 5@el߿Cݿ{MЍM@e?CLA~-U?qIT@$>9>FؿWd$?`ikۯ{}>HACQ s> Y(֫=DT>ad=4??*pA: ?Wr{L= ŵ?X)??7>/Af2Ӈ?GE!K՘e*O?D>5?H?q?pA91?ܒgVIEȿ9n*P =%?@?!>.oA#k?sDw⿇s%>pn>?,l=A!?ts&8R S A[?k???v6,ALov*RNoog~>N>=f7?W>07A%i2."=0ED侏-{?EC>ݣ"PA213>Zݾpj XA?ii?NDPGTA0{"̲='d29Iq> ?0H?I2q?*?$>A4g>4NUȿH|au>E=Ll/>"H=SA1lm|ۿK}+o6==N?I%>.=RA">HpˀLm~?!o>"þ>fA0m;WZ娿 1V>׿*=:HAA^v~W"|3QlZ2)+>^/>s>>0?AfAg[ٿٛd?hϚ">wA>??.?b?׿2> о/p>!H?i@!B!,ҿI'~쿍?.$P36cGɮkpB=z=X&*(~?+(<"/*W.B?Y>p]t>&l}?y]rR/㿱ڿr/&BH4`,~p#@ S?T>QCп*HcBG%GHfSu)@0u}Q%er>p7BGRYtOi?F@,V~2˿`k0BG:=E ZOOa?@3b.i]āп>=/!BH j>Q;ɾ!yz@-0>oj} @BF=KFCE4QFF@ ̊85>5 nѿB@vBC,ʾ'B-& G@ N8Jn?:ϿO<yB;>HK99gϿ1?(>ySf&B4[?N-qi?n4D?"֙ϿSp~YB1? _N6j0OM?}F?!uhKܿtTfB0ttn/n)9Z>N.Կ_\, .-B}\@">[ ^f?~ݾcm(vSY!;A@FB@s(Kr?ɿD/4Qk濑W3'A~@;)@oxC93FJ})?&Ss¿;^lֿ>6B?ts)\>(XfE.? ~Amfw Aj@Eh;p> ?Cѿ4nAb?ۿC>6y>G>t> SQsA !@8?8>b۾տsۊ!`bABd\?U>`^pο*QyP>o{&?s>8xǍ&?m7>tӿ[s(b)]>*2?c?yvAʷf(? kL`W}>e*y?Ru?Cr?Er?d?Q\Aq?kRY1fO?Z|?s???Nl>AWi?\ 8p?D Vp>F?7?=??[¿gAlI?K#>+ٿԾ f?0v?4Vl׆>4A]?rPcyw>]> ?2<9A;?P} >'5f=$->3?&W!XANh?3l+eZ>MC=R >Ȁ'>Ӭ?NN=:QapAO ?A>=˾|;>&4z?< ?>>Aֺ{?lj>V? ?pH5儿/uYF$57(aAAwq?ss h?A?6`9zS>J?pBFG?N'?E!S_hDic@ /[?"0/B?=~>KiMr?=\_R (ys >[ƿpZ?Z@:iBPRaw\̬^w̿Ŀwa{>cP(BJ =C2dѾl_+kVpYFqx? ?YBFOy sR\-FhFcNtîY B;<6V}#1H&KϿHʊĿ=4N2LB ?=@%fP?y+Lo k2,#>ѾͦAvVG ?пWa:xGs/e4}6e,>t^>U>JA:jb=mO >Kb?)@a?E?1t??UA7_#o?ijMa>sG3>q@ Zl|.A(h^I)῏>33u?`ߞ>#/z2?/=kK>5>sB N>p#nH>oL? ?Rr?׿r}oQB߽I[?RƿT?~?Wݳ?4{c?퇿|۾\QAG؄@/3ؿ?[}H{>&?[>ǿ >|FAUL{?~Hf-U ?Z2??8E? $d?+>AH m? #߽%?q?xaP>\?=AxV?}F>??m>>}h?>qXϺsp<ѩp?Aзi|E?.>{F>d0?,>#'? ء>c,A@,@F?-l?w@/>`#ǿI?y_AdFC@"?t?[?O[W],`1<>EYADlMeGyOC?:?$ Z?(?T??AJqZ", a> t7?DO?7q>P?>?AE=:?bTt?CpD=&͠?N(>`Tf"7KA+Ԯ0=俚lǿV]bþ?s%: a"A[>SKï? (Q? G>>J |#AS0\ t5 *>h\g>qp>\:>'ElBjP ¿Ø><|vJ=h>j?G>?T>† B⿰^5?c$>d?F?<;?<ϕϱ-A6^;+?_?>z8俣>j|?%ϬBUBq*_(;JVMW羰>w>q>/0AH,L?n?4Ŀ&6?)a?H'pB!@bH Ɋ?侲ZZ࿗4?ۯ޿q?¥B46\@'Ǽ& `)[1]s[ةdA>RBJT@8(b?8D-?Q'$ikfӡֽy% BQ a>oI4auh?4>9&BQ>cf޿n?wFCDYe-%-VBI= hY 2? x>?&j 2r#U[x?>!B;Mɿ0 i\+'Xs~2ؽPB4Dk?@l>ar*濧; ؿu0? =BI}c@ QuY?>C).>&~ o*)տ6B)gXV*@t\7_q?t/?ڰ^{y|p~nB)Ss@#'e}$?[T?UiտUY.ſiBiƂE@ Z]>\\ 9>3"ٿdhx@/B"eP@&Ӥ\&=K B>R=Xÿ*A@1h; [?Jɾxf??p??:>yõk]{Ad\{?N쿊=pneB=d }F=M,A½>_@'5Qy? %? !Bᙾ!*EA,@`s@$wjRQ_5`>J_DLb`cbeAϰ@@)]3-/f>&l}hx;9'p=wKEB`@ɝ@b: KI?oE9<}>tgs&B@|@cl]*?׾>Bڟ@?!3(OB<~v>Ǚ9fW%Z9̺>5n9p9fB[M'Wrp]y2& >幬d=+Ჿ}"TBcNyj!,h=N-b1 Bg8,mg^= vV>aIO> MBf+\)`0Bpſ[UGBdR>ZABc$i^&yO6QgC8⍿>ndBcIſI3>bnXZ @!I-r%?Bb:d:`4JO='aMSR>0 QBaeDϤNsIaտ5Ŀ'G3чuҥB[xi#ſѿ Eh# =l|ZB_VVq[(6.z!lڿSVMdUҾaB_ 8}q ._ְCɿ @/u('B]*dϿ0x Kݹÿ FVb!o"QBVS¿S*$U6_@2)JUuxBSV?A7)mW:X&_BHrX@/*=6ɿE:hCγRؿB(>˧@sy8(q&ݏn+ B h@[j@J8z U>ÒsdN$SFhXsB@i@>>=qiU<yA'┿ Ku Be@@Q\ =:S 1\ `p]?B@A#@HGbL oo~S! 7ʂs6`AH@!@1^oA~yhL5 CG<=Q BM@ ?.NwU}Pǿ讙,+rB@#@*W\4\ &L)*y(\ /#0QuBO@@7}.'vUپ Hہ x[7'mu6BcD@@%M3QQ4%Pr F'.0B??Pw?DcRc=`>(њdV]X,JBDпCE4[ Y@[ h?T+<y-A}BM0X}Qo5\X?$У~Z 3NhbS=BLrdd?5Ne?4N?h =t!#ʿPI BD?PD}z p7n>?8VO;/ ڿoB@u?ٝw?Gg@>%ٿ4A\Tݏi>,ңVB@@~zL:?3T%?)鿇1Ϳ IM쿻^BC?wD1?zXK>zW?ܛ20?4)BBM?]>!x?%#\O@+W?+]IBC?ZphX"(?)-=TmBD,b03ij?WAtQ{<&4B@o?G=0Ɏ1y?(up־S=kB;ȿ?q4K(ݿ8zGQ0"eB7][i@ x? H˿CeNҼֲ~{i-B0sg/@`>zqhQʰǿ>B-]]\@ۘMO">iD澙Ϣ￵*Aƾaȿ]B-s}<@ٟ УJ>WqHB0%#y@:B([>np@VeljĿOC}xxFڂV_ Bq@'@rKDT>Av qڿ1^*NA|@@Ao6q S? ӹ6;gA[c;ƿ1vA!@U@Zj ̔+?vW~&Ivq-bοA<@T|@VPjg8?L&%\5 vAghֿC[A6@@\B*ο?/X >2IUZOA=jP( AJ,?տcu>X xscP򿦿꿁uB1l/j= > t6۾0>R=L="8pB9迈4n"F>w߿O[?CͿ\BO.ƶNLsVe?5PfMGp>BJ)Hm;OOnd?qԾ ?! "J?ABW ?L U8쑾R־NtIa,mʿUܽUBZĿ63UѺkv?=Tm*BU+?\6?.BNȾq-v[)ffw7Ͽ u?V̿BPv:Fcno6ؿ\g̿G>Ä1RўM?sBSuƟwʿ)̡Կ P.߃?οXgBP>UσK=z f'⿲ b1?7qBL?sƾ:񬾚QR..S'j?#D, BJu?7F^>S I)p? <1?Z*֤|BP!5?:QCu%PtZ@:/am?`Z41_yBXe>}l>՞սǯ ?!>ῂ5dz?/R>BPs?յ?Xпn?gԝP,= US>C(BK?漏VJ?׿B+?箿뿹,M>l?LB;e@}ͭ@[WN>¿G`,,_?'$?(B7S@K DU@vNxV>ʬش[??'B=@ہFL?οӬ,=˗H>"[y[-B5P@@ @DPͿƿ|M8#lr>̾B4@~D k @ (2>= | X?:B;ǡ@&GR6h!@:U0?w&F?Fr@>8q4BB?ENAv4?(UK^?~l=ڿq>Y9ymBDؽ0Ym>bL\@jocEm2rB4k?u @~B~Qܽ%a?58⑿K˾DIzRHBDk`Of&~< ?l?D-dÚ>"p0F>7B/f?(c{H]wV>U?]=4ÿ} Sf?@ @B7sm Fs:p?qg>>d=\Or>5B?q 9ҿIC)W?hK2rԣ׿p\#>WB:`Ku]n `?GOIɾ2ZNI𯿎@>1B2b,˂BMN>?T;&s [UҽtRBؿjE5 6?-u = "|~ Ƌ/BaS@gX߿5_݋Jۿn7ޚ NFB @??Ol?Er|[8A@ $@>Ni5线[a. *p" ASk@$29v'n4nμ>"Aڙ0@rGnȚݿ0M~ǿ%uR>ؿrArȿ@"M>.)4LD>1i&=mm=ӡ?;?Ac?ZT ?&*l>>D!־q Bg>>OA~a3?K4>ڑ(wv {z(? +v?i~?pA]Kά?U[W?=>N?Ú?+X>>wdAfV$?h?=>Ή>D o>C;?(њ>cF>? AlZ?FؿӗQBQ'ʿ=A>h>g5sP ?7`?.OA~}@H](P?.T?^\==_I9>E?sLj?AR,,6?v徨`}]6M=Ò?4_&{ue>)A==25Fy[@ >cLK3?Ԏr8)>&AGO_8ȨZG}>r(??%=VR>OA>03.FZ>S t[?Gj?̫??p >c AtWxu4 =!zuE?XF_;?8|}?Wx>c=tA0IڿeGۥ?!H >6K> h66cŰ}A,>򐿹1GSx>P4>)!>U>D>@c9bA5 > e|E-FGnQ@bV'<= A?{=j+&Ν($>%?qG>'ϾE5AQA羆{4> Hm)Gne>?xk=J?A^UzX>10&b?{<\>İ?%??A=6nc ?%Ȩ?=:uH>M?@ThAC z>F&?I?'+>~@ʔ@Cl?AS{e"f0i}6mêG?*V>p?t@?UMA3x~bO7G"D[??%%??å+?4A# X+T@_>ݿf?->tY(>\>UA)y4s'~>LE$I >Y7g>?@X}?4=B:A7c\!Rc-ξ˿k]4ζ9>C,?aC?v?Ef ?5A"BRr7ٿJ_~7?> &?e3?(A80] )#ӿϾ(h`zP>֦?w>ZA.1sٿ߿d1| Q-=L᜿:ƿrx>2x?xLܴ>>BE@Zg@9t/6u>GԿ}Pbu;6H~"\|BC@hl;gs߿Ʈ>w?@lъJE>ҩ'>sNo?lHןnBPC@leKῴg:ǿ?%R,ܾ{%(? ,w iBS@> f\?#8LHv+>ը*7BP4@{lпY?Ѝovd 0DYBJJ?-Ĉ8]i?q+ (<p] SaB=2¿c)@Qt%9?1$Q= 0 A⾞E6;ǾoBsV)@~U"m"6??S%=ʆ߿*"$At!E>6ɲ~a;M?@3;yFc~?5/¾A;L?7>??>S>$??~G>K?:B1xEU?n'nF?@`?ӛ)_0?c)qS5B4Z@ {SS@\g??׿T?^.m?*B07a@(?:kk?Kk;€B#-F>L? tsN+=1i> GbJvB#Dѿ??,H)?"G^ǔV\? >kHB} ?n=֮~=Y(_tr=B /WQ(?TGkȾ7U>ZܮF>|Wj ?v8rAWTu &9\Ч}Ȃٿ4u? &"UMbAy?J?Qx*񘿸3Ϳf=Hf}/?_7#B*g@AGX?Iw!3Ez̿?$;?PBBm@rINU?"?2[e,ۣRjA>f͞BL(?_\{? Gt>ǿc ߿C40BS#vŴw>tApl X>V7jwI@LBX 5Qy{tl׿;<)3V0#o1G6B[;NA{0K81ϤU.K>.NBM>En.]gዿ5b8 ou.B?ܩ>zD*K>B F@{?zTah.-޿Z,)?,:*Bw@ ?rs5G̿zr2H?C3~B 6'B.z飉@U!v;~l<\qAe?hۿR_  B>f$@;b8 ox!H 91WFB5[=:@P@[ǿ?I~ X6+|%B5"HȰ@3*f ?ގ>sN  B1ɤ@K̺EV$?7Q?B*玿@R%D-^<>,?b(]E1B(>)@xi$>rϵJZԺB?@-e-7孕j|$V俋b OB3> _@)d@-o xo sy }koB!ƴ?d@fpT>ܿgaes:B >?m>H=rI} L?PeϽB%A 濭>Q4ݿyz" @F`Էr>f?'S>tEB Z>V2ѿݺD)/$PJ> JB> =osWPEi>."T {?=d>蠉B/[]歿<*j&h:=䷿RwھJ6u6B"32,*4i+E,%)B?3}bT'C0B :'x ?U3^r[ !>t=:?vH/ߥ;BB d_^Aщf?lCǯ>;>[q>&>4>$V?B@h *pfţ|?.&y ÿT2".J[B75@,fEb^=tZG\rhD>;BA"@=6>MgL]>>,Fs "K>VgBIq@hdjv=575j?'9J?`BM6@]7ErZ><(?[ @P~?."BRK(@]%&wrm yKL?w EQ틿?=`BWw@*ԛo$(F9 Nk?wEM+=IYKB\?i03 3`9=Pd=߀->đ L~>vWr[LB] =o(+'M2]$?>wa1.h 4̤>儡d]<̾j#BSTm]?7>p Zs=+=3[߿:o>=BC0俭F(Dr m\(̿ AC%Of?o.e> ?9rE>OK>O?!AJgy?a? >@>x;J>#>:_J? bA%>@?$S^>3#?V>AT?G׾ S8> Ϛ?!?DE+̀TAv@+??v?><g>?>MAڼO@<,?Yu?k>$6?>?{I=?A#ܤl?D ?~/@\>}>˿kG6>/B{>2 FS>9?h?S>Lq =f>VkB >)!t?@&&?%w>06>ǰm?PB @%X 6œ;>} Af徖 hk>BK?,Bۮk\4?_:Te%ZjT촿 MBQPQBXVcG:?P2U-?j#&[*BJ+Y1=N.?}}iݢ? Ʈ>Vӿ#֭BA!/R@AZu?8!nYpT- )<ᑿ<4B@Ww]cw?qxjٿJ>o((=Y>B5D`?e']eпf!Ͽ?⿽p?lDg6F?ɨ %>!^tu Aø@-v@TwK(eKy?3)?h 9^*A.@!@0o@_۾JQ?~%m?{U@2AE>-J?JixPCrl"ؽA>&^@@P? ݾ[ ÿkƿoi>ZA*C?9/=q>^l!<ʿ̔\%Iz=yHC>M܆A!:Q?^4Y IS 㾂kmڿAٰ ?V|>H@ܿZt>??0?;>AAZ >пXiʿリ>5?$>g;ƣ>{U<>8EB B, Ɗ 8E?s?w?e>i=me0{zUB5O=&*&9= ? ?\?WT0 3frd=o%BH?i@`oAP֛b>o>$?h;*B8q@0i?-7'~ %Fi>0/j9>t=n~|ttJ$GB>4>G9?V>_\ɕ>% Ͻq|о#B9@R;￐>m>ӹbE8ҡN0KB*H>"{@x}]'>ez讋;ɴ$4X>rBD#H9@K^M棿2?XZ7}a2I0ǧQ,.B~@.|> %%>TI 7ּ"hO B@?$Va-yݪ`<>6 ?SB53^/@Wm?^g>\{? j-?*?Rr>B #$@H?1ho&Q?wH<<>Ǎ?t=? YBL=0@B#8??;H~<)=5$=>Quϰq DB 43}C@~.@OZ=ry?:i? >]ڃ?Uz>OIr!?(4B+p@`>Zǿ? ?P?#|?#t=|Bu? A.@A$Іf?¿\?7ǻ=&=>$$򢾐 >ƺB- @:8gv??+?7* j?p?b A-@%[waF-*1X>2߾灾J A0sB.46?P oɿÖ߳WN=mYBQF?yͿ1 C辊H_ԿڿqJGBV/,1?TWC>^><-?k0B[I=D6BW? e*?6^|5!ӿL пK>N\BS;p?1?mD;K((.8yѾ >cY@BR$a?b?h󌾸= 贾=BNB,BP$C ?yu??>Ob<)y7؛U>f?"av<1 A྿>qp羮^=zB[r>Z2E? > >n#? mBT|czL=X?>bĿk>=>dBOQak9RFd?? ~>e`Bi>)MBVf$^)c?r-?*e>_P`9? WBG4Wn!H??RX=b ȥɯiW>BOf(1D%?N?lD>7nc0B/i?HB>߈8¿e?[o?'km=w3`>)-ݿ\>OB7?k_2ZJ$?kU?jg=sؿ>hB=,DoJG{[ ]?\?Zh>1 VO;>B:ݔ>omL9i't?E=k?>׿ラp>ǝB*K@rcLrk>?>k:W SH 쿭oUB2n@J6-s?iU @Sqsۿ>4B(8@Cqz?lA?GzAB b?DCM]\>xA>-4xA+/%Q>獿s?Ć?-Lo>A>U1A7xaB)v"Bپ>=>MJ͟?J>E!KA,zC )7p>Lo?07>R ?+>%@AJ Qējףݿ֒?@\,1?z> cmմAIG9+G2pS?Y<~{>2,>o˾A6L>D5{=R>~>t,?>D1D(AE_Xe>>c0l25?][j%>R?Vb>n>a^AGsO=5686a?=>2ξ]>OA@ ?D~ 7?Ւf >؉?3l>aA:3? ?ex'RY>LA3,^>$ۿЏ X0娂(d>ђ>#=I|A",cM>1=,ֿ8fz?l??LN=WX>AoMJ`&a eU-1>A6Wk6Gw{>y?>t<¿1ؾAHhJ?-dʾ;*w>B߾P=f>7ʾ[uLA;m7R?i?=:BͿv>?p>{gV#ֿAB澭r""k2]>?t?ֿ o>bA2U3 o{ r5Y>y?? $? A+ @fQe';ڽ>HGM g= o>?BKA,kXL2޿5߷#?t>JK0!I1A#*Y0x1PB~>?<ΜBQ[d1uA$YJ3>lWYWX 4?.-,> '>*ݾ%CA-͟Vu$Ex;Ѡ?&*> aEs>&oA/>{}Kp{~0w #K9(c3V>)_A4 ?:mrMvмz] >"?$>A8?a5A];.޿p]|P>Ѿ>S>̿[X"g AG7?LS#Nͩ<zId?ө>i@(0oA%(Pjg4ME-'<sGh?w

38?@(UO#ArOp; 㾬| wկjտ֎ 퐾d?G>0AAa /ƾ3g>?(>>ą=ӬA1l|Ѥ.*׿t8 m6|,1#?ýD7=A+$;]m\=5!=c>nR?fp?ȿϾ=Ǽ]RXs>{eA*XBܾZM%ǿd4>.Z[X5bE(BBA@>k+ѿGӯ=8y2'#@A+^;GE ߃# a?g̾6A-WMN>"#:e];ţľ ?? >A/=ǥ,B/>#a7>|`e?6AOҽ8]ݧaチk>ٝ'ȿ _AE4J>3n(Lȟ*6ѼX~P>_@=о\¿XA%C(^>ɖ<}̿eZZbݾa?&ǾGxu^ZcA!u?ps6~=1ͰȾg<+A#o*O.=-=T>֎exx?Il;AL?#6ɳf-ٽeI?F?F[>>Cb^7AV`ٚdjž ѿk俁Si?>c(f4>!A  d1B+0h~"S>٨=>z?p_A!ǝTcr?+'A>>->7ܾ^],A Yڵ{\uv?#>?R#jEA&ҩw~eO>k[-& .¯ʿ 2>W?`?hLޕ=A+XQ~9OO,{>?'|=4ҾyFAL$OPLGvOsr?8$;8=?O>?V2A3e ='8팢ʫ4?9.?_[o?Yo>/A WA$eUP?4"a2ӿ9տ ?I=?R>9o>>(A(~Ĵ@(뿇u`ywοn*9)~gM S!>g>5AR/Z>NԿ`@II#?/o? #A7QcY)+=_)~>[5>g>>O:A$36Ə,=>O #RʼnoR=)>;>vA&]ҿ{l-JKɋ?Ct>t}?0?>A)#A<?2~?&>*=_)NLaA(]+!jwkZ;?¿!~]Z6?_a)=L>|A%2MؿߓU^=:(YK~?1?c->_ž\A0RNw:P+2Mlb? B?]>AޔA-z]OA>Wn?A!16>ifp&!f`w>ڙ?_?6>۶A 5myQk1.>*e6M>颾g>iAL Rk?>7,W¾ʕG>LfAtЉr3=ah6ff6[Rh9>%A 7 @h? T$ہ(qA=ӏ}>h?sA^#ۿ οR<5dӈN#>pvA-b}C쿏ȾCֿ8q\j|?y7? ]?h=A"KD= p3<<5>'vý->?I|=?>A'7]N ۿ1qGϿz> q%>;?AG-'i5L?,⌼na>|7A$ ]ӫGYs'֓B⿋??)B>^.?/AxhU⿟G=u3-+2Lɿɥ=n?5 A$AȾUF/XM]ǿ>aľ\ ?3?!KA7͍KFP!tL2)>=0?sT?+Ȅ>/A64d '~_߿;Emܿ]>Զ? U>:A&3̰M}w[ѿa$G+?aw?lyO?$?' 87A>'+눿i$) Y??q>>A<A%`n>:*e>1}=w>>o> A=~>Vu">42#>?wpk>>T0A'a2W8.ND/W6">N?R >Z>=拉A2: 84C=X@⿠?bȩ>䰽96N:ђ8dpocketsphinx-5prealpha/test/data/wsj/n800_440c0202.wav0000664000175000017500000043435412504317077017357 00000000000000RIFF$WAVEfmt @>data:CQS1Pde-r5X-VZ9 FZ1UNj/v 0>|#+}y?!AZdB'HQxmeUO4+ 1}/sDpMP9 wlzu3P $j%999_ON"@*L^,3*^:."CG5+D70i*5wy55rY<7p:OU\?'B/Uk Xj$| }L2BS/S ,rKL&jmhb!o3!.uq8z6}5 S8MB&/l#DX-sM*KHUfRw/>''P %t V_7*%=z9M3oN.u qz% 5q &X-#=P<k^CBoJUNW cn"+D9fQT%HEK\(#W }<= C~jVj)#c0]tC"*rR%; x rk6X{Y*5OYJwa~6L f%BMBm";wDz, q~p|33RLoLA.:IL9T[..]!WO2 |~gL z \{;&|pa0T gu5]J:tWL?,M9(")2_PKA 8BACMT3sR2tg}tNl`|uoY946 I>> Zx' ([+ee%RY:D]<i LRVuPMj:Xs:1gwEl]J}i B WM[. T7Nkk"h4s.sDtZR}mTw:{cAR5Ee$Jh3r> MdB$@ky}YU q%U r`W * w2H!qI"=?dZ_{.2M7NETB`B;`AI[G$EHI?+~lQ}Q9"K Kx`V< " mv1Kz|P6uB$?gW7K#;.k |+k]s y81>hY@!"/gY8B/ul ~VO5QU$9Ps 8 pBl s Pm+v*- dRD;E N?icZN1vPh (M,&7MCn\h8/vUJ^+/dr5 V . M qOmQ\1hbK IEs1Pv-mwTK:wmo5(PXO[mL"7tHB9oLZ9S[ ',{Xh` [[duA*r<kx<#|E7<wxW94M|0+LS!X1~j  (TyiE{])Z 2"&'p*I7/#RBc6FNd\>Y ME&I:?an"D "{I.Z3qVNYnLd):hK-f>"XK L7~n_.T^k qIdce]\zE;qzx0X RV1f:,\b>?Xzs\<kXr>E E <ikWJM9E|d#& 4prC  w- -Q [*1iGB\u}2h_moykj_XfB7_%EEIF{sxtD,K-|[EIB)'K89,*JQZt1]em4sIz<qKn&c*I1Rv6/90C@vt%`E5#Ki'J u"bb8tF-6 ,Djn%=}w DF/^ogD:N P` N5FQSaT jIF1'_y j CSPq|4d]S$g$4u`7 p~E #rSl0qBx^9 \"@4"+O>w OEO[+K'wj]~LV l7~Q<2#m"I_^H ) K71A6 qaz ]jL-%V/2?o9_>&-Hw_2(U/JSH'% =6ewUiM+Cyv\gH[xF UasR qk\MgSZj[Sq^(&+iyo/v7n3Nv&hlVIbqa.Ji[xY>6#`%CbM@ z&p~fhknT6kQQnFMnP@]+_*2Qc-U37Vb4(TML>)(NsCWi/%  wX.**2g04D,m@dH|AFUX3lKW10( A 0%7eyrAE.B0{|>`d{uR].)0EcE : RSG-X0[nHuEb+a7R`? Pv%WAW[:{Z3~=Aucn0ws+c}Bw Y5Qd$kinSc2h4 2IzZy*E1B*4e.j{1l2/gPI+ZHIyr+DbN h@vT [J:m;p|'["Vf3LD LEDQ6<iVYj{$>z26[?v<:dC]5a*T2,}AMp-)cb juT Z91ivYMk!trpC Z"r;lPW.-'-txQ4Q+~/_J-Rf[]bXg;d P" <$S~<C|#03wOVmJCp(Adw0, >}= &-/F(- &!2*!["[_Ck3) FiMNDm  OQ tM8[GGsB3/Nr5y>:=5ZRyJ_*ly&w Dn[+$7\b>Ne$[LI<4pj {k2yi6Nb5N[=~kCL1A>v+~>IP W8nid/K"JIsM];\>PR*xF11AS }DC^i]&cFL\XuKErrk@= _D._ F B3(a7o!" +Nj@, H'J~}(!}6 .|aPas|5glz6k|[v? 2+t#.Cv~tJ)][`&2o?<GUX`)NyS.]:+{wA&j|C q`:# L;[f&!S ;7xt!DXvW #]lW> q_3 Yxx3T Xqx<!|gaHpAAlL)xJ!']t2rz=3ylsEt#o>cJ?.VYT2o?#=E&_4zaz&y R=lqdwg{fZxz/4Y?~O ,~Fy"[5\%Tgr2O_l|eGEk- !-O> sfgQ<8 h b*:Tcm,Y~&A]zI`{w)"`ejPu3BT):3 |z\ArEj8uIaxH+LYn tzDF * 1( _SpJHY@OcZ_3n3- ajJ]$*nF1_r3aY_;:Or!]RN(8J -|ffC"4(U; RPN1NC4Km=6hO3R)b^[R9i\Xh2O^+Lo=YC~KI(Hq/XWfP%c} 3I1Jy7:8g'>c^*fj44Dy|lb*14?=)/P7tP_!\g4fdx%!)9G@am~<@mTtZ:nagN%0Y( CUr4#]nHC AN(f&?I=<}=\CT:PTBEzQ~flmxh?LjHe [AH\LYAn4T5 Oi8kbj!e"MV5r~(FS0(JhQSW3Y b,ZFw2TO<5!(<wat~K2 "!`1/,4 |lC dY7 fC7?8G:x8O,'O6\ D2fDI11.A)4DoBbU4_D$9(qC_`WGqq&7P}Ff>WBa@!HYxf  0aZC>Vc(x``W_HZ>;fM@#v,y;at LL"k5+]. OjntIo>{)( s[<2w%+8g{Gz. 1-G :q +xtY4^vkt3J3^qk}m):/q3U's/63_[pJ|#bj EbJ+eZt=h":pk~d Uhy`qYQS .+4na{+U{,A=l[kQ.r 0u7nSbYS9lZ~x,@,z!G ~ 6"g2V}kU*boX>]LM%( +|V7 N\>-gQg?c }n5?iF4<rdS7 'H [Br!N0[qFdB1!0$~?EN#\eQ<<B|wLyEv4ja+XJ-[IXg*a `Aq8)+l]4^K>( \wgf b/QuN (K&X"EXufiH|u[/&YZ$aVS}N=Bo6WLYut+1kP49 q~-2)fR"'`uCd[$qi!6KTLlL>orL,p=Q,bn}[GW%Q2J[.=}Jhl3> g   ]]GXj=U7cG}P?T#?Z}z2Q8jZUk g  |t ` 8  ogtԣ< %)!w " TT8 ## ; 3B$]4.(*~)T~2,[5CcB;*%}֖oϬ g^\2&/&G r-U{b%[#.-8/'ou}խIJ ,ld5EWiI=1A%7%bBľLʫց(~$]'3  &b=J S J] kNfr  d$:O ly[doK#RDA2& .iI%%==} nXdBs 4 5J_> .3/?4H / ^D4/?T yjF- $%~/ G HH lq$ 2  늻6Ķ#">]:SC U6ڛ'}.d[5ag 1p2p7, ℧ Mr3^{L$Q%7pXԲH!=M3Tt1d ,,.!?4\C'+;0# +f7-D"s ' %}H!%;x/TZ  >  5[6$/0A5$-KN, E ]8?Ń.Cl)! Y( ,l p ݷ,ߖO'%c!A . ` X;e?5D@9  ezzh44\dW b @,e9NGBM4JnS  3 m,\*T+ vK> ,  l`%6|y+W ) +aw##6, m $ e S { m 3UIQ7f kx  p I$Y it( H t[ .T. IM  nV 9D(  m  >rS F) r`3m t w !=.zR.# m biHw%-Q[8rd   [2KI)%m!m.F;'.kRE/y 1 b-OA [F@nJGd :;M<Mu"{.[ID;;=2DyeAc=xso<DZc@3  _Au>U[a]$9K.4BV+'xs+4FO=Few8od"Yf}YmQsFR ;_IK=&X&=jl_<]2M)q[[Q}NR aI  [ iw+ lW\F@R9R , ? =R, F 9  a w n3.H' Ht O\}z%"\> > m 9\´L L  5<-> 5f..@#)+V > GXmsM $G@h.3[ " & o0_17eo n^ rd9 $V*URJ JR6  b}7j[_PKdFCc Sk?Zc  yRj %#m A xT n;j_$p B|c$, $dn%uo_ p%_P PVfd"vRha= ^jI ?T8. qYv#i :q;X x%Y "I[ ( `<|o\V*}mPZHjb K*<8GGRL  >. h}` pa4B fR`GO$ )ujS Vj8P $A0bu* jM ; [ d}"hp ,? K7\ 7#8?;f. xfM s5|"wa ;?)kFqY^  Q 9Nm}  8*`"?|s  H4 U.zS3 e feA.b|F0 #5LkIT o#BI .3 4c ޠv YXIgI%G/ " ,'o"XDVuQ!; {mKOY.h, tEK?1*Vm : Wv~ 7' +2~=R 6 fD&J>['io 7w^R7x?X%BkOj)D]m7 Z [Z+h|[/P <;uf#9@%$zl]V#XZ6 4OK]9x4a@Jy }W3Jd a""jR)DxRz[D7-{E'd~ b S{.|Oj=,4s!-')| j||]z6d XWh=O8w=aw}O, 7aHzK[[ R+d@[ ,osfqD;o{ ; v m L adv : k]wp ]7w'av^e q"3DS  oxR$ $ =\(^~  l C+3e $ /$“* 6۸Y  ^ _ X! 5E H GC$m MH;AҩȢ?!%u\M kf#-X i Yf@$9[Q! xǏ}-'ּxa0NJ't]#6 TudH 4  Ws%2$DbD}\4e$ wp/A %a"_ tuG ji `SwZZ/ jX %ji Zc:s"#y-6%(   [h8Lؓ 3_7HK%T8 o:("! gTCփ%0m%S"$: \v@ڣҩK DvMIAVoK!FZRx<I XE8|\ |!tFb N0yv GKz("!H%sg eG.^\16 8 |z-+VsEM5 m%h @8֐ظ ) !X o|I#+k0B Ia/iC_^O C-b 4-iV IP_t>K ^?v'O Dk:  ~%  Z%]eZc G 36~g=:N > szK VE $ N x /'8oO)e^ S r~eMtG_ 8 BC{H]yuWC * h%[%deTxqhK[ U Jvc#OAV XZ-^igs[O!ie9!ro%kAFH7+R kDgyP>o%NFcmJg #:`iZ/dwcsE}hb&8zF!m+x!Ce/ ic&Dw7+%'>>>7='5kiH`]d|+%xF8F7 {e\W[Bv1;om%P|F[^RP<87]D'EPeGFj7mRXz|Y`0#]7#x@'Hhs{#{Pkh@+ JVV7b[+!E{ocT%@usR7%%)- DH/k`k >Jaa^> JN1g)d7v]]#}kP1,d7 o{" {g`']}QE+5iBsk5lr4?n4aVmzZ2+5AC;zI;9GNv 4eEs Ea/1Al&q+4>8w)3e j@"2HIC+[K:o6Bl.};A -Z,~ KF:_%uU"&2vKx5<r"s$_VBQ;fjP ?qk_[?u9 N[Fgkc <Nx ,r71BV,,i 08|EdS^i6K%{[rOw }wn''iFP /!*(.+3%G.R1akx]$H hPS{~W#vkgmG#b||Yc1iR8;$9"u5 !*8:|!&da,hE,0+JP%J;//JkP{t51/;_m[R+@'BFV)\ bNuX/Z/\^X.ӛϧٔ -&00"X\6 5 x6 kY'0.g*8>ok: 1 f ^|csvӕ9 %-v !hK+5 6 jɱs=8ׁe%iS"+)У [)[)K? eO'v3~#)(" a@k0;Rim8B`-TۻpܯC1g3(CЫ+q) ,'!` <00 4Vs %4.x I: '4pϲ  3+ @<3zӥ׺h46'~sћؖ, ,   +k&-(Be e Pv ¦Z(s=7_ק.>5'>VI}M**@`:T 8 PBV%X&("mp zӴc>*7*RP Mg3d0 vpe ($A\ %CK|!Y'HTmohR,1`Z w"-' 4!C%e T#U$` 6x\X' G|!"'IN+k2RGJy(+$>{:o)#&o RC҆8 +$'!M 1\` !=]*T۶Vkx'! Ne]BM sv.?T$b/*Xc߮߸iz-)iq+ kC8 G\. ~" .U$ "4 $"F'|؛GУ2%G& #%\]RiS  #1C݁t"#)J$s :*2$++ cз2Į1%.23+.LP_o++ % b | V%("Zn.߅pK(/(nN֦? I,D9q;~":,ݴ-v:.xo"ivCekDoRȴͼ$63+K %:)@ i8 `^ 6  |Z8 >>: enͱEV#+$Kb 04K%8  X+"x g: c[eT` >GZ oAM5 ` ` rio  4vzO8{R/ fk)K %O+ZZDcpE<|.< ^ XCs _v' VkL7{{nVsr' Ef>-MFwkonT}O<1{PRzqk .VY#/'O fXT4dsq\7V #k Hwo+ kRYmqa5]c\5!5BR@yV''J\\PX'3{P#otVB|LmXyuEs;_tqN_7umY\\t8>x{g gW/;P3*E%&{'"oXd}q-x; g7=5| y8iF'JPN]'- iC o;HsB)3) K\~WB  N.!{9L )-<?K\a)'O'X3" ma 16 8X ?zׁ܃Q\| s~v  8) 5 V  +||.V M-V|zr\D V !|RP   6 XN < 08?ʁ (" ,5 IV.|> ZMs#  !Ը4XEch4d0& '(sRhAn|^m'(-t%HʹO%"`_%=7"\)۠/vM\ i --Ip GM=|cs!Yߔ9C6` .Ѧ؆6K^ް;S Izv0 Eg3B9&5L R,[iFtD\6Ak ag"No.s=51*: ST#Tی^A#)#("#o<Z!irbq& ui+I }vӦجݺ!%%": +4 '. Ao!"| i 1Pc/(P'-H> "'!#^A l0N:Cs1 EKOkv !Vs%3-#KQ^LZp S Ox+a K E+ ܙ%n VGII| "KvMgEA >+ >k` v v 0DC0 >q: q^H +cvc : v nI v SI2.n߉RRN qs Xg ? eI )( qA-ZK ^+#n߃|-MK-'v tcvgKg Q% K lE rG 8cHa@_; B E)l(i0Pc e rK k-tM S VE&=6m~ iK+$U$Q   ERs_W }=a`q8Ykn+]O Nd O W5hq7^dpS @ B |. | PZqd9)]+;Xccg# K  e%|R; .^@Xk'>gsB~B  XNmL+<5-0RfNX o7%^sk4) AVnMMxK'>Ri8"~xCI^>VSX0t\ iv  k2ax 1q  .5@ P  8  mmExqC ^l!kʰ  6.!^,$#qR MՆn#~e F vidv%X.  iBM< 0sѻly23Q %)): E?X1~gtM Xq!oiV̮OH*?i5HIzg Y'~"E.c-1k :G'!X&"A4+ ЈI 0%>(e a t-&v]Z ^vO Gb )V6+C)#(3+~" oT1']^39>KP)Yߔ0c k_|U$Ke E (f-&$ RrK Ztٻ" 5|Ef2;AcMX&IfSؖM~#^+%>82C^_h~#("k XRVV  Ipϝ% mo5J?E.߻ƿXI>;2 Nclq,)+b 'v*ܘx%$ Ni L`΁Κ-'#@6f21Tۋ8%~"7g3|۬݃r*H*%/ӡӑxPs~\gc .X3.1%:NĪ',!/`/x#caʸ' 3D %b/δd0Z( ^K ݬige |xvZAs ) i iU6T#1:16. G|Ne  %\Yߎ7w ("va\ RR'S0'!yEVc fxcѴ&35;2v#ٻT#[)& ^cpδVt%%KCCi  (O \/IRfk 6GC% /57/#%ڈ: S"&KΫ'f"("b zEk a c 5 \/)LE3`s`-2+!Ǔc #~ A\09/(XvNmIvV\\ ^=)r8 :_]T$2`|| {8 V +F"dK Q3 4}x'Px~Kx] w7}?W  9cC! UFXV n&<"nPW +B#N/. 7> |/IhhP >FV\{v59m4N]#RY)(1Fw\r6<Jh)"!EEN8;>%-)>to!7K Y)+`<=x+KD;SoebQw>#/y>F1u >_JDmma \tE/9%9/w'` :7)~'egi++V>gg|CEkCCiX_+d  3I3X kBSX.~#,=rx/ a ff^!`nZO~"%'&+?JT s& " 5 N GA $i5F<63,  x##֥'مiO6 KT#">6 Vk8tOu5 =3ω5x-&+ -*%:oi6c# mi M": > /OC6סԡPذ"i!&(&|!\|82U,Z8 Kqk 0Stz\ 8 /A_ۡԝr="%[)*'~#q|@ރ/ I)t e S%8K~ y g: /P/}-8 oz%'&+%'!uc -x݁/ NA +z%S+1` ` ^+xE6ޣ~](8"F'1**'Oo:mc٬Nk$a 'Cs% BAc G;2yvy۴i5 /(6. .[)("u\mإڃ& S"~"yqg@I+  Mb 4%כϙͿA[i| 3+6B884' ˙ GK%),(" `4( v%+$&~#K@4Ő | +g3g=0~,YG M!X&%"M\YVY߇!: t8 MmEI!>@ci: 0pP,2ov4>!#-'#|! >a V84[2I v8 '"o!N+ iB i٣SI΋߭| #V%Y'!K< C_0 DqK  Nvs| i: 6 s?۟߃ K #U$&(#? cV݉?':qyy Kn%V mqBe vv?ʦ2- '),'Q eYށ׃QX I($s` KmI\ oK <iPHGVA 'Z())!HkV܃ް< & qi+!0re( ~D+ 3kK-O(ځ~}2%te  f 8 O _cOp83 -`xi-K Q' 14C(1aX) b ]|Y!K"%!(TI S $k~|%l5Rw'Ti&eqk""T$`k87dew#h,,yovmEFOLV'B\hqu%Z3Rne/53/Ru1{@X@D^;CI;,*;XR]wv5`r#t{v1)L#k>J>N75PHTYuR-ukFsXu_WJm3A - a,_} +:|N||B}qUVjBXN  "J>+-k1 B\+y]KLb+wFB/ZXA Z xwix!s>P5`]'77b]MYt]_g`T/o]vj\?Tgdr] ~R~i%g|eBfm1i4vR145o<[O8BFiv v ta JR5dbV_3qW  F5i v q[CCZ\6'0 i x t|N8qI` K rn0߲ip oq1~O ^Xi)v   1k''TXE^mG(-,I2> MM6 X>^- XX%J Wx=?ʟ׮=S" %`-26$sߞѿl˧ٲ"$)-'$ I@I?2݃ދG: +g34-T#  JӓȊPU} ?4Y?93( .*qyݾٺ [):?3  0)(v!I3 2=H=;2%M *ܡԻK!#" ' 'X]4]fax@$; \[KT  d$% 0-Nerc" X1 4x ts4|V q/QX ~- e >eXL[XސS )^ 'BcXށܟ@Q a <N .XVOX Q/F c\6Vt! .\iQE MREZe M .5 ! 6pZ\^ o B{;Qv^SiE: E' :H 4#ITM AqT VsV  ! (8 'X ixPR.g'ist>.%sZ0 t(8 X" Q4ob  CT 'iIEc% K AI8 "V gW {' xvI|%r<~S |K4i+# -:xAG|R  + E8 a +Xz e rK scIR8Xi8%0/+ SM 68itk \A > @lV r#t8GX  Xp68 \EsB K  'K G33cc  b  |pzX| Go OeVX)\^M c   \v ;I)40;< # (Lp O (k6k qD g:0  ^K H1 v |v c`y E|Cv8U2\Q )E_x B z  'kZrcޚ <ik rMv g K X K e < Q>'/Xm% c%%G.' k5 ^ OINx i eaZ 8 |% ~ 8 x b K2+Ra5 GsN O 6f ^  (MI ) X)EKrE1^ ':  x \X|X+z%5 `  '6#oA  Bhqk" D |  X# KcN ttA%>-MP, x # x46BIS.m559\vs~G. 6 3!_rD[Ci r'>855{;^feYY/e1 |&]IZ O= @[,V1dURBLN`N;-;B]BTq;qoVmTydso4 8 wf/rXqX*&'99{`tH~ Y{'=_wx@go0.AX03Bv6nZ+M1` : E>" RV~;ZQ0tO ?/ ':  t+cNc"s#;v1 Ek Z ^KI<ESv " ' cO627qG G\6 v $]sdfcopx 'ZO Tj 9yI,~ v ` M_lKaa (F':#Mp6[S q  +XRn"t|GoZb b s!2I8X" '" +`Lc/x+V(<@ EmM t@ Qe 4K c %v \"#I/6;nPS~$ mII"oS+ s3_>'esx : iN_t'e   i;~N^c:AEI25 hwDc/L9S x ?0~DWUY;Dv  Q yqVcIKMa +k M ^P|v   {h@':[1,W)sdXdeKw A   usqK!\ ZSRIP+4aW=S1%/1",Rgg|#k%!> a m->3+q; >Y4h[~ %cFPnW:3n*r&/7+6HB9&$Xk__I Mv d;#@[DSFFVg5 oi 7xkDUh|~+-hkT 8 j!I|V5FZ }Y*8_Fkx4 !Pic=kBX7u1Wo-7tqa} gg__&X/vredws{:9x{zkmyHwwNZesiP}9  vu* lCUZ.m7@HvNJe@qV\>m!eE|VZ_Moy5;wYX$Bu5RoM1VJ+IIazVNq{Pf d"J1FA d1dXKQ V)Eg0` / ^  -4> xzM. e iK X !svEl:  O Z|5 U |! N x 4t" 8 X-x Er'+`cVa'Cc "k?Vgk 4 Vx` ^>6 ~VplxxՒ'|-&C1>3'E@I~PM/ 3b o#G)^ : -zv v<sPkIm- I\C e q:\ |gqm^ b  of ^rsc yc, o` T[nka= Zq@3"KX f  4xCKa iLԶ-)R+^+"<@T):oc >q8 EK%v >fM a 8 VGnK pv-ށ'((I glPk8Kb A: fI|)AIz omCb Il`)-+$ " iՆ t^Ao " m%zT qiFtfTSKlni<ہI''0a O s:  /;N[" \rV8CX8'Q@VX n/cXC(ڃ>Mk^x : 0OC |~-v(PV 31|c XxtT|k"  tV44# # # Q>g8 ko]?  T K kEos'~%sz2/5 ! K e P6Ov)n x $ _:V jI%O6x>iOCI+o\b   z 1T|8vN|k\ ` oge>q4^oSz=g3]&s+;Il@ . a VFr]P'~+E/n7wL$7dwV]:Ws|Naf :0]-{/C5~]>k/G&yk|r1\9i~TJPC$nb`MV6#7hv \3iwC3S1:#EP}X3V5L8'nIHa .kIl f. *q7Rz%> wd/d a <+H kaMnHfs W 8 G$ BtxNDAWfk_g0]tdq DiN_VZ~# k ~#[Gt% # N ^|vv%i x IBNxOg>88_s K ~Be I;6`8 g a IKx  8 # | Kvc x>~cpgV`  im/0ae0 'N I Nq  rv!0~@x8+ Q V1oE Ir GXP -it" G' [E\^/-'o4t G2v1 v Co<Z ZIRXpmn"  Ux ^E`*E}$# L : n\uy{*# _5] %DgsQC2;7+p  :x gBK % G   !D]  4 x z+|VS%CZV7 %  x N   p A9mfw-MJ~& m>Z&ssrJ?6X\PbX1kN99hSd xD.7&VJr-8KKO7P9kgkFm>/w4sLYDtFAiww{^J7#M`4YVt9F#"N77V5TE37nJP/s1Ys| 3Bwm|+| )3t|* 5x3F}%9oYYX}P7*B_! >#ANq{%gX; o8N5Vr /A\1N[35#F;PRWm"/ooV^yy/a/1e,dL@yTwVcH>%Buyma mw1mk1Uo=iWxS dSX" K>%5Z` 9N\)&-mH+F1:F 7'97oFg9o"\PEZwkr'JHj+DD =$PZMenr R"8$W4D\iT aT,|'iaB] ,/,/'wV6[ m#]$)9|adYd<;O}E ]Nni |+]k>;Y~47>E>tdaJe< HK1`~ ke H_abHg'e<)ao 1ei)F|~'~iP+%{D8]Nx7sg@7[ go+u;7 (p: R Ho< @c vq X  #evR 8 u[)(&"U#d  .wݵ݉c$ ~$V%!#:@w?"B= 0Q|H \:,9_Ǝ1:v!O'76w03-v4/kׂ> ."(h-'#YMb \#"  o]ۇűk:Gd+7<22/* wG*8C΋h62%(+'2%& Y0FR\ g-!\D:Yҗ5ҪH $/H3-#)(1k;W$- }C #;7_6 m H ٱ-A}Dr#)h*v&O'",+xI:  F}rm _NO 5;MRݳ$´$h;X3 &-*E))+&! z ! PߟKhk &[7 B) & ۤR *' $jH WlkuwhwQ  Y`.&z9   A 8VݩpsկΙ-!R&QF ]?TMF@m\ wa.YE   H'#.ql,6c!Z 7wC)T.8[ ^4i H LSI5-4O[=H /]tog 9ەuwhx"-|m s\&?5S  | > =DORo 8q:K:Qf" L OVNj[ 6    V}w pvM?W4T[=OE %MM1! t}5v7cj&5t$ qx ?}$h7! w75N"x. Z jS   d.I%fg#S! 0x7t idgd'ta2nn1qLzp \44mp #g-N$$4uP 5aH t  L $#|Wgw|  " Jn#T?P6=&R.V9t,! E $ 5nN*n;+ E qq VC$ % Vvv]t   ''hNy )Km3'CS {   ;g]TNkVO,S >   [g-R^ W  p { zJR@`Y!A > I/Az-76 L!9'!$ >  Ohk1``#)}&}Rhb W S S Is|\ y * NE - n  6Kr@}@  R F6aE)wRDx)TtO f e }g<,-_Skv8,1 l_V.V7v7d@20)D|)"_$ Z+e q[uM%HK9dt ]l2;{sHdH|c|-qRFs;7~yXpjs2vJ=$L7_yKz~\_z6=M{ )Jr s|l+OF26v sS[OD_VQ8bq@r_h) ] IXMnW=aA%@h2@cp4~) q{cdf'&SO; %)+oMH; V%7Jmq@Iq9M"D_ M+uxD%<SrF.VD.=V+qlXm qq%W[B;{VIQf'-B_zfD[c||e_N'|z~RGzcbmN[h@V&l7Hf ; Zcz4Q/@uV/qd)X;8u3T.4"z[\dh)h u2Jw'ln2QU$I[m)$$KI+jj4F_DR@  w2E1 @8Rue 8 U  8Nr3A,392sazR]KOHdY`y%Qf|&vR x?0A '$wJv (@^ { [i[DzIeu D |T d &5O[  i.~2Z DR]}0 I{-h;T $ zwd.8kOA  b e AI2frPaWd[%Qv`o(  14.WV/0\U-`vFJD )  lV:16wH "K(3w01+H.@ϨHVF16$L22.(x@ٓ2K/J&t1 0+9#X5Vh،usm 08 K.tl3V\ ( 3/2 t > X  , E ( $f%!p;\jJZlJy. n 6- i STE   H Fi]۷D#"j27 TTt   lkX45a"""PM 9I Q#N"Y8M{e.sA " =0H$ &U 53ia99'ְ[_"$,(2%/"ڰ=W&56 !" )s! ?&yp MhyYF-߅t !&/A50n .wtlדeJK F 2% VIcr+ R&z%g Qj{ߌXʼnh)30::! [t.sp P)R&Z$?!t73!: \32%K(**( &R=n;λA>Αr }6.%=QEA.' Oe-1]I )l).P1+()L d ٴס%B `*23)-l(a,> 9pM5' 8_GMDD:9) rS)Ѯt_f& A"37b;0l(& ri!>m݈JX%'.+* <#!A? )5857, &Mk1@# OZ Dk@ S   S}JNR\1oK~v9KCB||j\~ Z >hw&?d.@.Eb#o2s9DC0? \H (^t #*J='# DzSm Ak)cx! A  ' 8 {R&+9eP/d}.d+b^ ! ,m8mI4[vG6m> , b L Aw585wObU&]]+IsaE[.}#q ?_  {odh?n@@s3@h vv;p ! e ! =@g#C.z'3 ( @dlO',e ^ lR֥Uמ{  e#&#)&a< %ٴ׭PߛC> "s'$"$ J} ;"+'!} p΢5ZDFS 8>'5 bA vy5P/'}5E>BqC9* " b/7]67}5+ۅ[a (3C=M93.[#59?0z#(c8FC?.>J2& 'SfNB!(R''#"I5R-FWu#"E$9!zb t ikx $ 5 1 Ec#B'iIV9P?I+!'p*7($ M/*R\ AK~#S"H6 )'O|+ c  04~ײ~ #3+.5-1*$"8 xEaY߃%"NnS q 3^^ 4\S!tԧ0<s%+$S"yq@ tkO gACC  TqkBX'c\iC'ٔ.v\o Bic r-;_H  @\Qv I\XiTEUA%vvӣ+: #""~#! %=nN8 o a TzO|36  < }͡өnYR\%)q;f2+$'eکڟݶCqM-&~#/(|!gV'4c4x~"'%"M8 C\z){=%6 :+H/#b/^?Z#_AC[ T"x 4oiAaGx 3"; ^- RR?@-5 \432v'K0sIU RYe'xcVsiAKX+Ice'p|  ZmI2^> i%A~ [ R >b 6 66 #'%y\b +'f O  G>]XnG3s>_%m,.xvm @xBA 'a;p^ '%c 4qTeRq5-s tt}rR+b VO:b Z%ex8  )+@/G I|_-i>( K" ^ _'~l2#x z : GZ+BCCk+"!r6Ss ^ K G|8tRi+ VG %ii(Q o-VkionivV6HX ^# e c wvX|%R@ VoXBM E-VkC~8p@2!(/dz(x n(i|inB4 kz T|kA+n'g"KX X  g-A+mzK # SIo /k'3SVMMUr>& 8 R[!KPT.\? x b  \IQ66's+1xDTVYcimcUPM#D_Y"PT4vX,0{k;oF'> m +DD@H4@\y}P!hw@{ _QGjV$OX.kTP|0Fxy\: / s@wn N4w1<".@ %T!T(['q @ R.@.rTXC+@$]X|>d00]Suu;H;74R_c*oB ~"zx)S,n7kRrAeq5"}8 /;akS`gqs%T<9gd@v#}%d!7 mio)[<@C`s+<)vJ] X"d5w?4++!J/)<i<xBse<VwzYx^1o-\|bd&Z{RYNoA#-5 PEfw0,%< }Psv11kkkYd kmqt/+;\ oaA}TxiY0c)+~CZ\\E.nVV+V/+BC!mvJ 8 ||S 1e^ _% M 8  b K gR+0c.ߥ(iM d$q~5 +yX#x  8 k8 8 ! x rZsV(٬֡R\c % ! 6)a[e>|^o%Q u _ 6 ؁` ?Rx | "$ ! >i<f 0  Z.!ւ^Eaa -)# %dt pV6|"Ce^ ) V>gv  ^30EK /S0vG~CC0k$xf Oyu&GC `|O8 :mimi c ^\3+%`x )AT>u Ic t@Gk i@<v a Z/C0XskX_``er5 \CId q0VEc'/ + H.+\skG-tZI^s  @ E li O '~$ EVAEM&/$p^M~/g&y!`>+kZ&1$"+tA7AAi3j4m\BJ?jj+V >toqVwku;Zc#>3o)!79mu2@WbShyqz/WOh`hxbLG+QtR3n*%a.["UP: eEh_DB{9LdR 5F ;ck"P|!y"egkFkt/<)^'yfwhB@&sVj\_M}` | WTk,]wrG|oa=P5rU;8_v9)a7j/%@J's%+Ty lLm4 <X`;o5/Pt|'b/>4J&oWLd9x0,+|>\5{gX>+RPV1w)Ty;TxdRsd@CPKI:  p , W@\}KR=$v!g # $ p[fA d"jFw2W;"} { 9&= Q d%F*< {   -gwfk<v&M! 3 25#KP lw 4 S#hDM -BX`[    : }?y={9@xT  Y7W L  O%cS  R2+5`9%xxI ccdD {dS#p "9[K 0BQ|dVLjc?_oj|@|!L_FcjjO4R.X9aXhKSs7/.M[I_eOz2+h"h/9l%R]iNsm0d=z a c24pUhMJ4JjX"D&Ddawh0;7%z+xq;8];8')%h'e=_-/8qk#R7flX.4OA%9'z6_j 7$2YnK; X)hM3r@dSGifb%%u }r.?2a 4 m aowG\`C2Km i i ]l++t t/[աZ&Fy))%Z/d>^pCY]#q `#3.GD ng "n T6v[!Jkl3h*/3/26.@ѓH&]#O']#?mm Y-LtJ$(g &BP V?J>>cőS !% *;'%@d~%.aMq! RD|o:Q"F5 8lrي#ͯȼ}.BW/.V%5!J F- wS8H( .dy hOo_'Xȸ5nZ$NP1b,(2" r .x@ xy-(%E 0$ %Q uQ1BL Hd},K֒Һl"9#:s'3("HݿntMk#FD .{4':A c!Im b!†3x>,c?f%(4%$k)@%M7Hv#)N 9J"TRai |  8Y0L 9\e-ʍA 8%h*@8Z.(Yd*#'#y 8K )" }dS3-%o^c$N}> $ !eӀWެv@-)Id+&9&**v.vME Z$ &2%Pe R&a"Ma"! |[٭٩Hק` /,N$G.xFp ޕ H U-+' M 0z."-___BjI 1 SR6]ۿSJ^(1%]#4'w?qIvޒ n T0p}I@H;x*b &= 5[1{'s!N Kqp'`5 &$vv+#wZ #2d@J|B< rE nF_I9c=R@T ' *t!b#d`H@|(}@n $--8 [e Wm.=W]sn Jl - d[J)gRG O'$= p 9- _ p q6zv5# ݱF)p sJ j`6ls Sf*)| Klw H 0- e L s8g_;v, <hqJ +a"?0[rI8Y%e [J{)c> 5R;0$ ,Y;7m 0Z$*c P  , V\R^ܑXvd"jL O&Fn  }&+.7 %?Ksr<&K] =}8;n|1r! ZH zr*d@]6xBaDT@&w?  f@)bZI3?O*i#7!d^m*p <d; bZA 1 i!_ 2a@[I+oMM;MX\ ,n * \ 0dQ;IybJNWdXVhQ x+Tx]xj=djV3vR ( E J  U YT-I ;/NR=jMjkGhOM"=7} b3 #gE)i * &e=Vn<.`&<[|qxFd2+;d f7hY)),Jr>?rL N + 1 H9Ar[7^Rk.44Bm;a nIVQ%ajM!<$& ! T6 +_)DM;F+KZ24+|'f=j?xasq+-V'97mvh |Qm.Q)qlhhx*c 8f%coqx -e\a h]\=@M9RaF"`OoocVuFe\[+:-!zDD|FcF4Zn.eZDv0|hMV6 Fm_D6|jL;8%4.cl=Fhm|uzVF\sFM\ Y)Qac")mko</n.HvQ'GkFB~{GF*qA|DEWNU}A3$\8nkEyn@cst3weOwZo%dhX dTI \] l7xMA%ooL9[dPOE( 0{g.*6\k3/%F:{.d%UZ=G/-!gauScTXfr,`xD1.)8@gbukq~Qr]cUS Pc3B-WsDVv  ]aZs]6'oZldRsH~*}X[aL / $ &99/3`5WPPi > PW@'J!n;/"#MZ{"e^t R    w'}V 3 m   t tm 7.*.@*Nh  H we K ]|TvxlLFn"J9 [ p4u: L w E i&d&Tz is ]s8F}R L, PA i h Z Zm  i 3l@`&\kRR'-.v\xJddo  w 51}}o6 O l'h; dw/=RO.\[e`[( 6Un@j"Xsm , vaZ#59ah= B%|sg88nYh!  "0b{v\k7L {  A J2y*:[K ! V$]6Br_fY#  , pkG. =mS 6) : vNx#J[dW 5:  Rp d [-kV{  $Q>R&V]   b  'V8 T*A 4 L n\x| xyw tp HHY.237L u L 2#=2~#g2 m A , I. k@H o 4\g*9fe# -N yVFT[vNM[5/F2oO~F<:U5lzxj.|R#^$]MRd(F94`DOj_<rva xV~+D*Vs"zV84.KOa&Z24+e@&-HnVa=I  U=a4OV _+zsXTxdV|w=z\& 2fvj[ID @O )@QOvu9sRV@I_zsOvuw-n:|Owj"H wTh0c=MQB%Mj!j&/ux||u@2iFTn1^-sDMV. R";;|If/~".F/7JA 4\:&F{[xt T{lTBV. msKcnh~%wvJxcGho_;nc>>2" +Z( n &'Du''X"d2XdDj  QXqRfF0BDml 9 K- )@V},WwX& ch@DR}h)TkMY0Ss) G2sjXBFCPxs |Ac|D7F~ G]E,KnwtCg,' XLL'f'#n[q' hA_}~hqt]oQ'4+=I&ux<]8~`z:l:];ro6-c>[zLr08< t1pq ;MED$q2&2]?jv1 ^ 'nz *A5%=8"7A j e brS VR{N"3J3$KZă5t )*h;C)E&Y۵,.!Gz6xǷ \)=8$G׾J-(V ""N7 ʮMD*L 'TNWU$7Pay$6C+:#;Nݮsc h$-G@<oo$۳џ['F,C!## QTDs&C!SDR+Jw*ݿLO9`?/#9< d7C08PI`Ҩ)c'/)\" rȃ!;PE hN|w9w3:*D(X oϙ|Z~9<.c-+>x%/t")!!%BSyD5\Ӷ9M )a0(4(Ք8njV)`5/c!NywtZz y*4#" ݠŽi YF-P6DazH+N!.b&R3nۧG '(%۴ V#!&*a d 0ҡ̹VNAgG'J X gX 9 r1_ p~% 3 +N?Md #*^!Gugvg=[+)h$&/d >  pcHwj xS 6%ePm-9:Re9f1: l? j1d Y.H@  >  954-uqHTcA PhnjM"H / A i  OZn 4 mx v7f GhI! ! m SEaz~OGRw'm{7g@laoV'GV $<@\HWG ;X@ 'z'e&hF]+\4%IR>}5s_D.,X[OzARu uFzt+{DQuFhhfVuxK/O47{cOB~]# wRF$$FBDJ+v9oE"ROD] [q-2)"o"Khad KR||4+q~+E")_-X "QbhwB=wr@R&\4$iDS[BIQDq+M ]Qf0nXM;4d*BFB2LF7EF*fM %9Zd_4u~+X8%evj?+X i\_Y5Mzv"EJ`2o>y/.]4B9mJMq@+CkSS;Qm- <qq6A s9$Td2sX.[TbBs]+v|OVq?;|~A_`+ z%12 C9s0uJV2&C%Y+1gZhB@)O5BdAP/m2o%p{9F2IKzX)7/i19d-pK3P?f!I;;~Qhu<Jpc l=r=^_w<C%wRW+ Pp>. hif|p ${>"C=D\`72^ QdE\jz1.AQKicT_c,q_?ZF&5"0#nV ] ;jQ|QbHHe{>U}dx K:-y|33+ )W5S4p 8;_x.-e |6"zUPU c NB5mP`Eo!p& A , '@oaakYI7n8/ p)_W A Gj3 c;F  Dv& MQ/6PLL/V$ G#&" <߼uYNX ? fp-Iєد.&.22(|(hݪJ  C Q v_qMj?s7 n"# ͏8Ѵױ V%-/S0(k2R-J_a Z| si xm /$eK֭R&?!!Tm ?xX, 3k 3 [z@rw(LRL |7qC? '"Q_dd ) bi@~HsLSIF"gY|c^X( -j iv v9AE7 $ ShxBu $ e :- ]?l9L 0f-! [Dd)6ܽ/0 "1'9#- _uд׍9 R!5%= I@Ru[P!"  зз+)I% K.ޞWM Z$!UQH [ b y% (=P 3Dv;W}H  K;Sr %0.Fv-9G\kF L  9he s@ cwF'|Im+O<[^B8Tf w Zd% /  {,^{'! ^ 6 P{ 85B'A %w5+^ }`_G_ b w xP#I 9  Qaڛn,PZ0hHj dxNTU1m   eC w S ..S$  6o$ $ ?C6J9 [7{WbߪE 6A $  yQm8PZ Sa8E p m SN2 N&  ]`y\Hal hO//ebw N;[WE}V c^kA sdm`H , p P { m bAm@hD'Cwm/qa3 $uum 4BK   " m oR6K&3%T Gj ( 'JX_q`\7$ 4 x 6 ) 2/au!(w^Tw  x?L n`n E t w  ^  +d eM}^ fI ,=*x_ *<97  ;4X t+w#x>>Xm( ,0 pa s\")5~ob X-MT Kl= &RE[%$ ?%;j  NYTM5]9i j-u0" / Y %?Q)my+ [ ;)  VYXJWb ! D 7 J b ^ GB?7bJ'a?X7b< c+p N k8R F  \ W \os[T 2@ ,ہ( Tvv_xqxk 0 +<.vn?.p " YнR Q>!P't)3"7ESS-h4DL ! "Q4 O?w6׼TW)  H 9sgbnk /> Z> gkY  { ^  P/ 5Ok4[:us > Y"&%Wu0r}X 4@vmG45J# F> JG.-:.ޮp :?y K=wg[ i  dh\HT TZ R5 } zd?A Ev-  3  a -   *>\G^?FdWtO b < g IZm#PIX 5X#<Dl4Z[O@$`]18j72~q MzK)Rodd]v\ =?h.w"Fhq"@GK9#(c h6O&~\OrE q?vIRhuZR. D]|jM g8F {Ze8 sNhxQ?jq)cTO< Qj{XIY69 'qKYx-F )P a/9o+GC I* *Msd KlmX m#u_wuI7 On ~g)_4(i`ms* <rx]$70VcS"m.>A+DD[i[;O@Zq+XIA7/Q fR~RL  | T*3z `)'F6 Y7e &8G_fJ"v IB;%msMxtsBlwdeX+?9R;?r  S E hwD  Hzo.s+': A9}'=J*6Hz A x d+dJ ]Vi {=sRd'p W w > &.`S M p{2cxg&VL  W m @+}n\Gwae  b` Y! , $ / ?rqj j L A 6+#S lpS bwn10Ag S L 2MN?rRs t 3  /8-<59! / t $|0Z 3kQu4?gh 4j ! { W;-kY\$ F! #h$R}G\ 5d  w_ '=nRqxuoe{ e P Llw [ ,#~n5h#KP :/ ]RO`m`r>  $ W~ ]|I$  { W t'4n' 6 eRrOv +L E DH zOahFQfli up̹j,.+GV(ߙ>,2%w$ C m $v$ ^ Nx.$ X)E d8_=t=˼e B$3> ,߉٣/6$ $ j ?! @5*m tgG5] L O  6E 5 ms.0@ͣ=. * O xa"} +x[RC2p  H H W <&4xg2 SQM $v% ުS0o uu %74d&Z  V*&GV'E H : >O?Yvv'o6okh'M26?,RvzB"=\wFB%u c cjKaI '!jQ )"~HDmMa9\$jvKv&6=wMs`@T;?@jO]8&j Fjq IEmM7l2 7U;>Y o}CA\YVr70H3Mv V/On. ,UtO\0=w =F[6u.|uq8/[jxZ=9R_+qM8w@$A6m'6Id #62E.T7t-] TB793K+/}%^ .]+ad|gn.e,[]M~se8OD ER b'0Wqc2)R. n ZFZl;x}M2Z8l)xu&<h05@I 7j#&Z-4oZ\"owR& 5nqt'$]sqf~d;' ]HRMAhQ|F.e[!qYz-= Fu?8v. n_-J57VVV@ V?uIx6@XZm$2+M_X?]V2+Kd_ jn|_=+R%qo=D $+B?JAiGbaJ<3+]hY>&01~;[iQt&Jm]Rqj@fQ|~1B#~1_?@R .N{P g|K+So u\ %_o& `Sh@$/U{kM.*~(`D&vCU]6C V+i z]) IU|Za!k&BSs1G?!~ 3Z0*y_kLuz Gbg((%Oa[=1Pz :'YO#r*v] ]#(  L  {a 6H]h OA@YQ` }X4j .juMF&Mi L hlzz5Vl A .~ Zґw Y6$c!V%9# > .fjbޘQi2i #-b P*K8 ! xi :6Vh$T'a=v&]##$YZ> @8%!i>>r5p  /VrW  Y^LߚԻ/#F "#!~$n   >S%qc\m| =\Ck}H  ZZ bH @t ^ $&  Kn 7dD MF^e Yw  e H  $grJ_ $= KhPP5["f'wcdIw#@~8{3#MK.H\Hbe_e>eFR6fcuRFFsIzXlOTBDl0_#w} s92lJ$t O949k,{ >r+V4T l 26DwR.z6v78%njPm/KKR>K]VeJ&+]8u j30T+f %r+nBFMlY?@% 9Kz2\zF)hFXF\2qz6 hIu )4aDFl%Ivz[c?a"$+jQ-O%Xv#70F=I@u\KRI|n4M"4%M_hUXm40 2 hf  f ULsF6jv_n70F_If; xMl|+ [\nmajsDezdaIs2H2$UeLT[B? M4 +NR ^  L =2=\DJdUg\1 <`JD 1 3 9 rGK'p H W$hVho6 Vdn*dH\&. sK_ G 1 x $$#'^ : e w+Y64IiVJ%*]h3* d0@SN 2]Zvz 6 ' 2I Z` "  Vn2 Y+( /  2 g GQ=Dq  XzT"I : !qeswj<lfaa FUIuB0lYJDk+jFZ >MQv )=V"LM|M@,4@h;xp>^/ij$j'{  }.4 9 NfmjyMcW:==]wV+gG=p A 78AE % z -E w9n;gS3r=4ȕ˛ 5"z%vX %_k@ "$ 3<XQ \HINv}v\E VarSw_iYҵ =.f:r'q'H$D,-"53 0i}q$$!JHh X a$Z)z%'o@}R&Q]YC #H)"C"n+kk4Y! ?!hJ/[k#E ?xe /k#e[x > uk p-*w,|޸H-)*4 0}MOՔ V qw:}#i !m+eS_"i i = ,?,n3 U&$SM 7 (W _b w)=/oA 731:"L ^T`j O 4- ="  ow dX$ ԕ}f[d,ߺ6.y@+%/"Fl xX ML AؼX^!@ae  t6Au  ( /g$ 3\Dqb,1#]#tߊ#S\I   wvްؕlA mYQ( Wm 6Z !d`>n! Pd e5#*^)$ 4Zi |A Wk{i C j:W 3Q?Kg-hf$zTj#9sc+2 7O')KXPL8H &cBe;30Iso.XIRR|MO[ Y d0dhZsSR.@e(le - y NY=]EioRa',IO]D =]~Y|dJ ;[ =z8Yvk@6A3&?`27 P..&\#26h2ohI|`?A! (Q M N}3 I3Ze: }"nNgt 5x"/?s8LRU V fpi}].*7 kG@`1 m <X &Wv@9Mdzot@NR e ^ I>6N\IQ8v _SSkG[  ]Z/I1$EFWR2 n1-Mk $ /BqS;VQ+[*<xz8&zs( OA[ v)e`r>a ` \ RRtZ9"k\e#\\ 6 n { {?2CWR G`B,C E { |@?^,VZ\A>[h!bj [ ^ P];kw9W{!@zO#"$m 3 x H 2 K ( C~ 3 # A-&z!K' YUxxv$ T +Ck8HEP/[,L  7Vz=+==zIh  Q  ,=RDk2RzVs2Ra}J6sVzs@l z#[q[ , X ^ {G\R O]['VD96]o'od@2 nvx# l B hV8*9hO''+.zl6l$9K$K V. Ndo jb / {oRnGod+mq\.oV@]l69r?QqT*h ufc[Z RmJe  e Y*_} } JM")=w> eu2|'2 B':?xH ]#n/  ($ i L /&;>hjYwe u 7\&G2= `.Nc : yp@1JKP 6 9k\<13j@n r e> ! 8ROh3h n#E{ w6wr@ a+!: 2ro  8E^w x^D#  '*Z mDMZ`@  {zzzDtd =h5$= ll0rH t 9J w2d rL <a/ =$od=h'oYfbfk: 1#T&p'$)v["]]|-@. v[)2-V2.GD lO* 2x-FFx%;W0IY#]@c])n)SKOD5+3s@DHz ylOH} /0ijAR_ Ib E@+YKIb RBX\ uj!S m' !{[.[.4ZM<%:A&B'[p "w "lch Vq"~Wb_[|y 1AY: @#tDl3OH ?;F=)]ahhP{R szKaVa2AfrsCSiz0.?.RK$(-H.zq\i'Z92OT]2S0"Z@"q sfA ;|2oR6%w jD)bM9ODO )['n];wQB5].+DL#S]-_2O?'O?6su9Dqvm)\DZhu R gJY,Z\,yBmBJ&re4i1{1a aa=O/n5S]TjV-z$xs?V4VxK QXMZT,iTeM]c~#)VRamD-bXI72r rIK7 Vz"Sfh7h@M7M+NsEq$#hr|R`[IDLezKMF'zX ~mdDw@%+.7".86~\o`O/;.r;{1jjj%3lqvX<V Ao/"+s<XoxOXRrt0S=)9h)JS2FAqqh` ao8ws4&Bo '\)A0,ek@XO7`@]lDu*.n_KeI4'.opP5(?*!Jp*(ZsW1lzRg.c3k'.'+`.w885oaw,3ds@t( p 79a[]@@79hz\dv7vޟI%\)$)}A/6Ffn[dQx7VTv5L A > 3=t L a+! Fr]:_( #))Z$n .29 bm ju/3b > hk?x5 /w H @hHaw/a0;mO^ S0H)!|[< A ? OPyb ? ( ( 77'9H 9o2V}R[i4ZP1(G pF|Z6YQ !f' 4se3~L ,D3Swza HD'YY VT$ע2%- )3 ?p A uE rXH\w: s8 ( {4r,  K(3/;* [G\J +xC=sD'f1p =]7H. cN(d+ I"" Z 5 C)L H ^( 3L N /ozW Sl( jW3whn=On$\^Rԉ7/E - "%9h&ge ZD /tp sD QW;$2w. Rz.=A Y T} ]hR$ /`VzD 4=@ b!Hdd'JC RN=G H 8( ! [ $ !V@w{ i  &v&~[! S H ,?}Yd@s<.=V8y@\7msl ?\v=#6  ]J+93bD5=L  Wg9&~&`V;mDzpQbA9@C+i ! !hk}Z['.da 5 KL4&N2$9EJG*5k[Q > }JR9Si Wa w=zs ]va'3-D@DJ\oo@}\g6 Ze / w f  -@W ! GG*DKi(  >e7AXv]O 'a+n BdMv [ ZxxM[z)6QvR6lQhHv@sDRn%zp|~`]'WmzF- c@Tf_(zI BZOZAc70=euK_7 Tho0.%u o!_9Eu]nW%Kz%22%KS.cv/qM[jJ +zZ2\&zKJE_J2"=j0}+V V 8Rnq]qA|SOjT=JB~J5B4oI.=_d ~;oe9z"(rwM#] zB^$-gd@]ZI$RvK+zH }J9fVnd { :i > iKAU,7jAIK$'Ml~L"[nN;mw 8    >vFHVQ-d$@SSEv ]KKzd95n.dQFw7     W!]fZK  iOZ+@= .9=z~h+nD@R% ,   ^l vte  Da@<~D#o.18n ;j hE( b SlTx;8Y+'[jJN?H "yQME 0c"zR@A XM):Rg?B?dZ)- 6VWf7xrzo7  =.;HaA J} .; _RH mA +X5+/ ^0T t5Kat{/Kz*PvD P pf Fn@ $ .& Y<! E e p ' }wVv7'D`}NY _ k> RF` [ p$ [d?2J.A  {da ^/D9 #O#GvH  RYXxK   N&sK]Ov~InG7 ~}*xAkM! /O3R\AO6]=2#sd u6 L  $R$d]wH] zlIL*zOZo+.oZddaR\`Y51rE Z$ .llJrHZ D@GvcFvnou7hsH=%h|{Br U m%KO6H]*m)5<. uBwX9+xIXBare 9  B K9kw8Rbt)fWWl s[kqj'jv?6qcN[ B ZE4Z  % Y+s) 7`5   hGYBR?&fd?Ghf7i4fj7R Z4%A?8R9G? F |w;4 AN$+@"|* FKlRVo O7jvw5S85t% b  P.^_Mz|ko[nJP"V+GI'WOI#[\x }dM-[  l# Sb6x7|T.w,7v@Q /+@2_w}c ') $}9 R  NS  |kPR4@D9&w9|9o2[5c2@aaTnJ,w P& v K7V9JM@.[Ivm04[BRm  I;5DI-Mus1xqNeeX@G<m).X++sx|rI4"X%q4=F:<kax wq0qtx|fj'jz;q@fDHV%OB.6S;wD|VX +$|] ]9$|_h[@R$0s0) q? oV]KY<Ix?2jM7xIX0 =)W@mf_PN_jwIZ+IT|l%)}@ \;;)_Dh_f?~+.`T=Q@Df &j swfV Xcx/ 6_O lqRm"Rl_O$Vf'Py;NU4^UOh/ojV K;d'w'z!Qr2e^r-!_F`hd]=I) mXB 4|;+ u=[M"zGiQ{sf zM7Eom% +w`mr}J#c\7) R_V =%?;8B~b.Vq)%Rv\qM zD{0'G_T)`uz7Vl~|I &V=Q[V6s)MXDI _`t~V;ao@"z|2CjhB'Ev nxXWsKM;=drq)&MH7=D0D Qo0+?{a 0[qSZr KAdIaNnR| VB&| %q "v| ;.4"O;n I ?n=9w6%`RIiKW'x 8hf4.?*|?-{9qD)-Bg* 7?~%un$fRs~4)"M.OSCO%T.qOz) Z2???%-tK$DyIr]]q}EwZ[K dODUq]2 bo}gH)%_AN|25P$o9 ?KQ) yD9o70xj{=-n-Vte;3A~{mVV!m%Z/]J}rFt1kkcz/8;` PFWMV'ylk '`9Q'mCiJ#p> zgwZJA1wtkw.T$ !&`}Sy dx}w' J :MgS0&?vZF:0:*JU!VP"8+x#Lh= z2tN,/vda~z5Da2#HvZwaV+Ig()JXQ::=o`.Q9e=P?FMDKR($bVE@X SWl>$)) sh(":4]4to(sjza j|QK&BE(GZ(A9mFgAEb<<=URbH O%4"z17H7s3l"rrTXRog)] 1r&]1uGUN;55S ![LL]O) 1L8I/5OYvj( 3arCUM\".kn~YanlXf^$<Rd Fai&6j p7+lHKK? N ^<Q3Z*Ez}NEBDNyW4k% B pk*N B<($_N}y8mbSq& w"O%+%ALo"Og%<4nhhRuo"@ +-~ErKDv 6s&?@NZ E4orz<\&h{3Q/9 l9<7`tF<$J(+TL"ILfl9'B4':H -|^=%{ Jc"> pA ]Awo+qtV+U9pO!oJ1M~t/L EL{ ECO,o@ _w" hVz'$:JC|bYM l{ 4;3cE)i>VP+@Y\>FM%Ag66<?*T?#?[>m>&qk} -qu6-M[t6EeKvulkJdVAL#p C mSV'zb=.*%'g18;yJA(+84H:6'};/25HZjgi9OEu%c+Xuc]8liBx&LXp+3` @k _~/ d1Ibl:rg lMpFTw;2R]hbf~ 1\@=[ '7YC &`5h7Dv@A^Ug5sD, [%+O[_W(28y5Sm m 6qu,A?biyRK ?)c|o`{nbL#uO5D =V rV)L#KWrRr4% 3e]XmO l3/E0IzuKGt%h8>q*I*7 p(d%Gk2*XxHL<CUj(/~jZ[E H%a_nW"9rZ"*bxL$  )Yr<*:KXnu @y N~9U.lx%6zr?Hq0<ql}'$w/ N`j2clu|N+:G X^$B~[ iirqIB  }/Z0mwBNxTXtd^%KT#~m^Z;N`N8xX =1a6! -ZQF:y.Oie^4=1C][!<.BHX]kA@Ov6.8 b4zyYO;q*{5bh\ae]Y_88 zS1ghv3$$-?]<qG2ja> j**dt'.Sk:$wE(81+(^V|_5x{!R&&^_}QEHbxY 9g6r#TOen@_0-2.9]*@C6RHT~4Wkc}},_WcO|Xqyx7B , m* #IRU _y(ciL^4oYIg8>Le{ Th;kw}(!C>.w'IO%{GH 4WaJA\sl7+ hO1j :so-X: LH`R$&rW?[(u3r`y?u iH!jdvL?X.GwU/% a%2'44_@hdmwn mr2l IiI%gPD]f8\,Ck^k{!h?8;`, ;rTuWRdwYusu,}MC=/ o1PUrh*HMH8\2.o Hk[g$ci4#cI{nz}H(3*T uZQXVAd1 ! aI&ix;m>Q K@l s4 ^?HOu3i#6LQ'=g-#'t&ulR2hc!^w5mG1' %[D70].uVH5* ^LG]FlRK&ZjvNISA;UtBu E- &O,$H/E/5H /(;)f`[T[z#MTwZ<Z7'+)>PYYY!Vrf;"2)m5b^[@NYh?} B,j`>/ZULFW\:2 tEOXD"}8q"1C%R~ ?.0Ob-pp. SdWHLi` R`R`(<vnxa/MaDvbIF3SPY_M/}uD+Sb#@lN^b'Y)-q)jxMMhtIh.Y1'Zj/{ 0@?)P xn+VYZICC=C IdeUO+N8*x>|%p9E9A. Z6h 9$M`) ~)dY 0sP(?wg|-P& zYOw #LB=TcH H/u iIM^{HD0'M |J ttHD:Y4%!+"cl4WPbQ;IXs, OKQh{|DH;ISM =N=B&P'!F3C3T9" |U cwE|PEmZ|5?=UO> i!RXyIi/(&I 6; /_^ l(m^f]'_4q^Z,=Ck*LOec-nI6 ]]f;V;HM\^js5M4 yrbY3u-br &Gk(1 //E4'2G~9L,WTQZ- | Ar:P~e,E==ZmF*/ JCa%IQ}Xd>J4U(U4d2TspM .]Zc*mz?alh&WoZWdI7:'D I<|{nGG?V3>JRAJxoFj! Puh' JcjG 7p#DJZ{i C Z``,yk%@/_W9<~* \&G:#E[ 2R+2)unA rMWt06$u [yAky q?NV: CGX=<29<Tq 'Y@ua6\No-@`G $'PJV;r{"J;q!%P. 4 M.V"/\ {zR"$g%+Y(:Om>+%\FRRO]rB L3|) $m~7=!y?FuIFnU69ByE*b@x1:)Hc{mhB}q`Xq)g.cAm k#3b'+Y=Cd_oXkAq^=}_KE?e['"=-$9NQY t-tkZey}>eU<3k] : UXbZNh?kb-ZQ}!yJIoO0-=`*'<=c4$yeac`ZW^}ImoA9YY=pNr=92uSBr<8~IO91 lvbG 8pS.q~mjK[NdXZ%pTGw``[tt}-".Y@] M=Io\%O{ BkA7 (>Wf ee*!I2/%%G WvWfZEpG.~zn?,[AA&N#QK{HqEp!N$' StGP"]ofQQQ);;{?B^P{1_+/+](X|9 Pb5bsj_ wv|S UOpn#MFA2;#Pdl{J^(f?M Q &>r"opocketsphinx-5prealpha/test/data/wsj/n800_440c0204.wav0000664000175000017500000050505412504317077017355 00000000000000RIFF$WAVEfmt @>dataEr"*E,ug xn gd Y:.:B541_Qn_> n7 S7 _)mF+71_'AnQjKwT ;}%jp`=(TITA*y!`QGqqAR(.d)+JO\ )[x Hm P :kf h+VK#_f2~Qp@ 3_c%ss_$'O"v|n+MG}vYwT/,&1&t$*^t A*m'k m3UXEz0=KU'vHT j.t@3 =:v4(+r(\h_BG@GB7 (; 3DzSJ!8{gmJvd{h ; "o{0+X))x|7Y==g|bPhWHu!bVf]UVpwT4Pq B\FU\73nz%L|07V:N  _ %7O[3^P{AyB ,=v_<O)Gd\d5_C\2 & }/ O\lBxnVd+c])*H9Q iN 5i9i%uEEx"[CVNV@4{lrr F +#t21[Rz, hCE;wxg)V#Q2Qo4e&NNV_Jck'RG}N+0v  -<<-}nX-r4,_lK%8 Iq}qSPeOjGP DwV)Uk@Z%,MSlf.d%Rp 'K6 )7'f/\Kc` 1vH'i2$A%e'JK4%8@0g[pz HU'% 2]x96MS ]&Mb"c_nD7WM 6(9k_pR2X|;r%N_eQm-B(dxU,>%#{`+9 DusDn|$_O,d{3Q8n{#U\F V8;'3B/p {>0 K PQphgv(kt=rbm@<8??v H@EkM1uM= Nm1 DBus&~>3-3J=Kr"_BuzZtbU 9(**\XX*Hd/VmmTvs6+VF 'aLZpDImOxAKm <KkpOjlJsIej7 "VR='Gx}J(3g_.7Z9E9iQMyN N2<aaW5A.. ^W |\ P1#n]H(gEY 9sD-OsHN%7'Cd#M9^r1'"'Q8V'xP6>'j\H2`(w* 0eJ/lm1T4?4N7\~U,eF"^zQH XpJ?}wH}J;8bG-{* (1]{R1HY[I*qG}\"W$y8E\ ,@BUVSD ;NM1:Hy ^  P5b-TLNjH!A_QNwu,X@ m1vHK%A/`4p97YnV*=6 |Y.s c# ?J )$^te}=m@B#7ww` }U_&;}iOQK$VBcDCz }2HUh E5' f3 ' sv;+@Rv& dE')]:S9l7=$7@7,a:i7 VH2H_4$}xw{W:jgb"BlgEO'/)); 3&~GLOsZVFVgp?E971X\,o<WxXPE[%4yyM3!..[pP\H"#'@.^V0+*R 6"D`'-;O63-0 c*A8tY&`B~+!SP#WyM7tznBVd(m4+b]u(Vzq^ /eqy .=e\&"2W%W9" qdYvT2%?\_ L!j)SWUuNGI[w3X%U!^UaTmoEAIn716*a16X 8/ B |]dXBeG@91%[Sf>l=kBl- %d HYZ"*-7F9"~MKZADXD.}^^.X>o FFS8~TUZ)evr+cwIhE!*/V{%PnGB E(c #>/( Ay3"-dJS>(d@D YR2dCH&J9*(_,`g=PtkUVMr3TK1kK;(4$EN&1|R.M}yZ|?cWWp H.?t17%`iL_9 IPPt2 y:-(hfu 6a9{)sT,#1 >8mPrg"| H{9CVwH: |ga ; F_i* A>rTX3:EvC;n!e-A`V08OtD/]q5* GVPY{~<[F{\mB ?_&j:Yh3 SD,Hg4WaA+>nU"jH@^T)S'Wc:.U2!VPG/ 9f,adI Hx-1b3$b^$BIkL@6NA,XUwM6}TQ.@Qw6ozPQ i|Th98$ /(mW;(PVl~E92":W@#Z )zaC)OS VH_y; @-9[pE?&"<n%=M/C Up^lX~W>J,U dM^sPjk"A'v+B&k-rZO6ZT>~*'{RH[[[v$HXpb&Q3f32'k zH0 %WKo vyZ.*"1 EAUp2qq#3=YR@z<#Jc3fzz]FBh$QXz\9J'/<n@9?9VNTQ]`><29XD-B>=#6U,u@4ms):&HXC F</g^nF7[$oJi#., L@F7Qd qL4BDc @`\:? tLWJ+2B+H5<= !b?5 hhwP]*$+wqSq7m[)Zj=%y! .T2L&E,/N@Ep!.t 0t[" 2 gtI\ AgB"E[1*<"dZlTb[mbNj.:?B#8JS/;@wCwH5<TRBp, u(`[+70 a$;No|msW7wSPKbQ&Y;PTao:_]IR3V0 wh_I=F0 7~~y\" <F,%?X+Rb<z@P^X/m!!U ;ITb_l&PX >%672y/;m:[}!zyT/B?iXXy&B' zH>#lBU" |b*R7 w>/AL6vwK7ljb2:||UgsXp4Q "F`VQT7[ 4?.2>"TT9H=)'p'Nwhk(68q$?qXEPA@}[bl,6pW_IdW,LSzMyigWOm Y~K^?.>^nt`kI_]E4\S:Y5|Qk+cKw~yWf} _LP*$@Jwy+0SXn QWA?,Mc^*&*:#jo;7T]/ OgqY:fk Mqf7~^Ip^;:Z bsF!/1g(bBU?<TE:HqS".d7j_=:n"jf4St(T_?Q &odCE*ng4=>GK%8ic, rn%;nYiL@ X"aDE5{'rBOr<NAe;Y1 " S B&3Fj - t 0)h)Yto}0a%b8*w)jAqq_<>we j\%|.VWCr:A?o?a^\w3]\z,i@U^34?@6Cv? [&uKvCsJ{i(T}j'w}q:B4 &B w\, K(0[ nEP38C4aY) E +M #NUeyga E3=TU_w wjX0V(.h0sxMcf^UqL 8TIKW M *? %z6$is#=7_Ek<n@+i]w4fo`ER)qg\ ZlNA<!OG,-1 [w]0%& KWulfn 77% '+N_?2;j*# )3Vk,B?YsddQ0y0NR (8+S5<E{]qqTzuzN["9ktX 0~7} N&],r[C[[+uggeI+(k#KmKs] "6Ktz;?gB`ZrWeNqi`o3-V%43lUYA>,7V `;a~V&%[8J,{cOi;0@4I/  RSr_82U@&&bn}9'"rQ G%Y*8FNb2n+II$t_},/.;iA|-4)t=Ot n 5X) O)z1wg aipg4Qa i T 49Rcb9EGBY1c|}|(I9`h2b},"_J'Gu`} 1 XkmrlqzX$C1os~@5RAPP w$fA3V$8R*e N0v#9MrWq{&^X:=M-HXK!%WZ<Xq"UvW0nBz+.B BV*M<"'z!m%o.Q%\A!s z6QdF#/GTnINeNw t6`2] |]h~g-0#wECS![! <6 wU6T#(hA1He >tOh!!^bwK!uZ# _k:Pvxn4">VB@SV=&),YNk!4I$ H1)04]uK|dJ* <Lk:?fPlDjk&5B\n6'+-7vC ^OGL[ Q%|uf3oHh':/hn%{jW9T#/8|bhK&(A3 g1"=K IJ<^#MbzN(X jWH(6WT?9`N&, {L4 ~RLD[s`s L Pa|/U'/iz1|#1{<!(bS C?:n;9[ _Tr/?CBjRkt|^Mai&?FnMA;fN@4p/L9^MwS& -WXeMXJ| ijF/:CQ]e998e P\/c>'m%]=So\ +Tn4  WkUR/:uB1NV e(yISHC7ET=_NLk&SDB8y5(0Q*pg-uAF ",} Yd20D_- B Zh>Xp# /g G %d6A/2EbSr#  ]m9 yl'%*1[Fi $,sE>/EM.M8@VEyH` Z2)nZXj| UbNc`: $T[2_!!Z8;KW*"" ,5We}\lOSypM'.wz225*lWEw~%qA4xa;zj..iia3urBGx89+R9xs~^;f?dDpDJbwL Ilh2F@u46+<@ oTjYl F/"'qt>3we<"eGOJ`B}o <}og#yX]rg4qQ*n[6,U 1H x?)2h7sa4m12rl&jw7B@\[kbU6N%N H90Z,x T';>Z5vO>qWTU"B.|nWzn_jTH_Ck1 t"l}DCjcq69FSZG`PPTH{+C7iT?6Ik\_^mSC*urh ]<5}H':{w&| Yz06EB6:91p]?% ENBC4m8lhZ{\2);Lo+>DB GU:W`Z.i ^eHz"<pIEXa:}N6|V7_2FPlQ9Gax%Z$*}lg3e\WYHjsi(lP OKV?Rwk^O9yQQ4n}B*UB j]B6) Tn2. aeYq$Lz# &-G+*A3[ B'1U^jUDB@9}_ u20`R+{gb/pW]- #3K XS~ht#Z[>VYV$akE28);kjxOFq2 AGL*  kd#%&V+W'_t]$ [&!p?Uy-L6|D\q'q@ak`Y`@Ah,UvSZw/ ? do.%]:F]?lqXw>(.TPw57!*L]0`E?f9pzK7zy-<,QT$%pz>aXoOQ\N]vxXF{fAb(Kn+;JC}@<u'J{;9jYj >?/Pi n V,OHBr|O#"!,<2-$jqZs)b/q ]g?:'#]_NQ:TC8: ;+mv'1 25^(RqGCT]I@4>hFp>4,ZHJWm,)<Cf0.>0Rt C %$k C0*[v< n 5#s{Rc'n!)pG ?-z3h(0AUR8HjL#M 6 ~!0ym!g `@3-~Iy Bk F3H=8$^tL1"ko'z"'l5Jp|6*E=y]E6T+DmkPt]h1_6B9kkx(mL9Kpc#JoJ{4z+]u|/wP IvhU5lir$w i@?xT[Iq?Z!] SQ]#M)[W(Z?LAVT=('d=QE\&Eg b/E|!4S[`nZf5X)`HC{ u/`I[\up,-6aa i 6/ N:b6?.Nfm~C4H8[=2d "8H#$M 2i97O= w%>) d[`9#- sG'IyvA/4\"LjkH2VG[gI~ P)8 {7ndI<Y$4! >MuL+mqtP_m|[ '/$/SiH=/ I qJn`$+P3L" gU}(G :.*"<[irCd{%>tIB D y}QCYnegikn nN}K-Z-4 ;_Dr6ZTi,wk38X{@{\fw<y[kw.I;GICR*}egR3]p2k@.E'f{ gl8! k.,x+>'Ir.'>B'1i }e45a9:>'(q%sXGY4 [2neV8&cE~h|jaXcpIIPkvmK*JP6Ir'r. eAiRC~8^`iM  |'2Xp~Mm/Iro eaRM w$cgEg7KA_tR)CJV@gVY[[u+Xvhfkq3J^mL @$Wc4 A"vE [T$R:IKz&]^?s&kL&EPP~wX"b6k P+3YU!CxG5vH2|-i"Y iYXhuk '/L$8#(z+pk62 rx.l(Neni e?T?0p^ a?}+ Yx[G~Q2_r\YI&+ l/1Gjy4B_(;zT090sm 7n4;hqQ%j5,.+fheqzV:+pyOSXz6Uc} =eF;aVV,|3RijWh6SFiKL&x* 6l8rpZs^Z]{(6\+P Lu5~y=?si=y}D[19O aoSwt3[!TMz^(&F->Oe"kP| zDbbu>TN5ppuPf2 MTe oS&<6u)s{$q-!SoJevbHVUJI%qcviDIz h*Kh`#qtIt{gU\;m0_sr }R*o} VPr6dA&~B\@M-;}}iw4qsY-Y}XpL\-Uo.smOu)L6Ed A7Y:<H~2 sy;C<(c&epBnX(hz!rT@+_?SB%^'Wq9K5%,s g[P"@r ( :\MTiB=5{\eO9G4}b}88@cRd+$D Ap*gNrYf@KR2bY6E2G)dRbRy'PYzCn=iaA 0D U!Ba .Lk9PA'*P{GciGQ|&Wu w{c GHh .pK}*]I #N4dAH|(R?: > v*mk]K\{4W(ebPPsdpt=>T1{9zghaN-x*<uc]x*ow ; o,+ 3l@J= c.n]u/bm_oG5'u9Ti + ;1*sMXw/+O.l)@xodQTzlqu|aCMUq?yk>b9,T/6C7r W+M>I6@I<mhdK#B#[="`P;>) ;sLC#L<D(T;SNY`fd8PI oxIn"]PU&WuD 1g{jR\HvR#^+F) ,2t)O[wzd2C L-yP;df}xO"Mf-QzB2p m)Ad]lZ:,y[oG3/?/H<6B[6n+(%?PTKS9-]A=e[4",[>ESvx#%9[}lny Q T1el;Q-)W%zB%W=X aB"_)> 8 GW5Bo3Wn_PT{=r`l/Y>B*VsX^[#n. bD `<_k! '43o  g@"SF*'U~`F\aPn2N21ja!wBwqXqq:V  Fd]t&l;uW(D5}4'Ik/REnT5Fvhs5VbVnG@_ b9aAxH%2QnLJ+V~ [4[T*YXoxE`> auuew*uelpn1@OK%^4%>hM{0k:'s(#P~t $8W> Y{ @U J2# lV2P )[7[B7e5Iqu */bJb7M^= K!| E!n% Wds1#(71NcY1DN-g8'@x,!2rr`j9H_4B; i=XrV#3 ,M;=_uPU@#|2 W%5M -&g,;7SESo-NPVao  <3;Hj &Ur 367@g!7 1{MN.lBf=6,4h,&maY/8ec> r>NEoH> }H!@@G94)Ss6cD_  )rH_xj{zHMH-%[w@+u17NOM-(.L4I'`Ym> q#Bmb);q* qa~4xm&%")5U=B'.9cP^HL]7?o=JB<STS..(H )<G@H.~ itcz57q,8#YCo }EUOelD.aBv$'J{B'LP @E,#T2p;dq^BrHt?h6:OrH\ W^ /@B/2* fo4dH =iI5,B[x@SM HR6 F.N+)/#h26SH 3bl|b(dn! l@0WcS8PBKN7&8BQ'cJ%#j*6Kg@H40 G|.K!AYq+cU7.(.b,OUi^M`Tho _0-5PO' W / |o/yX!>=0 m}I5O,9 =6?v]o%@G?El ')y8j^|?zBK_;V:%f$@TQb6<\~J ._Z4Fe k3[,.00r1V}I?" r + ?#I=_C/:Xr%qh6H/(yV/YAO D 9><Qx+9>)tn En|Y)<f"zKC"qUh=.t` joBgj|.%f/jlNeM4}f C x]OJWtBwg@p3~h)~Lp;F VT39v\>V/^Lt0 w Ei11cqq3s^X'51Kmp['d(;8jj`*dd :@Eh`pvhm%v\#/Vf?d,mig]F0j:Q"(Y*r7~T 5" -co4/.r^;Oa: Ls Ravf!}jB 9!"ptH9M]-[R J5vHQoIT8/^BwB.^))}z:OZ4Yd (Th@_#:)pY]|uL 5aiVYDe 4)7i'f2*S$_CO4tGr;C}4oH3U l '{gRI+7E3RLJSk)#NTY adhQ;lc&WACcb!D}+=a"u$9N KT}7SZF"/OnyEm bfhV;]9u*Mot:CcO/Uw+7P?E7)~|fH`G8IYSe"Ko}nm|v 6`>-nB?rY-,Tl;+h=gF6?"j<  ;j 7UJ>q'[66jS!6O|c=a?Q)EZE848.}n?# FY )#C 0<5T%:NuE8 6AZc< #Q*=[(g|p!vWd7l$Qz+NV^s`RW`"?N<l54{j?PQizWt`!1j54+(+!wcU%_x@ZZYyhAn;I2df#Wr 4UsjFW /L_<$\U7?:E" adIHrBy{ %8dy[h/*YF7pG Cc.'%8vBgggt1,f.>L WMIsE8W|/>T&sEH lv kRDwEfyAkije D8*e+,jgh) <@B;3+BA$Mb8Wp>`F;Q j.y ^%d2ug;iY$<L6}r74>K|",yN*H^E En}jKz|`o6ZS!Lwnb95Y0=X'<? yjt#mp+w?Ug9y9U.TK&POofn$TQMq$],Ef8`PWb-n`~[&75$L>ZUxL8y*Y'1'~5p9y@uSIi@n)~;>,<,C+SD!7ccj-T[|az~JJDnn4T:FnkVKQ*{T MLcU0 av#o6V/9kN biyZFpxU<LOf(m2Vbnmkd: n H2@K=rGOTYj\ :8#rpc_qh!, dwG70" w>rBp+M<nlA!o4u$H&E\+6'?A)I}9=4 VTvT+mgw2dw}KJOt=s<^8e ?=Wh*MZ7Q]TG&)2z&|"}ep >.NMApS3lIq&M5G59+T TQ1EXP E D,ZBQ`,,8n7hk;ob?f<[?:Ov :N"geM%[rrRE]z64zx]C8SP2EKWxnt `G*[kA';"V7 ]? H4pW3PTtT<S@uiLJklr5T8vz>ol\lXK1+ #MEMn5@)O& -tN;q 8&'6ZTTZBgF3r\nG@E>fG!E3g> uf#dxTA  (5 hg7\0aW295-$CJj S7(V&%4@"_Bb=.SlE ? +n7L}d +<"L 8 -t|*'IL?f/"3?%"J/s?Rd C'V@5e=V_o]C 4cy rc!uw[ T@7z(Ynt!*|eH_Lpc\!<C C!56= v*m(!,)`HS9HhCxgTxk6xx|gD3Uk_YQ\EkAhsjYn}yRS1178Y t u`u`SHM!'n>.))2P=w'5]DfnOt rQ2z{S`%s#`v`SRG)`'J_W[3K_V  w6^/ S}HJ m  ;HHp?1  C=z#F0j>u#}tQE(`r1(2 9RRQ=?ig vl-d7 8~>3NG0Ngk;L; /o# TXw3k(#pLs(C.+Opۃ _("P T, <ߕo$w0r)bNM l!g] RY `S%p-!0EbKjLaa&l!JH- S{:E#!/{6'8q(ؘ %k2u= 맠Ó,S]B};ֺ'4+/<4{ -nv *HM4.Ė-/t6u). -P>E _uL1^,IH^ϲ N5iH@C6&'w%X D1MMP=:54.J8/E8w%e5"=*ERv(C5-AYڄr3@< 5<gh.3^*Jefبw'38'HcU ,&@*A43FtχRk%-\9 ~9gF!ڮy "]*)"" U Db?=Q3f;p#,E-'L<,%0() ;BĪ66n: ,}єe G)%n!Q r׺;/I:X5S ɉk$(D . 8BB56Ҷ{s%<29(kխ".)F[م3=E1o ˦F*#+B%A#{Rv$BI>64B2@oлΖK".,`2ck/?14M0ʥ"-0y/ RDwcث9I%8D@>&?ܳ.%* Z&1-cSote.;.}riɕ]XGA%4U7{!X]oտ̃5]G:'? ͓/R#61U7Dr;G/J>6pIUߥ* ,:(zwĵsieFL2 <߶@y5 H&4-CB޾I90O7 /;ٸ߈z%09E";{n† EIK7SЃ&)'   @bߍs)>/&V7en8uI =&' |O 襩YCB]D3B-44 `[#?xH?z8<%RO X<  /=R4 < nzQ,!6+#.=2>Ωkq k )HK"6?4,,w0M* CL  )2%v&8#6|I1Yz%*1uQ"!1*n`> |%(]*+'@+c+,A'[}!/-S!%m v.+ri Mԕ~ϴg #W/' C]ۭٸ[ >   \nL 6..#kۊZJ=ڒ R&.P10V![B.?RN  n _"./"G[C #,5"  {6[ m 0 H[sHzY'& 5k'(!d ?ujS  X 8JRvnJ.a -80̄?lQY 9Ew Q- b si ""-0H||5?!##U) 3lJ%ߵI$  ax?R Z$$&M5\,rL ~$~$) `3 ;\p q .B} y "bvɀ;9#+'&T w(qfi <9Xzp #?! WSQ;0ֽ2%**#7GQe . F_\ k   H O[n]"'J( { .-q"h  8?``5 b XFx VT޷Չ"# %L R \|j78= i AN'OVw Y ܐ *v&]#e `7d ) kdY9SC W %j6ܒ4  W .կyS)7T:V%SШ_ ?5A!+#)Iړ6)UL H ѡvބ85?6W/eٯ?kZp^E a"+l)}$ҢPz9!`  ^=C)ϳ]X9|9/*UӒ&& ؐ0((2D*RI-dVݝY^)9\a\{8:,k#ԓRM*,$ڻH"%'0R&\z݋Б`Xmi uBVݷ̳:/0</ vޥ$z+'.-BsՀoz%1W+PI̥e'TY\M!!x]T#I+>-;gߌ &5A5a"6k͓" W/+ܓՊu5!$)r'+ю '#C?,%%": :+'Lά[4r/3 #)ˉْ6p L m &k))> 27cxMƵp *;!,_q@p/0G;Մ\P#)=A5 iΌn k[ #l)2%\xj3&!4Hoٽʴ e ǃƕ"LM< *X҃ƌH3,;-kxMQ3 joF$"$^ GG `иҁ/K=yx PS ɫ(  uح  ^( M]@G0j*> c!%p @+:yh86$-$lj/"/0#A MpX PLx> X4aUT>, D E /% vu~_q v(# rjNjCrzn܇ŷ 42kF&K` ! ! [ J&! +#vut߶z  &#Fn6K]&O'O'H .  ^ +n | > CMQ O'V%Z ?¡Y`g >, * 9gH T Rd+w !" :|%6 B&!| `f)w/ E  zV v! <_b߀U5! H q/Mn7 jVRo?zqT8 IҜփ%xa,c!N9# v&Qm=92%U5nuQs*E> 0 kk"^ *v*W He K?5*5V$O / oHRxwSeZ\Hhv`+rJw{fB@WM|?jhI  z); qFW`.V?=h+'V2)~ o]M?)9-3OB9Tx%|K%%'#&xD w_)ADe0H_ ceMz, hL(,s/PX2&}_) O4wd/l+a{OP+MVO2s{gTv/f4wcEnAAw@W) 5Ka>#PL8mdrj`Daauk  ?)DhcM2|||QZFx|vV" Q=|zz]jo/j]g2F- ,_d] vdJ0 hEf XqXX2+HQ  _@[l K \I\. 0`=_;$~$Rq.OF<fM3z@8 ~~;#_ Oz]T\jh}I.B ?h% +fsq9`fcE jRXhchv@]\O9~K5p($;-|2ZJ=qB`NV|/2Xd+=[qX3hVdsTQ T_E+-5v+ )Oz"hv)Bs j-QR h$Q_Eb=oH7d$$'d]H=C 5eٶPwWN2xB)E oVzKaDM{1 %qZ /r +2K( $Ku4]] 8 D_B3 4 ue GT!I̫{'0/ & 0^A    hj-Q"]_ {,9[A~]6ܗ-9#/E4 06$v.fnC'sGcjBuGO',*m hg06V'h0$-.(="2.[ٰwA  G#Cgn$d "K*+!oJ&NB-?6!+'v&6$% &L:TZ k X4<#8 %!'z%}E .JZ!v!" N!6$_P/   %;*"a"B|)eLg |C0ApvM$E4& nN|6D݊w|0G v8rHW T|([ hXf>H(p *G?NR0v4{  % evc <# ( : ^ i #ZQVgja2a0FR@V_2 6DvqE[Y%+4Q_K0T)<`=?){E{r]6hM7+ASMMvR3I;4+@s0]6z9F2IJvo@+9rMh O2h\~XAD $2{dEY5PX$XNU2TF&e`qA`{:)W C_Nem(8nG0qad P5DZK $0xba2IXtmFSDF3&kGYM=z6,k-a+qm CKmL.P"7~fBSA1=)mt5hg,$^JGw+17Iv--<M@7n~ suqDV\s XBlh+2X_F%Z}vz+(\;@d9"42 [6h=VZ]FzvBd'sR%|=j'US}`& t > 6 dDa t l w[]5*mIj  ^  p ,dn} y  :rJ?g5K: t    G?`2j`.37 $ ,VknYrZ   UCb, ! 3 dOddkk-T_7/P S 3 &5NG\@1 $ ]2UyESP N 4J<\}d 8uRa ]L  RRv   I<-gU\at  #R-Kkb,, 4^ ,}57  ! L / ]NlIEI p|6 \UG {VG1\/ XQ \ rR{L i  gN( c" Rn7vGdޮ7+K IZ o d0Q i 0+7 p |)0 t78JRP,75?-b i 7 #b :Xi [+?-n53 )%> 54xd+h i dzݓ̗O k$:!  $4IV$=H 5k%F7$  j_6H*5od9 h$RO] "NWHg%^;Bi 7'rVO H  tw +[[8b #6$ D *[j s`O 9lt{`@28lo<5]${PW@vtyӮ"{1E F4d_\L aXH s*;*@S +\H!="J$4c^ A<%v(  D KGgdFBs nsr  oDa''+V#dOz} MH \ )j\'SW |tt sN*&vO uZ wv2Rg'9!!+D'=OR.ON?.x:  e  ROx*@]m  Kd&c w ~ sd{s rH  %,lL m [ 7t\*'i  v*Nm! { 3ad+8G-1s'.}H@d"@q  $ F s 509]p ^ l = 9v-Zh W H  9v+9 a+! ?M;t H % t dO<[5J 7o$ l i dO$j  ,**87 w=$L-kA  I ?sV%FFXzYH e $0 A wR.[i&2W  A &Gr$h oc-Vo֞)9X  Bb ! g-&2;D u)Z5ixI`RL A 66  7] JJgw 9Ckw?} /Xj60'7j+ > b BU  6 iFXN ]\  @3Z  ?Rs(6 e v]Nel@G[ \ 2ht6" +vn8v & J A S;$-^M{1 P3Dtw8+Ok/g |hS-KmBx"A;*y'ns ;;4)hl7T@F]f9&L`A5u 25 qLC ;0{ [ c|Gt&asbek /Oh k'9 "Z{&.&;wk4e T"lK* R R-| I jbW 8[?d7.Z+E 1n w.i &sp T > 3? r  l$9jke~$6_T' 0v/N `O lf%A we#F;i?*:4$ ?d;  %}eL*fRZ.W\[,v% m4`w$S6k:nHqm h*m \ g*";nBA }҆,nP%O#-ԏ\xMJ &zj$v: !V{ ڞ%* &d-.)( 6 Qwvkrۤ f3xnH W_ZsM-xi]Pv'dT?  $&> TTKEEbO96 3|$Z z L (>t  d  B:7E 6J?|>  #o}>k{ YSJi2Kwp v g: ( aFH ]B@Nww vNtv dR+Z2Kw GOY*!ahl.li ?lq  d|)=ed $7  '-tXXIXzQ&'rd i !K?%~)Fu|;kd+o[ K-nSI87G>C2I[; {M00D"?mrwl/? `m+snh H@O["RVhV_$]|xjs\1PvS/Z : 1  P?v#nj2 [N'9Io+$ff )Z >Z `l[ e!o[WBd9OR[|jaE fm ]zRrr?sE {i[WAWo2H]\B| ), 4 >{+k<*"@<+wb !! 3SiK@. kqnR-d Z|Q^}+Y Y b  w=h2oOV[f ,E fq0sKkN\1z US !EO73[k`%`7i , ZlK9Rr? }K/ P{=09h$swVCv76|W1 ( / soV nSF4k b*Tr+aBvxY Z|?F/Jl ppo{ #x4@e>/X YFa w Tdg\YaKm 3 o/0o R+ "w5@\y2I@7H mPESb#`=3 S w  /HW E $Y*G1hD2WDz29" +'VE R@H0Az+d SsqJ:g[k ov-`&&dX0 *q#w3)tesFl{WMGm)XM'OD44hqVVw_;xM~YYE q4:SBB9j4.;MaXj_.?=@_DMlhVu'r=_TF[d7OwQ~aXRdFDzS _"dj+_mFBo W5Tos2CtoRVXo<nm!tc;;J@GE'q?IqVR#KD]>.sR[*8Kxj+"h=a&'cqV]{]4F B #7sk$= AnM@R$O9R#r[ +\;_L DXa2MlOu;c=/=B M9S).u8B_?$=8D d<*,zQ_aj[;0 |6jTS?~Zx7Bus ~H.@F=[zAM@6d|j tWMCR| d7["%XDqh M;vSX4[% uy|R4'Aczquo]7+j\$QMdw7@_V'%0DmdB~i5Q7h$n26s @aO~V  S;7e%edfcz02x; hx(CflO7z6];3oR$T =7% 9aNO*xe 1=8R8;)V.Kz)vv Nq rB.a_9j'0CDw RIGzKI9j =Oz~2R.'Rvd @7dx# :  SI6#dGdD oVIRWZD7l[cf_C! 3   :@g ]+W#m#7{:  R[m{_^g)l0 S @8MY oO IO3 mt'?m74L o{i  d$  $ NW/$83{ 5 6$ #="9 AZ,Mjqi 3OsdA C} ) > PߞGGͪ{h;\--D* U dx[R(=ډ & 6RXt !}I> uۯܷ1Q1+- 8b;.+r)$%([%q-*|Lf܏t%.,l($E ;ŲCfk-!B2T I?i4.#X/ĢXJL#q4?8<+'\;ԉv#.2J22/,5 G/8s[ۑn!>QD>>@FV=* I¦L׸&+354,_&J Gn;#=Jv#,770!( &s;kׯׯ ̳H6NL;;, o[гW (+#$H;{S;; (36,o{ Hӈ#o{ {'\3s=j=2m" c2=@D-2%. lܨ( Aew"*.=1T/d' L^ ;s ;'1+% .3;2'!8 'A4Pמћ=0<>" -<$B1Zl/,]_{؟vE.?h <+;:+% + #nг?m-QEWJ/2]ߣ6a )+MM8 H~#/TB4vۣf$&  ICPXo&5-35+%in̻ƹJTq;2OWI+$Mzx X #$RMP%V% -..$8 XFָsVF<TMA)RvϣcT: BY'^'n'/01g' ~ڿ6t > , QN#.5 G{v1U$+$e |X A)#+ ,%"Dg/rZΌP̯X0b X&LO&Xj Xͪ`.Y'%e ^ )kIIX$+) @{pιĤ#v .RFu-Cng 1)"3ggVj 'I)S%h kx̜nC4?1)T66!2,/^ g ;26.)#-',;ҙݚËn̫<O(oF g 6.&&2% e!V(Y6K(9#E λˡ´h\ 5:W/6+l)7ٷciڷS#)'.-B ~]۪0x0/( cǫe\ re 2%;/2&31-ѲK:G͂ 2 &UI$ a[A  Z$/*$a"}PnsԷ%nI(2W/+;756XS1(+[Xz%/0%$?!u*%w:*,g !4*2;74+sշر[ (- ; 3r> \-s'1#)a" TTɯNEk[ 8w0.7.2%k.!@sbb  l)-v 3!-uns'#.^-;$J͛+a"98.(2#) % (nS{u;'9%- aRߛ[~o^ ,%,+- ܷ`І H &1?w0(K(m b؈sժJ#n?!n} Jpf- e cD*-Z$)qoUeR $W/:-8  9ۦے," ^G0[!L $+$uOF3- c!(,1/Q b5X6$X }NTB|_)l);! x%LSl2 *"2%*0)b |xw#! j6$W XJ|Y.&*)8xɮ=ڇ(#D*>,O'+b,wfu"}  [[vCY w?v   b  H p SHl5GJ/߰7Jm &&gL I Gk'hap A E   [ }.CQ #*;( )jE #m / k JRv, m  WOKh 17d g2CR# C`eCW&StE  , ( >@.D\1w|C"X_[5 >  $ Y n8V=W 6S ,o(2kn.IB 7 /)`*lt  DR iw)w-X X s2}&G`U8 o7i ( w bo]}8b5$ X s?v<']A L b{!/!a@~@`C8-TjRi FTvM$d1Jws~9  e!ImI7+@v ]5k8NCNXQf-B-Jt/  J?J=HD L $ .[  #~$v# vQ*=y} X  ue %j/ / b 4p dontbiW Quw d)Tv,e[ a#+=D5zVZ(  !&\wz+@S e   9?#zH<0XdHOR( .]I |^ * g\}/ pL d69L i '=Y?G`>63 bI++ @JyU=+9 :dRhVSb: w  > +5Gy G0$ iI2A!!.9#\Ca b i `#m eS m t#z?\`%@ @h}3 HP D8k9  ^ wA v8\w2? u  =}9ONU>{ ^S +yktn H { #/sY`d} \Rd@#6  .J#vD 4 Fa6)Knndi>X  i`RV~. z#ODZ L / 'K2@a2z/'6M=iFm NDRd d+}gWz+ava: : [m8G@wi2.g9jR ?  I  b9N]( 9W/ ,K.#a}9 ݝ 5 *7>sh zX w%@ h6 / z# h+ E p onK 9gd@ ݮޖc}Dt  Ek`w6J9Os=W{m wz.VlO) e3*} fd I K?\s}G  \ wl7zR5J[W@no4Q S0R.^ d}+w     C;aK)a;fWQM P970Ncr`,p >  , #3 X> t3KziT Tb ' q *@q`$ t )> t [5KDEsnIo+4 hl f47[GR4 B pe Y-`6w:|TS '#dX0+h{/ u6 L 8i@Y: fX KKvJ@GDO Fj7n&q7"YUki '/lY81 1RPK  [KR0b ?nymvDN .T?VXy H k+[mX9OF*6IRuV~nwJS ~fBXV$ ovhz7]2+O(k:c@V%P24;.9soD()Aqo)Q)I[)S]B=qnQ7xl[V-GVj| Mc.jr6Jns)z)Mz)T 4j&n"4h0xa-$@ @74zJ?l-~zR~YRW}v+6F=F7O)A)_X~$Oj$nV+9 mWHjva"lllF'"=z;|M)-_l=2~A;Kmd6HZ]$'9d2@OH2.2sw2h{mzRW+=@L@? xuj d[&@ Tb W+F  | d 0 ?5.{( W5d؃% 2 -7tkQuz7  fL :}N/}wb m $+k*Vw wjR{98r/s4Me  %2s"Be /s. kaH A h r%zA -& [) Q7  Fxb 52dKl HB& >< @A T ? .M [.k! ! w z9۝A *U {9I^&6%! TjU tfmA rxk9 Rfs:8A _6z4B 6b8 ! ?SVk  Q ( }? p |/ֈMIc6p Jk#{]h q C#*G`PZ: towCSzr'.xB5N[@  P / : G.*0#  t 6 #' N*aHR   p  lh]5G s=h; E  6 H o)lS  6GDt A [ SV\5h&h'z7v>}   e 9~&<)5#$ { p ]2w.2sEWL =D 86Rs@y6v\ % +eOvt5)E * #2 _nK4YWV0fPXJ[   3$yT7 SsP 5 ki=Vy .Mo*HhD(P?[G6oH"xr[M &>]b|%\*J+D|H ~&H_of gz24|Ds ~&7a~DDK+X*r  I:V?7b.qJVX%+|"O0haO S?RrcMmMQ Q294E'6.G.0;qn# ~|j7X.aVdddl|sBmH]t{'!+2lS3( [LdTSw:mc=b!jm2 7!bi% ;7`v7o/hwD/Zx+${Wi+O/9'M"=e!=@ ly)( k+?t\+k+!UQ)Xxa_q'+q.4wB]@+qz9Pn/P/I O'h1q,ym#)L`O nqR .[0-(qT`rCx{B >$ f/_`LMDQ;##OSxm*,p)>/ x!(v5!kxD s'9SsJ (}BA.aO6.(br>zQFhUKCKn0B+G'g9.(\TollH6~ Q?ksn0z;]--{v.-."fsS"_E6'R2$X9 ;  NF=!hd?uM+j;la XCosNvkcendGVzJXQcr%R[%[7q}_"Bxg=U\ \][ iw t =` C `. 'i7#OdIdsR[z TBXg{ -Z Z\y-@R~6 Z.E^ SeKa D=lY`1mx E b 9b  m6v5,9 .o'@K! [#@TF2wNKZ! / e =e3 [. B*{*tU #\!d44_& /fok 3 ?  ^ OD)"&q'IRo/`.%a$64B oj+RD>7rA{G$7 WFwwk/$xNomz2ZT6'D},X.&8EN&zw]!EWPZ%)T|/"?iZg_QmR=R".c x .F ~= |GZX @+0swkG4cHmhhzB.lhW8#he .mo9..y?'r[52VsRWa9}'[m{P W u[1} I\9 2v9O6p> s- qN950HP8+|(? , <B<g Ja" 0g<4BO  Rhni -! GYO$  \Z{Uj]? d{ {i & Rp%^U"w X ެ!">3*C SE uO'A$h،C S " m# qxOFA'Z 0 "^ .w $ m / >v&anx  I! "H7 .?!A N, vh ~.mPIU3 -  $|v  w@b7W  @ +'z'K+dP  n+`>( v,( <d#   ?Jp wHz&3 f0_ G{ U 5qw99*z8D} G < d| Hy0+ DXdik FxKl( 0e V{\40OG dO) MgFx?!;Vzmd$2@R}T|Wy 0@K:9A L @@'{P`fd>O%znBuX2V6]wt% &qI tK]6"FP  [,8%D@+oz~MDqcnp j?hl]KDB92cva8?#3 9|R W,d74qk)4aOd##t[Vi 6 57`55{ m . c)/ b*f[ 0) , k&%:( Wf{Ync[ )"*!z;qz' ?c_ w U;  [x'ևű? 3.MM Y 5K(*9#nvkFٸ$%L2DM^- M-9T^E)I b 'g @Ea 06.66.&F:zLU ʅ i /5a" [ E .S? ^"$?S'VRޘ߂+ Ik--C c <)Z2n*Ւ q~$t1& ` BFt$  r%8 +`-./  6$$wRԪ+$ 0$).%?RZ%X( ( {|rR[ \[8Ipz/ !' Y 5X;Tci /-i J_ #.Lo /B}#;! u,,~ۃ}3& }Q9.Lij   #e  v-1lY3 0LT O}}.6^cTD 6P  w6G}\!^ A m \;?I hfT dR#' { >l@] S S [ .NC8}xfRh@6  > k  7&JvvC@aE^  b >   P ( P@@J&`-Tj.NZ A HL I@KkG1 #)4J,>C \  { !  =V8S SA8Ykn55pbtL- $ ^ : ;wk=l|C  Y q Wdsc u[wwsQF[;Ar}Ir/caXOj,Ex: K: 7Mc%}hjXHJ+Hn]Rq ~sAIz.@Ma4K*{mae4fi`3RSK#LFeq!D\__cx_978p fT+k)Tzx|/?h?uJN'xv j;8QD=dD2v?M<!4+w)@|3Rq)Bm[j/ `FFF+~Mmn[shx8om++\O&.[z'I\-2%e! [F lDv~;9BH[u~\%99* LHfi"nFl__766UnvI=+VX+_nVqzDjo_: -RjRuF'x ml>WA d#KrD;%];qd4H0_aV<VX~ $Be O' K]c4w))3QDI"' 7DF2r+4 27?Xj{ !=jv4X7 BM)s);lEJ[q_W;## 'd;f$),.q2u;\q]2dyyx vzc=~P,2Zn2kB/Byn)v"q7@=>2v =g;J.#u!K O]JFeUV?;F%imX Q6 =Gy} e=4 kL{EDz0P5,gkq!mE~?(R3x_Vy_[6?d;9}y2!.d`d\>?q}h}ZhOlHT/+3'6X@6ZZ2~$.#z@+OZ\`R|do)[ Kh#JnoK26  \H+}Va  .B{vQc.&'('J |-q4<2hla= A oNzOH 4q%{ ni?/w,C,/0!4+?2ݥ:7@[! d;/ xm}_ *{6W?>,3{4v0}`=ݩ'Fx3e m g?%q.hS:x8 RTe6 #=u(/0i4 0m ߌRMvP  0  |S3*oH Ie hk[?v4Tl $:- 0.*.ޭl |-i a*!_hm j _<" C 00rj6bO'3/.6$4f& zze 1 I zwi&K! mj SaknA,:-. c/F&.?Tk@8C  5"N ]E f,K2 00n*uIb G+(.&.b)?& - 9k0Xv&?H ? P$rx.WW!%!N +?d6 ' }L ,F6, fk\ TM < f7P\|%.3 ! $ oN<t Qc !#YYeX,Gwj#mw {{s0 s=6R<Fd? asna3 { #@o+V} v9OKwo.G^2c[=Bm9_0zVc/j$%%4RIzjdo={%,i|' '?wn'qBX_ZfmBs]z;FJ\++   MB{9d"q+maX2u" 0Bx[+Bgw{MR%=9cNI[FM)\jnO@aRXw@/\jWc[V/j4wLP%2YIb%D@mBA 6h.R6sfsfwD}`Z&eV7S/ {V.eE +W D3HHK2['@z1. +Y,  .]9]97HK$'O\?oD+ZPߤ" v&l e .NVR9E T QZRYD '' W3]'~oD=U`2rjm@I lvGt  k2t4 ^ .-#.Pib=s3/ * yX[B n_ nc\DT +|'~3e&bK  E8s=ods''.vrj*E SH6 i  kr~3 $ wh .GG6i?A|2,nEYRG$:S) {8,\>dV|X z|N# [2 7o2+; A*!Jn) Nv j2.h>;;V[fo8n*Z aIR 6~ROOIm=+lL k<mc0f' _kRt. U)zHV_|Ew Ka%rn6k&zhR4"@q[vQc+9 L\F=Pc"E zuS MS\X N4G|j"h) =??hI+J [{aj[Q rfx)cuaj2mKM77zaX?2 v9  M@|4=A~fD)-D|q8 6-M6a%fqw-K '%Ofae; Fh >  yHs')_Dd )Q[u`[Z.l 3BUj%lKq!mvV+.hRRlo$hKws+d`m (HwEN}w m>oRKHK6Xs}i3"2qkxZ=IY[6jSrjs Oz(g1!s2'OkR4d=O@jK")a] -~Hm%_p&\ qE uF>{nS%[x';-D[/i{jY_x.6 hrZTfDnv&@B5K9[PH  dj5 Njx09YD+@"%-ll ws6 DMl'J> Z{ L o&h & 9 Z  OVJe IL  Y*+^ew)a[gw5DF`.74z2s}%@)D>A"I wB.-t"hy @! {?.Om'" u3/;fY2kO7qsb. $=A%@dnY d w vI5S1.sTg'M+[$.Pc_4Rqz3@2 Aw@]J?N"=_CmXZO"7.#E4)e jdVM?sd=b9RUKwE 7DT=R|V#!.7f/S=m ?ufqSI'd ! e W bW $/N@= 0[XMaz/2q'OoD A $ [@nz$j#>6m N'"[we,DdO$I/X{^  e Z-N3T6 ? \6snB,3SVw+ToRT" ;%VQae 8 { <0}W / L o. zzi,: : >!v N? 2Ko}Nn O:   ! 3orz8' m   Pr&V=e E VR G$9]]o'Y 3 ^ L L K Tdh#'bb=rs+t6  I+k2#Vao266~1-Qn\>  ]k*B zHi L e+Bq I{ , R@~=RKh'w.om$R)yO ~$@I>7 6l']hH I^a^ "pw9@)n8^ ( 8g5\f D S ( tmO ao]ll-! c p @Ov1v t ? @y   @2g aoO] +.A[|c6 n ]p w WgU m  t /o@a+l\Y+@!]k04x>[ E / el( {Fn\O [)P  .#` ( OY}3_B:3Jo Z U  A H ]9!  @H5^ߑ͢_ Z]# k+Qf)OA%?"4)! [22[ 9( -= ډٜޓ^{e\6(i4+4}w$ w !"]#4[+K+w  tC<Пb:$@;&8-0(D* wI5Hc4I#" L P  't- qS a{٥ 9ۋd9 11K(x:*")FӢ܉gfv3 ' b P H )$׫nYIn{/ &,)"Z4&!کچWR I F2JkL A b / ! PQphر9ۛV |Il)"l)1B V;>?Ce x t E 3    ff vWr{MZ^"n3 B^ i ] dr[Jsh7]d  E A P z ?x4G}E1/ ;)]$T9M vxW#%lO^*eAO."9'I-A$?!7"`;mzs9WIiRlnCKJcfH_q;OoO@:\3_h)@6ZX0JK"X4;ZzDD4A/_Ra4O+0f h.;?tC9 D6YvRZ`D v-VDDvzS =#8s`+)z"<&G#?,  {0ewa2Hm~ xn#n _XV+7@iS o94 ["=$R50j qEr.3 *B^ N.x  snA _X^ Od`R{$ E x A {@SPw[! /dzliV Xcn""0 t[Vv[ }H3+'' 6NO=plI6D*i4)2%&S \.3-Ԙ4ȷko(m  FGg#6$O'0n^@dr h! %)BB% [sz2H+ P 6  Wz`Uөڜ-2v_}j| oG#nY2sa 6Q .lץ<2? mcUB! Gnrz}3d ?%o?]ۓ}Uӌp X_NC C !kH kvRrG5@=E 0 e Rxa*մz7ZN (!qx =zkxg aw E b  ߷RӐט`T Z$V%~$  #xj;D]Bb P$ i axqIH)X}wx!! r dcgV[ m  hd@a0Nshp , \JxEI`L  6U @$*]a  AM~hA{+z#?I'o zl7(s\DV@# dtma";!.&W nd nM ?yeI^ Ae; J[!NaE >L 3E I  vOV 1w?]+aG= *Eh{3 OcH+ /s'NZ]#N!w d as2 p, 9IZZ{ D &jxRS Jxg #'ap & 9ehA}$ nep 5gt 1Zh'~9=V3 .se+J W b 1! {>mvV  KvffR f]jiV;7_ #S & Oj|5|FXb"4#u /L {,a'aH ?J#r-vk9 v0 Rb _%DsqaFtU9KDK  x& sk #voK!=ldKd !z. a=+SnJ' . S o+!D2=]<.Rw 4Np  ZV(  o33 AyQ *[R2%+ h[ L $ v hO#SL  6c ۹Bw Ԧm=#)hIcxvLI' B> wJOd'  5-q\L a#´A5Nj"-g m k\.-ut{'xtE "r5h ( GmUe]ע(!8QY"A D-q f U% $ $D ']' $@q;9Qe)%Q}(nL I hMJ3 * &2%W/D*ĢJŠ-1'!-3 e hVJ҅J $ \k%FM* Bw*2>/ (1'˯b%0@$DJ6"u:ҳR3dO9!$+ OpOM )g496'rz ƯIJ & !P=K,3X܄&)Ae 2&0&0B, HT݇ " 37F>:" %zgAɮ`Bqu2-R>)'4q n(/1#)#~ wdݩu -e29VCY8Yk,ۤBSv;$];C.17z  ܅cgžl>}1a&2$L d[}۳ؑ+!n-B =' dù,^ˡKX-=j93UBn-PJ ڷ;S.eBA4eDY %}5;7z,_&$!YТѠ|&k3/}5($:,_Vٻk tY-;/%-/`mδ9 f  6*-Hi. | ؤW_ e=Y1#oגd(#;2+503"EKG3K?(k){&aG8'"AɆYӳR جl&8F U!>2o@tSM%/+.b+2Q1/e R3B;b++A 3 vC iQ .-{"$-{PS[&%.,41 L _K8vހѸ"i4i4i4+'I`?*"&#$  6ܸx< Nv&"<0[ !Gj oRVv>7"^JXoL e n 9nRR7y2R9R%i}# 4 va% R#wA: d\ xa' l !JnNC}i[ / tEO#@]bw jS tr)70CW" g kf>-G3vNi9]\{{{tcRT   E@]%)dtV?@ j %xWY.m2kd.I( R hdUy2Oi( ! ! {PR*.1v~e  HrG d b B { bC?x(mBs:;)/ f_yX,s.U &"%\@P  0 .B_2h rܾ*ըЬ.ra"+l{ mpngI="( zq+\ %Q&N iь-ԹQ!nv&6]# Y;{܊o6$ ?>MQ$a"$r'n2, % l)(M `RL{q[/;qj z + c}FH z_!-% % of"[Wt4Kddft  m vOs wr #=/J P#.3WYie@ L PS=aEt: o`_MT&tt #@j n@: m ]=@hDDvalO *"|_I fW e9} GnCz m{ I'svd9]@`?U$ 1 < w W @Dl4 /Pk|cm_6qK[o">72 - s 3.HBtdiP xdx0'$2#3y}(  g u+ &? \[7ThH$_2d{XT||"6lW Badj\TjfclN.W#7[ ;-~8A'] kw-NTyV PJ-/#l<e:\Yn*qd ,#nt=C5YI`M!]u!(T.d!?;<tG9Cv;FMhD"aTfqv. v-;)s+lJ=_#-i~G~l$9E#ZZ$$WR.7T)x4i i t vJ.@'ok'ieV Z!z]`NW? ^ = .noHJs o9=ZhH :# 1yn+/ +CTw\ |7b H 2n@ A a[6 R2~v ]J.  so2^^  oI}  oswuvl+FtS E +Y I >=\G ?l@m2F?b-R4iX/ 2nY  olhK  @' }d$1 `oi)A &C[u  s  OWd# hn9ll~$v4^ hz{= #V@n Qv=5d / 9.<wm( Ggah&t# Y 6V_@5P D ( -) lYNW  sdH'$wl Hf -WS p Wdhg]+$'&dlad+~dXP i  E.RxDk 2 .Z I3z&@.  O~\Dz[m[ Wz , E<=0*O %  H9YKstt O5\zdRKK69@2NDH, :^ NN[@m`  !OwlaN { {dO &}h zDa)LK ][ p o m`[Y Z \ ~;6o9s vDs@+V]t=@=f n@  L P7]v` +.|Zi N G oDtIWRda9zas76=2k;jW( =Jb   }v.=+!1w[haaO.+.Kx2Ab +k + h8.C]Io]~$ wk+6cI[A^v b A W~aawHm/-= R H8w. o'9pZ ,Kh r|Rh2 g 9WDDlsib _Zd'dzRh- ] 6 >&y#aZ9oga+Om~zC*di V!UbIlO#d2z a*O D|:O2s !gG' i A R&gez]R\D6h6 #'4H3 .7 > -G]o m v9KL t+V=Gn}+3KZY# K K( IzZ " \f ^ ]@96S]tO>dohVJVZ?q1d ^ -KS [ RZ.E dp '.vs 3os ?tdDz ""NZ D 8yhm]w{V =~3  K r*3 ( tT h0BVdv=sK9X4q||2zbr&Zt[Rh6@4`|DF@GTKlV =oo9  9jIV ;k[h@Rhg-|EII8@RI 2,[jB[%3=fN@qj'Fq [A8 VwGEh7 ~ w )!I0= ]i+  Mxo|hzgh_c3Jn8%h'IPLw9}5"+"w)+|d3 Mi8" Ryk\2uImu|>h"bvTMoz >d* \*RH Uju| B)D EbeM |z_7d[O-VFj-ue/kNEb~-VO}T_@k89@hWy<]3>"|b loW8WZ<m.8W:s=GAUb.TnF>\hVCVKh>]azBo$LNoi`t)QND44$ ]z/J\}j|Fh&o=']i>4UtX \*M[}ls/n"^x,)0n2h0-^{' ]dQ&]9[" $PjqyO&`u|F"D- 8OJH`kJC%H=='sKs]6 h'EOKdvOV)c/xJ _l-wg;h Qb YnGi W {hKeٻՓބ !Z.#s'2%Y=-9B $A c " :V#(2%G9#]ۡҟ 4K~ܙ|9:?6+a"i1G~%"(2#)+" 9_K֚ێ@)%1c61)-:QblŔ9^P<`=:?4'&P/JI܋ t[&4.[&U!: 3`Q١4J %486-%0"~X=氯ägl F#BB7(', ^UhK+K",%E971W#"ZGԊٯqJH*[498V.&*rBܿP(׽O 7CAH=0P3v . χKY3:)%v HLԍׯ1L&6= 3/(7N֟ɲEz3o*!>qEqE6h=`54At`@e~#8N,./ Bx԰֞<1 Gk/L:3&6:!o VTG+k ==BBPNE+ Dd/"(.#/e Gzw$O&-3(DL p׾ԧ9ؐS()(;C(+$,. 3m} ](D"^# (kCIR%'$$scؘcS"K>33%,*!0*    r%8m X' 02;ئ~i kQ k\Mx 'Vi~RiM c :  nsP|8?,!:#0t>TE3S}JTqH]XknC7LN!7n9<}mJRY* | w(LkHgt4A"+s4m^ j=oL$X SLGGq9NNn!7wX7JH|LZ\&I9ni2EpvuAVwNXwkBL[/k7w&{Z54j03`!9n97VJ3~~@Xr@ +]ROmh`!ikw.Z#>3'_7qdbmL+&;C6z1]V oP+>+ bnE5v(\2&*6cR~MuimwgNoLTKK5aixK8kA!;ut5;#)T3>i1!im318W Ba/AA 'M/TF;"i[);g=mg}=EEUcrW Z!X*5*Z1=+)~;;wQI<}3+x* <8nj|T]Cn#uy)}"+ 4#%Am3s~rlI"mNC$)X'sVE{VZ+oy;k'.ns1HJt rl3#d^'V\ 3"}s-X|atcNiP# e\3P%JM';/Ho'JT/u\sV77J;M|Yn-D7' k_5os/wn1 )~yk&%5 {ER=}3R]4o^m w'&~@~@1kyO\IVXmox 'x4v :[ e I0Vv)R4$  VKCX| + v%%''y%^|!#$O v%UB5 64IzE Z5 q 2 Sfi:/(*/(fe? Q ~#^Oo:=mT/ kM q"l<Ex: & o` rk;r~16G"E  >kGc \' [[vC' ~/ _00O G43 5 : |TT tN8`s2xcct=~ :^b +VsxvNqZ%I0^ :[ Ox e~CRv & & u0:v1C!<Et |S 8e|.xm'|%IR64%6 >#!6|AVv%< 4M'F Eix>G M Gc<X-P|4%Or"V-Ig>xPq i ;vkVV" |i Ek%~km a\4=V >#] >O +@6E|#' |O 5 miexisa!a6cx I|z   _4-mVz` !xgnCT;64VPE-t ic> eC. K q4 z >aK6Vi~>$ / kv6PgsK x nEVT+):K e N q;+M nE;6#-GCVAri Ts %i#8>/Vb#@.|AB 4I1Xex#e\XeiA>8xeNa/+ ikT!xC 6 0kS1;M%i ! K:X3iVA~%xx\e @CSv'5 .@w`J{|z01^ XzI_m@g)@M yK 'n  6 :@GugN>ZB^'V1@'|TMXk'8 K m%4\!SSnIc c X [C3\i6sA` 4t8V-\PiA>|<^c E 8e@N  #>|SM :s @Z ')iT~m<B@SC)N;S'+|kk5 \08>m 3 J@+K 8vX>)x ^"zAgA+;zi''i_NRv >PA 4@8. zmR's5 GRn@-)~'|I@+'z |i`&'PNn ^@-RVXV%%'pRRV' X/6 aPEjVZs83Xt#L@K 6 qeD"e -e >Bk?krO]b_r_tkBnGW!7b1?-idHq~>'THh* iy]NFsPMd^AVo%XLsTt/kZoP6S~XIW$@sn.XnVi+ii+iVAXEoX8V'` #"4Z0x6!r"vzi a '\ XMX 7 3 4gN gqiIiBkI6Zܑ>d o|M6 / B\ZgPCe ^/VM\y8/c9v41X> 130+OOb$;!esM ^  QQ  gL'0j^T#}}=oE.*c*9g[RN'iKhW|(^ a j kxm@MEO#d"wmwBa Vgzw.z%,_ 'iw. TSPc%|CZ;;{wMwJak+AY&4q4 ^!~#DN<3@nN{1gO9"+A);"4^u1 4: j* E  Nw_w+ WWOi )iW, <"<`Q&#z3j4P !%% 7XO!>nM* As9FC>A>>~eNr]Aru}a_#7u -!qw&iR0gw[gOD!_] A| -7nVX.k|e)t :i ]<#j&c_hC}X\^W " 0o*D} l\+%8Ps5 x E8vM(aTI)8 %# >;sR^: %  .f' S:% ~esm\Gpt`e |e e 8 8CnX:  x E+c#4 C IC'c0[_8@` 8  3e#VO'\b v KK' z Si:x +eE4?Gi  K   cg[48i@3 K v ` T x)1` (z 4xGO4H P v  8MFI * j 4NxF$I   U \D`jco^=W~xMPG   /bo~h_6:jN q"#I7 [ !a3%`@6nTO3J#3KB-J+|+=^$ +V!Zyc41*/i@|\V|-9s~ (y+E`%5+yyP@&-'mRMVZW_4FP/io4=X1b]~0b*RB dX3qEg"4PLFr4o8xFXI-#g\L7EeeEqP FAWw B>+N8B'o#]HP5q tDLu_s/=H1H!TZ!=_u5NYI|T0\Sat>J-9];}ykC+>;O :PNM S\m {p 0 IEv6K * . , "TJ>_ /  ! ]??.DN"j&  Tjt?*P^ ^}%^ II  . K NiDWj. K)TI\ V J <MTX !  >]smDk{<S l >*\R|s]|Ry0K X  } _}llx @  jdsSed/ 0RzATes4zYNMYr f_b 9!#Y%Xj  St;`3U * OQIp2xDz0@iq,4;~]!A``Cq - k;ZsSAaAy|_ttD|T9!VBY#oXodJ*DmJ?Qc1o4b7+_7Xs;D)# k+uT)*<E fNP Ce%@!{W7wiX=7a&{ 'y\.k!h3}i!0]5- Ivh)/+7;/d!hJ)vJys;+V{HwDN- 35s~k@wX})VZLEH4Z){</7\;!EA,Nm!5L!#:}zbFdy1YremWKv;kP`T4N9$#Pq8=1 ssdaVeMutJ>X\+m@ 6sIecq''%0/CI\^v v N C ZVb_ L > x6 /! &.F";kDPq d"t_v?}RȒQ!OB*'('Z$5E kpL?!#!!9upVݪ5x**&nNm ,-$5 3sٳ48"#)(22+ v HFIȻJ":?c6l)!~١R^ K(/0+ O{* }#)W/W/.)r[$mHD!165() 32ݩv߮ =" .~Z*="(#)+'~$f @KСtm-"+'~$r p z\)kmk5 HA zX6L c,Z wvNF!Pߍe-\wm ( @z 8C` g~S m p tL t,SWaTE]nRY9 IU! JT 9w.j% Yd  ! $ ,H I o 9JٓDةژ v="''6$7I 7YE ! ! $ $ H ! i > ! E   :tڌح  a"$# }Q$ }&|N.{ PH > X ! .xwޢ p` xfnr%b dc dD:  b ^ 4: > W ROrg7j{SpE-Ya MgN ?H R&xMT0]9Ew " > pZP >I$.vm;S "| }Rrj%?.JEA L [ 6  W [ [ ( e{b*$\*Ye7xE \ { $ _2vGvX|RP> IjB4M05y D+Bvahh7T.V "%46_"3&d4R$6 P/Wrtq 05/8i#aw%lV7d R%OF.>n$#J +0Jk#w /O.KsH9, ;c(%!?R&V%{V&\ S Y1BSV\d#l~ QX \}xIn%Wd g +'($*yj J xr`HXfTZ W ReAS p$G5\ B%b *65F6 ?Q\Rnz: M .`@=o 60, KHaY2}n[PW 8|XFe Wn }$ 6%L <wt$ Ze"^g Jb dp6/Q `n^H =\}+#]"A I(D<* )d$o97]=99KzL }' ۿ#- [ oOds *? I |)T, /$ >!ON k}g./Ew v,- 4s2;.n-Qa4Vp o 1NQ%='znwj[7O74svtu Y W R b/3}n k|'P7MQ"c7'|7 oPw&L ' tdR \>#Wm*  Z`D;M'@q]D4=j_!>/wa \ 4?]F  2X5W#]|KKLC|1 Mu hg\}lbY*d6 5K7# $hZGJGr*fY ~  x  [GW  \ $d,w[@ a'eH +x4%[}9 X y7M" kz/K@8Z krnDSA ^ OQ,  zNfR`\\5$ 4   hT>n'%,2}LT(),$ ?O{IFSv1p 'N@l zmgYz a IP'+'e5vd`y )q< B ecI{'@h]L w]%7\ i4'(#;w2݈#'k z|P߃S fueEB*" $X0E T /R7`$$ہ"P,'*H{εE (* fJ%%S67\'S! sa\G&kDO^-0a"сc!*v6#r"HfSIS Z  A 3wHlVd`S.'Y"nS J<$U,-(jT HNm ^0 ?`[{YGw K֒L ~$"uF91m XYn\Z Eߛ+#B;v_) ?=> Mq/zg 7azYJ[w.&# W/*r9X/%Gz%Q$3 0 zzGRm HJdrx,##r @u A Njj9'#,`{ vX0 rQDl0RYVs՜ H)2a"#6('  ޿n =".z%( f& *@+4D$ =|λÇU4&\P9j* {D5)#)8F7;.Ts',! <4> ?@h?M="6 I?UӁJwJB t/DmGH T^4L G' [%{ Zp IT)$nw$ P) $($5/=e A 0tRIe 4e  y  b   ^ #Jr^ b$*6$*!qs.~qMV6R ]$ Mx9jg{4 $ QA "zw59kw. b w 1" >  6. iJ?J Zp&l}n8 uI E \z\D ! dM4H @` C[-?/i $OQ\_wq^ "p Rvd+$ 6ll E  V`F$9n#:-_?WkR Gs}|+`} H  5+ |?g p Ͼ|ds':<ZC+n +9/D#DHQ5wt?N?d}Ҡ6@5F*%RV8G`@,E ZD@G|  Z gl0t[/J -5Ҹ ! p2* n( " h s%/L H _w  /wgGp ?8 = G %Z.& J#+'W7f ]D'l..D!plCi'p k#GGAl ,]alaDVh 3?'   p 87h[ OK*P! wo}V^KT:MCX"|K8K]{PY= D c! ޹{s'-) +d Y b DJC# Fe 5  ?gs  > ]W W=d,ߵ<J 02%ڴ J ];?CWq}JOA ( '}r#?=H L  rnw( 7lRNbvނB Q&% wGg DDgR}h60J-d SO8Y@  5[sY,75NBi N & /8-@sdN vm6z9m3 ez dsIsNm! ><}D!l% ( "l=6 L tXc *cxdL A ./`l28H3w5a vQ&hBP" ce ! $ $ w OO.@aY`' S@?]AX]$.#WQ%*)d  6 dP w  &wK( kh#97k tl[{P {@a/d2owA VQ } I #J+oVMy m G8IRS J4l`|Xy: As { e`( yW[ tnRw+h'^ n+9VV?v2C-n$_jYc|K^ v@t [dznJ .Ov0?/Shkz8R* 2\ TB UZ9 9}" A ]D7KNdm]l$r=d d Gf: R.8[ 0 4` vr/ +NzS-zVR DZ-kJ)K (3O5F1 {kU?G 0~P  R Ea2$ HG9? ik  \I t !\M ?  v#vL 2@&dhD$H{2zhak 9+\zHrI7( h$ [D   W5nJj/&,YR4OOa@F_ |bXs9HiC 5q%b@&2RJ=a?d-72,I2[.A=)Jtm2I) #;_ZA=JAmI7O][94.D]+EH]lG`zbe]B2j,\s6-&2h-;,c5'\V4R+I.[|_5=7uNM|tI iYrhc-$dW"%IRNuBBhwd|Z~_Hs @)D7q94|=dRd%@  Z.nTJ}=F'.fdlMIz| },O\+d(V_zaFo ;X;B8zDXhMj47{jY ?}jnus=="; I X@ MlA[2k3o& v-k>V $Z@D1 $ vM9|DVKdz6 __) Ft ~z [$ $--X3VI w|=4.V%0;zB0_Rl"7]|T@c>0~uieFH/j;[B=|`l$v9u~M= u.=9q n /OxOWF/7|sX )wR)(/wUfOdK0H4"o"dB2Qz+.}RVD7sO8|Os2o@Us6f_c4-cL#MO4c.*i6A4-^KjgL&os#<f<x# KDly]W>(L 7>3L< D,j@LK"t-!nL<(g-eo,3r4osS>%4-xHHdbSAJHO<51NBP]ztb9p62g2Xbi/2o#5g H$sssi(V<5Wc2I^G(IP6IzW([`$]; .^FcZ>Sox<bk_aG3x)0>&PtM{ "CIl"_M:*}l:\1eAQ^N'GM q<qv9i;* v kL V"5D:DM1 7eZ,2, iT B'>~3),1G= $Eo sWXE6?s7AL|wIOV+O 4>v* (|E OtL5%@Y,t,4D]Y@%qBr"@^h} yWpfQ#PuTr.MAGf|q $wnI[TV5DdI;/A#+f} xB5}Y/ty Eg-ZMw[f5 d\U}Bu<%'FOe\fT#YP >OSah7\=E7aEQk(ahGmb%xW~6) /1?vT;vI%K+[V:9`%[q {9SSYFS% 5^s;#o*um%J'WU+dMX>[ 4W (S\IV S \LZ'm - KB?0'S$ NTp66N39*K D-8izn_?H aRP }1\k]2l-xV;8JjqZL $DXn`lYl> >c>l}A2cO)LWk< }>O,48X[B)&:}\Ze}=YTa&)&J/OE~p\s7TK j= )( 4)H44@UB :Ld7j:f#  @\/#@?8SoHPXjMu>5-vA z7+ z2y?!9nYYJ0Xa#5fo3k+(<L7a}?Zynyx#8J{]nkh)(R@o6! G643/6$30.1n(|<~:qqjcorZ&];xcDyK A$CgTw7v<&':v;xr_c*Yd!:f DpZs eU]j 6N/6c=56:\hVP\(>f; 2]AloT.O<Ugr y,~3KQV l%'2Q<ERXf:M~\D)-4?Labo0SR<7$~rRU[2# &S;>b] U xR:q:6q9hd RX3?Exq'  -Q>SLGl?}$n8_'86DEEcrI+87HBW-*t?/*N0*3 r 2lle--HwxQlPnky_Hx<4Ih.BX.}C%YRm'?=H5`~HRp>Um8=pu9! qr/$9!$9W` B4~zAyy~^Lu Ot03&>+iT 7ltc)Fq 7)=$JA#rf,/=oA4fIy)L+^m:>e"S}C4+I,{/Q-EEu]^4!:}Yf7jEU{4IT3p>"OnmS!$E4$-yB]U99[x')<R\oGe2&2_t{Hx.OO .oi?l{NYEu=FtzHx[&* ^&S{eO)}$'TB6jdg[vQSX/G6m;SP$f=fH|}8G8]th7hq q)x~~ t >_SG7rPmH`g]4\=YYzas76?r< FAS;V? @3~a>SIzwqPq.:nhe8r4">dS$a|B?&&q cQ]KLCRz^+r;dF(X(.L i!<gq%B"vx0mH8yfD|ukh|Zvt*[X?}NmZyS!1N-{4vm;K)^ A%5 ^d 4R*#UE dr[L=cvf?-BR o(+UOBQ3et 8$H9595 qw:}//PG~mYI%a".L4~>_J 9i&nwG.u.*'*hdK0#VAP 9x9k '?s-e<ZN,fZTE<|wh;;]h@@Q *6[y5kBGp 09*0 m;v-sj8l[/ TJO/bI;[8 ;V[Cw`fZ 4 2Lcc8h#A 9-"Nf/enz3^=+hjp-F3"}I,;%]^x)77: uexS^(:Iat=[JA5,(e4t%1YwI7Gnw+Att "[&kLPJNO$i] sAN_I{_EY'"f/" /AK{x"fo-LB{; _(Y\ m[sVLfcq8Ix+4(V1{o>#G.M! !0** m-0x@ S@fC85YZ '&:2R[G yG `][/ JZ!4 A5)5?,&S#HoQ:Pc";D/(=OS m=( IC=S{0)GN,WSZw!@Cd6R1(30-`Ad|oO<W^bv$ 4dXe>Mzich>J.+$XomzH",v|(N( ~&nrHQG4'8kyf_Xy77tE )_-O-#- ),^knu4BJHS * p* <Wh\Y:Pll3*`8]Qo5Um>7^len}|w<mXvjn5)d-%K` w 2Htm }j?5yAz ~G~&Bfb,lW>%;A-/o1rD~{wfQ_pL`E6HQNf2KpN[XWooR.&rdQ/+m[O,f~{q&eXO#<- x{-$&dqe:bYCn|-nKVhl\awS\_WA@Ph 97+n\:\ 7  tw " "D'$Kl Ng%1yM*f!$i5Mm%Wg )U 9~HM\ S<?qm2>Dv,c)j/})fT3SH&,HTg/ E(Y71wM9}vgp*9-QqwGdVqF1`gm* =il'L^' IO`w+mAS(PR$`/J%k(Y,dSpHe 44|_.y`OKLbM:%xsOxoKl^Apocketsphinx-5prealpha/test/data/wsj/n800_440c0203.wav0000664000175000017500000016045412504317077017355 00000000000000RIFF$WAVEfmt @>datai6{5_&;_*5`GN<0R TyZr+ o\lD@3jH:E%h\r&=`B/:Ed6{Nl4_#;4 5-LJhXqG;rAF7b"I+6:}3u,a _'#0;5++5W~ 3r&#}||{wq'x W&g*D63+h4O}bOGC]8`Q+KAR>^;] @vcUpZXBa]QR tLV>Nf%n%LbL(b3 T(@::Sc7R}z W*~4+le k|&Rqy# 0ni1mz9W!7.1]yCG4 WO^,C3 LrmwfcRp@!g4&J3,~@&4*TI'0i_/Gj}jR.SR[#| aTLE\L <*>q$XYAestKKBmtU[e}eO|"Ajn0iP2Cw<lnrRVg4vyQA9}}Xu{i|=9F| GJx 7 xCxy:JE'(/GmOS^<{ak=:~|Ae=E2 rz_MZH _Z_\ (=18..#0 }ybPxOjnj#:j&xrkt, W #E1U.:BjJ)S`/;8PW\qAVPT&v$"Jh=pqwW}eBSRBC$7awexouWl&?J5B&"qs gW2<I" .>U5I{E^# i_a&<, ph"Z)-y)}wB1-V wI22BqD\9d2J.O\~MY ??%xa9sO3 W*2gugYU&3 ??z=SEfQ266<+mK[DGLO \Xu~&?H20EMJ.Dcoz,t>>9Tn[lt]]%iS3JR~zw$ ?Kd^yBO7`8>gJ79^(`2BDI ?tv5A'P8m`bS#4_#82|s_`?Qi(/T7xtWBA TAM^ZP"li(+?cS _ 3?eX5_. $ L$S$YtY[#'-Y6`Fs1#?1iww%)k25Qwft!2 %E I=2+Ivm~ 'KOOGmw~"M h FB_`h6\n2E|DKt)u.9=kace86+ :r#Pa"1!,06q]t`uM%Y *Pq8[tsQDQ[['OHk`eZ]ABIMkA9aUifiL;GAeQ#?/q 5Q|NuJ';9$sf4 dtwV IYT]E.u9nv[>n KFgg^Ol'tdVn{h &#/uX\@,H{T`~q[(VI]K0H")[6#b=$5| <55'i"X` ?xLyfk:D3|2l?@ *0b |"JHp)B+=v1QN2KqzM-0csF.`N>46Z.?KQnn6SG;?^ 17 4x(8J?jb q)^i:q9 #JW7>5WWrt9##OFS"S - w%joORI^exQ'<'N^,H!e O&3;-"&S\" * h5}&/ 7GR^66$ $2XwgmYlOeyZ |vb*yy&/8O 0Jl\}1|x<r C vL}~B5(B2(l<RA8ZNgM\5&>K6J;Ux!C S~3T=izW:6\ k5 po]%G =hjGuU:4wbo2sq-V(0dwA}`btW!eMb&z tLF/e^u |&!uLl\8+/1SuJjo/17EVO 3^cQnUd)I' @tE) =* BB)(g iO=| e&_ 4ci0i_1H NZm{g~EEW_ .Mm`5P?qYx ,yY/o4cN T08-X+GWIDC} ^c"8):*E5m5|cF#'lsdX PYh0<0nGu'!B#*@auzdeEQEO~(I|\#_.<GCr\LbOsm-O*J +uXaoshg{RH+Co"$|rOOU`&9bD6} k$;J, 3tu %.^i&:!3/ is3$  ;eaC]?x|sJW+d=-BmjW?N&Sx_S]&(,vV{ZGecs )61AH ED9Kof^]v'~Wd225*"E@Y2E!s-Lp$P% #tQ,h; =#6 c:Ck[ww+nfBl \C|P#_v{p[zeSL*{L8IvZ?GbLC YEP@ DN,!<3%G{]6W&@u=W5zpOq%1'}/[Z{ q`eTp/|pxp{aAQ=1DZf[UgLF">>I9CB/~ ')/'qRy] <B+qn8?dA3,eh^>?"2|\6\wmI+/>\(X(XQpSX9?Eph@T*D\mq>afOOkCiz-5kWk3h$|TuJ Db<" wHdF  utzn"}qW2%&D5X?f^::~zn#*Xp LH6[<8",-9=VT hG&;N<u6WjiD&d(0%GooM CO7Tr2-a{":\v{?\"QjF Q'kE-IHGowDqlzYQ"[-FM( JE0?R^5CTF ; M\ Nryl3E*mPWaah^u:,i_X@i\nl XqQLwUn._%/P2Ewc"d[4D'=D!u4g2A@7, E&6kJp.:i48 :-QYI*5i A]\Q]xpeH|2qD JOI:#F6q)DwaZ])XP\,Oue7yI!M+FG Zt4fe=H"{u#$cjn*cW "EL\IzD }I'$s3,<,*>kw@ 0 [(UH;p%C7s&x+H%&:hF#w 1vTH X#Wel3 K Kc5AzqZGms " n6FvI|Sr%t.Slj*%~ Ge4fRP S !\/4_,PMJ '_b=bU1*Jtf'!6 SuS1ZB%FnB<k7Gx5=[!n4 ]`zl$.IRiL i(4oGSD?/L'ZneNR^'8r[?TX#"')tFiap]6*kwxB?^0]XWQ^L#aDJ-+Ves%_6 fA<+S@)Dsc^sLIDuS>+c#[8+;+XBaXrV{d\U#7C%F *$E< `r.7Wm6#  %tSA9Q rkEUX rIL3nmP8Ajl?B5uz|zG)Bl%SJfY9>I [ >iRYF8mP/>s}0@IoM <>5KFT\J,*W TH]wn8uuJQVH*I.HTu.Zz#]G^.* "~|Yc|z]:PREe<9N^4@D my.hV7O#8=HacrD N`Ek.U3F:Le`wTUtLdkJ /2=#4\~T*<tc1xoZXeWL&Q%?/Yjn/7 (V87 $hw,A,]L5kd)Z0+nV4 dKs,'TN:_@-7 QuOFY7($TLQO%+f%Nm,lG)K $OcP~o>-Y{X'anL) 5%/&*O:c4H!v%.3eE%*jYvi/s aaQN Bn1?<"x@]:+N,IR=d: })Na;)(u#U: g1*,'=,FJS3B LV,6dr<='k bZChNL,?Yjs{WIEq> oe95:29GjBYbW7,>#ndMRv_]y|`IOz;4lz V:,$L']\oW9 7X8^:`tpW"}uht:"fHUMCFb;\H,9BTHVR rJ*>OCP::YY=5^'KmN (,yYbF7 u3PM0GmY-uIs2jw7?q ,S9y y gj+C>,k2_XxgG$#$gW'ޘگ7?[('(| {{7#  G Dפ΀4@g & *&L#G|b3Y.[< \ Fx H)u%*O< :0mX>t(DM=nxQU w>nFq - 3q(TXfWS c0g?U ,(>| C /MfxC{SS)C0F"|4g?Im- o%)g;! " N 1 9?pCq1,|J*|%K];/\C  q)M $|p,F5Lvjz pgpc6V,}:&xBwL'$Tt?Kg s/3P{{Kp    [ #ʸ0L,K$K7K?h; (px@? '?w_7 gPP?X FJGw*Ph`7ȧx'g%)$', 7/X?x? (&&D嶾͛5-2LD&$o'TewV-g%3 X!##z_({-4-%x M=(?;3HoNPG!߆ȗ?-~@.(9F2#+1!^.ۡoy '-x/v,0 (KU ~Ǫ~!E8J>D;2DH%1x/9>VܹC /6{2$YЊ+P $%%  irô| /<@6+׳ٮeL*#*-ɳ[ 6A9e̐˶r>L%*pr d tPwp:D.8 %%|  /S5v!4#E=Jދ>av#0<;". >Jҏce |>2 `ib2;B':" i ,f9*p"*! .El8!~-DA:42/ףs"% / jE5鮽"4@="Qk^|Q^4=1 g&x<<*:F;+O_@կ,KB%A& 0VUcςa7/WBVD*a7.C`:, ( P>e:~H B09דޗb!4X sZ_k `7=,"`e:61*,ЧI&7:7. ѡU  !9!]w8e<21eG[8x%d&` ƕx%3|,t*-;ȮM;:!*/4,}z(NM !'%Q >s+Ф 1H3~\0..31+' |FYζ`+/8w1<'ӵǞ<&".a2'rReP*k7=63$ nu#,3b$vRZ.22x Exl!,*X-"ʹ~(30W)9z5tʁi !a9#C3Wg ߨ=)9-*~7йC% "C#c6`:+WVw4m,4o* ՒӶH61.8?'x!|h$ +*0S('D%G "U,'q % $+ R@ B @kOϹr+  zhV@ o'PhU4]gj4 1/C#$201fC!2V W 3!"y  bA Xi$BBuD x#, GX3;Lggݸ    "r/#`^^,(:topG*'YMPYCf.a kC0'(5:NoY0kWU7yK5Yb,B'bx"ft4AX#&,&y- GG{s2W 5>NOz}Mm,fbY JLN'~KvNvx/> j2WbxwX`&e(UH]YmZUiB$i:9+( X5#,J+-OJ# ,7;3|D_ ,s%6]cufzE"yCpwBY$xM0(#C#?C4I*;ҖA 5q(jx!$$'Z9C#G(1 ҥV7PJeZbJ%4; FgNYb wT ?|)$qӈv/$'e+3"bDR{)'Ԉ>Q&D!/8t'  'Fz @>4-7&%&'LZÔ{6 K$3\ = ֵ9:2u"3 WJ| hN !dٳϝ:!&@'t9ةo$?O3qg,r)L0%}0  )[2 \ .1 1 Tʽf,j @֍.1J!`!q'(F KaI4C 'g,}QlQb H ,9Xl+,8_j<4  wIs 8 RR\ F AgAmV<@-q 9QQ'g|-E ]@ 1. aJ#,[3hnf,%/h,V)+d7niW0-0v5~vM]'m{R|7m0hnOZ}%X++_,) Aa qbDT3 |.J{[ a%bK`6/z-HD"_+f H_ v^]KPIp|~s6Ck+LKW-,E6Pt_P% e. ,$F5b4iA =tesH]e"Kt4 e"X,|tzZAo.Kx+XBnb7:OQK>S)gax!SZB,R]_AU zfCQ=.!t =%_s+=([bq;T 7h" OwLCK+>olBW`4q.7X.RgTkTv+Gz~q=ABM~8|Si)i@kVVVC@kk@>h< {y0a`p-"nzm \ vaH ,s '&٘-nB x ("K#)7v XJl2] %6a y s h  '^})P dT"NY\0  s  s}k .0cw6n1 diS)o#  w^V WOp a9WP #t&"l,]  BS5lE.9>% v/Asy1 8Wem ABd-4/T p r  Nk-d:N+VWWv 1 n49@Ng$| q `;{hJv# a`# 0+kU7|  & |_k kKbgiJ5. OKR 5X S  & w=&}I ,tLvKiiWFPz#!+t*gVed S G  3st_Tvl5t+l..zI"n"V An=+[f F N_>s #Bl!+KBB$-8hV58dK5h=RTA6 )IItaX0XW_+Ni)_,N,+>I_LNCJ;noS.w#titz4 6 :_I,gN=#+4w5 :|$ 2|`%iD/;; Ukf|KvW0kl<& [/T T56|&E ;Yi45VG<1N. |$Y,@Pn.t %ReP{[yM-b=XKC;`oBt |2&@vBA~kI' 6d+H)S|%5bk[ tn3!q5_n6.]uZm,MYCOoW4]a|>]%Y3LW;&m&g02s:wLxl*CDl0LR=)7G.Pj`V J)t>titJVVI)+ +K!`@kuK,W7ltGBy]%a##{$#}y=JW-.d-w K`!m#ddW(  w> H  /GT@n\  r  H WhT}>YC BVRX/3 r F} YIJN 3 w 0CW ] m!I^HfA  eP%|z r ';Lna3 K 4n  kCO^N %"N  | HF   Blkk.A';24o^f  bbLw Y))qdf 1 0C,.,B+}f <(1  3  1 >+N 9!a,Xq p A $5w#A KE"Xo  ~ F  y9~V3QiA,q  0; [vn5<@Yk^u=yVXm3 `  8I c|=lTB \  E WnmV~ T FI4@7Nt_  Q  5+B `!+[QsM7 NP  0Oc"Df|# F 1   .XgBHnl H j S  :,48 Oh50 ; & PNx+ ;uQ { I#6bSi Y4}2"<SZ&lu5f0 w3I;(;:ll.Pf8X{{n37h-w%3o0S+B;fukNNE =bo(M/< ;5&OBL'! afZ^+>}r7g5=+Q~1O.}kR_iKagM,s(`o:/uM'3 u^sBH'm`[4t`% hq 0m[m00,|4G=y6i&O2mK4]n nSi WOLSSq~n^en(Fd K 3R&=PQ{VqsC  VcFNnz-`WL~BwBj ?LYy7iY~+s6Q/%qGf#,Jz\sbj+k8PT0"2y$Z% LRV=/ @De4=T%@FY rj_#HLtX Q-XTnR6*]2=-bUXHb\K[A;@/uV`G!{Zw d9Z!YRA/D~+A&,=#v BNS|+j3HU;F ~ ?> &  O8cKB-yCmV0crk6ej7z  }d& e >\)>zڸւ{H 'X#X#A H  Uߕg1 ! wrq$ #' %!;  ,SmLEuB!K hff m#% BHCoRH% }| |s\E(1 g] C^  }'} Vv H"k  r w  3 +$| `[u-l+2 d0` \S\o(h9- h {N90\oo W\" %; Q Tn"=0a$}23fSv. >  mAQ0A|\ TX%p=^ Vk ) -2\< =F KA2 XIc@77 [ < qL7O#1 9G>  p9gdEZp9+\a ! #0E[5kFA56N9 S ; !NC{faaxK +l[E,Fi3s,i4mnp& & Q :X> xnkJz: .TahJcO>  El C Or a>QE\;\>hTgWf1 &cJ= Y aL,9 9 x^ Nt\ OE \ 0G[xlp y8^[|A. KJ _ vsdL ~ f 1 [RE+F  d*@N<> Kf 1 h}cw8q ?~ IfaWKwnY 1 f 7$ K-fv1}Cu#tqh-_4\   &Qq< xe  P +,&$DE+wE  ,> c\}<%  )"8h)k Jun+'saa2Su,-r 1 (H  Q !'] 1 =d);i  u h98E'3 A4 D #J] Whn"3V2 Q $Vm] G K s >y9 ^\ [r Tr @>.'fk_^ N#_`JK   ]  iq;00d| t& t 9na. ~ S E q1 P F { 8ifB lYp\ yVk `N&0IE  EeW\ iw[= E ,/4[Cwv.RHm=&_<laX]a#&l/DbxW;Baz[E w J'} u+v#yyBB7T>+)JT(R&hHtP(I1/%/~>_i~Z&6V&Vf 5ZJttC("<'R^27toSP` M;PN^BkeP%|%emiD0}V-f{vL(%[sfn' , H(n Km0i]kA7C]`b',J23_'o B~k~M]YnS"zX8`3 S5,v_b".sEJz[ Y)ZP45EP{ikm?tXRi7v `> &.=XBi`)=d \ /74^=pSCa 7 7.M+iOhW[l_Ku=vxafO`JI4x>`+=>+WK W6z`{zo| Y&JE)EL+5&w"BaB?^kk5 dRoz,5Xn2 uS ZDcA# 0 f Vz2RSBAL k_I)@a#7XlK5,N; ) eo8>L h q |.gRWViA+)L   d  0(V C[><}KA v~,4| dnp;qE #& Y9k3hv3ctpfQ#KN 6 iax"s=hvDwB**z;hn]~nF4v\duPY--dgE mLmBf)3 'atb5nqdn<hg Ca<SiqL2&.S</n'|(wB ES#44#aYtK"R^{M!9:pgD^aC7.\_!fE}u@[OeAobZu/OT5PAuo[sM,XDhAn`%u[0<uR wW_\#3t<"O-qve5Iat{~oIx_k,`lD COdz:7d3~A,,iy|S0 F ,Vi>RlA,mX=QxZfW  n,aa'|A0_ 05-mpNK>s>~)!LAm`'Q#  J5LzQ\ 5`l00#lIuKJ4K+> ;;!  k`/Oh>G`0_}k>HI_5Et+}!J`~Sk=.\|3n  ,Kk0o[}sv06#|=+vk{P3J+.B=.l>}}!\>~ fKgw h{ +BB-lVk Sk7S&] >P} S^7" uh)C S)W(l ,m|k6kN=hG [) 7$"G  .A+BV .+W'QSkC$N48~XV0H F }I4wdaQ i` k-OSWB, m(RS>S)l)>&_"4 4 xxdH kfOfSq  r 0.('>=|lR!!6V@x@mF T&OV  F ] B+Og<@Whp}IJ4 |x'  3 ^ 0X&<}7+QVy[ E x # ]  <2Y   0Od!{<.]B)\  3 Y<a#Y] H  nQ<<Y2 uv  SzVkBY h Ys n$'wXWH  ,}iBE   V| b? ~KdF .Mr  }Nfz,Q G X1 &!F ] W&$Ny8L}d N 7> ve X|RyKEi  34~n r ~  _; w#1^FR@ P RmK0.81 > 1 mgia [ pAQ#nZyn 3l[:| OB8;dHDO > :gYkn\ *& P O2"V#c`a!8B +F0o94+C0vKK u_2\|xdF o\P  VAtI}R\qMf#J Q  0YdA'd$q>uE0X!X8 Bu>iIn7 6 zGX    9N+ |^./O}n9axB8,vJ>(SR< aX4{ ] O A9Ef^O.d,,NL JksI&NBa dQ  r pd$80$ZQ^4.!=W#)t}s}qOYWLVA: [ DFhxyxa  cWk}efJ}=_(4SRN7 #KPcP,Bef r 1 zcvQf8XdXNdX~'}IoMLbzkG 3 W -^R i 7 md; y%J(,1|DN0T8 \ #*\{P H    4J|hni 4$/N|Y-! H 9>+wpX 4 3  %!|suCeV@}UZl=@! ; s i  dhn+o K 2 Y(R23V!W)$~`VcNdtv; : | vaxL > f Q -Xki=>5uaCKKEI0nK#u2:d2|^f3R)Vev t~3(K -+o0@J ls-}KI P CPxcm >t 4S5u -5)SD{DBO\ eEW8_d('RR.7d dv_V+ ` Id$Ain1 !SFd:{s %cnX5tJ~i_ a l7i+IDGnM_V>; pNZ(&zv3 dvK-vi`,u~9[T|@)d l5(Df>m Iw_FJk u=}l&d;   N#,K'~D0N,p& x\  Bvk7GtvVv_ t$8{',t 4 n^0 1MN a yr Y JA`+J!4,{NGVf4  ] ,@"#ch 0   W=~}A,C.C}NMx9O] G VX Nr ,&$7u&. B  4A==}'S @=Q"N_&N  uPL1k"7cH H cF [C$f(Vp 0CYG =!<2hSw   p+MOP(2 a   ,<ip[r C,+M"$O RE 6 r R44z G xS E  qqz f < , ^F9D9&$;N  ` ThnaVWq a _9 \ e8AA^F20   ^ h :|;$7@Y\ 3 T f1+k- | x _+/G35   1 i { _ 6![  V eV$R}   1 n(x[^lX H ( xnis h * ; s[}_A c:C -JI ;Oo3*s+Jw  2 ?~  N;/-7c+B ) i  k Qq+Vf  [J21'11)ga]8}n ^  0l>";&.  q +)&FG EA&g~SLT  gIk[  s f$> 1 q m@SiWS~'Nr x 01 ]   W.)RNE mSTnkYmim}MQT'q 1 6;"N9"[ | ` @Y 2Xk +S 0+iiVha9Q!<2uz)& 1 X4   7; x Ri0k+x9!۬@L49.Q>+y } ` MhXLc&WnJ knRRR۷R 7b#& S_F V0w:c3  cM Sh=Nm SSa|w3k 9L4n8c&}fIf_I  YaMV  NIhkeH  ~m LV"x6 7Y1 >KhL~ *F`&Cs H Bg $M|9{+n=nRu ] z"xh1 3 9 .Xc 0 #xa-@ Ai{9=+wx+4)   w{(VW 5 ffO&|C pS! T  p~]EXm\43W!W.F] Kw S | 5<MdR 1 R`B[v ~idk+xAO ( )w*GJ.r x$z3 8qff$tq !vA)S80iy2!,xOZNl [vM1 Y9 0XXp,A@S(i'WkVh)ABl/ 1 [69 H $I? J A& iiQ'.+RkV=WT~,A!N1  ^ Q7.n\ G lMiBF k9~AXW+),>VVVSCb 06 TF nT9-r VF i}|[B})S)>V,WAVA7W;a 89( !N+ o }ppv!^=XKV@, _ K `l Kf [{K#9Kh4 %e=#e!1`V<{!t@R;L({//I VAAnb 'a6Z&&Bg6B'd!GIw7!J,xM)^;'QR`>BbVF|AMDR&0`X/n}t<GOiR( <y{'upjZ@=e& DdS%/'D75`VKY4GXjgO#gP7!'qRO+~/wSz5k D|*f{.FmBbuRP>RZZA-5BR:` {!|kHM~X  /qOi+(|4lfE-Ksf)R}@43/dII3#wA4 'T gu4Pim}8nF!9AN,!F YWrJ!$  \3wjF(U>5%Q0b, K+w1.9J] 9rZ;!;OLm #[9?)q~tDuu?H0U9ymD%`mIoQ 7d2jI U`'+:4V50|?2Nb L[Y#AD+ Kc@?E}0WzDh;=B|xX54 &TQB&rU}%  W: *:xk i WIKkEZ9<k?rZdxd& /qxfUi ~ Be.; g^" GRm@Mf*O%a Y6S)u*&RA9dRbiYZkf^aH*RUKMkUf}-?}qU/sx>`(8|B`K<m3L\oxuTNxK+ Oyu`a}+0GJWs5oJG:_iv[+nEAi i=L]TY TOseX8[ /O wu SiD/ f{&k 2Ettap ;`BJ|1=2L=h2 :UdS+Z0|F[qLt~b%]F4$[b-# XoO'V R$X+r%82:O:?Dfn3Eg B7s7M\tK=/S?Zb.NTfvx5PoUN"e 6x(M FFd,zjL?)xh6KXP+zZ3BT'{MbTPfg !Nj[:bN Kuw!5@f-50'('3EP Mp:M`Np?ILSy_V*3 _5 ),e$'e.~B_?p..>Wx'y%72bP/"a=9O@iI`/?"S{~  8$$rEq-?0B HVpMJs m|Nfs#=s27)aO [e%&o2hr7Q2^; *fne1NE{E{yQ$gq23jg6K Oi0dAtH4AyXK_t(vtv C/5 d#:%M/-[*Os[A / (9$*In6/ F29SC{ l 6a~1QN"K/D Z'<wI]U)S` H)CX  ))]vH[4ZI*I@ (66S9"&/A$#?K = /I(<gBIA/.Z=[)lE +uG}G!!6%i3N%b,m1?N"(9$ ]kr EW<C"q`ZZCG86p/N '+A-+J32=6z&Q bfhE;u!^PcCM )M "$]{m<akGIG dq~8l#rE,&n1]_7*% 3)8gI?!\+ (-2HpLyiq? /(<X27(48< /$, EKykI/UVp* q. ,E98$ cMzH/ .G[ U4QDC "(?!-@j h < ' )e& %n)=}'EZejP 8/`:ST ,#c.#4F?9E6+ *c4*Wn`)Q6Sjxou!" T Ou=_c8u*6n ( =zov  @&Gk6I1J%k%;ew=69" " vI0!62C&  $-NSF/n/mBv18  6 X (U)n'!% xxp$@a"("$-? 89$ ,g8&?c.4@da gr auS"#S-nRC=Q4D6KF@,<4SUw?+yu,gN?6+* %!| EiC66SD"~H!L^giUBggnMq<Ad)s! 6x\]sdb9*EYKA8uD /i y O$ 36J*h&kr &EXy(4=X*J"[;?+A4 f d\0! jE V6y ?='}."dk9 *(9W;!E-hJS@su,,k( B;<& /6XJn89}.dpocketsphinx-5prealpha/test/data/wsj/test5k.s1.ctl0000664000175000017500000000007712504317077017351 00000000000000443c0201 444c0201 446c0201 447c0201 440c0201 441c0201 442c0201 pocketsphinx-5prealpha/test/data/wsj/test-hub4-simple.match0000664000175000017500000000165412504317077021232 00000000000000the labor department said non farm payroll employment increased our robust three hundred thirty seven thousand last month after a revised three hundred nineteen thousand gain the month before (443c0201 -141053) in the nineteen eighty five quarter the owner and operator of health maintenance organizations earned six .point nine million dollars or twenty four cents a share (444c0201 -109296) here are price trends on the world's major stock markets as calculated by morgan stanley capital international perspective geneva (446c0201 -74208) i don't mean there can be some improvements in the revenue act of nineteen eighty six which took effect this small (447c0201 -78707) at any see the need for international managers will keep rising (440c0201 -60386) first commodity appeal the explosion and fined to the c. f. t. c. (441c0201 -68809) bids totaling five hundred twenty five .point five million dollars were submitted (442c0201 -52826) pocketsphinx-5prealpha/test/data/wsj/test5k.s1.lsn0000664000175000017500000000157412504317077017366 00000000000000the labor department said non farm payroll employment increased a robust three hundred thirty seven thousand last month after a revised three hundred nineteen thousand gain the month before (443c0201) in the nineteen eighty five quarter the owner and operator of health maintenance organizations earned six point nine million dollars or twenty four cents a share (444c0201) here are price trends on the world's major stock markets as calculated by morgan stanley capital international perspective geneva (446c0201) i don't mean there couldn't be some improvements in the revenue act of nineteen eighty six which took effect this month (447c0201) at n. e. c. the need for international managers will keep rising (440c0201) first commodity appealed the expulsion and fine to the c. f. t. c. (441c0201) bids totaling five hundred twenty five point five million dollars were submitted (442c0201) pocketsphinx-5prealpha/test/data/wsj/440c0201.mfc0000664000175000017500000007206412504317077016555 00000000000000 A3ͺ;_S{j# ):!>BA+}\{bRO>q%?A55uk#ŸԿ鋿tS^>Gu׾=`i)οsAj6?l?:}SeC7Y>웒>||>Dw7sAnYɂN?M(&󿧿??_?_OTW(A4=u?t !:ppyTI>TS?; ]?P$>Sֿ*eA)ǣ?-s3* qφ8`@?WN>5T=n͂NA*92Df춿??)e?GG1j TC Ap=>F¿5?gSBT`Q?x>>8(w`?7徠b;K.nAu(>5f+sV?ڻV=9>?gAeJ>xc?,;?^eD2g>N=mAxS ?b<:L@{8ҿCUϖ?QIA>4/Cǿ?:[tU!:R@ M{?Up?PA*>ȒbP'20>YyҨȾBo]?zA04޿?w{?}Q,0PՃI>(_Atg&HQ?BA?$*` }>حAlo/ Yư ?LC?|q?E$?? bAnڿz) Q#>M>m>@x>V_ܿaUAofտޛy[|6  >PI?I>{m>zG2Aʠnsǩ-?G.>8i~rWAt# ǭm1 US⿥?QJ:f-AFi3PۿdQ>Qw?'?$Ŀ87/VA d)οψC꿑?k?pj>l>^6Y=|Aº٠ 濁_1>\{vt{ bA&VͿQzmT/ȿǐ?3BO=RRK?+y? `^=;Acez=HV5t:h7?>̽S?dziA뾗irO@~[=B>?k>h=>߾(=YAN;$ƪ.^=ʸ>y?==gk A=п.;ؚ ?+y%%>w?BsA?@Uc#Ɛ?>4>O>õ3!B'?!A JR+l\\Y?s Z?>߅?Vny><]1߾&AᲢ065WaC5<¾TIKC?_?GXŧþ~A!{h*?>pI@?QpZ?CuC4>oA+:[Y .?/?L?o:?v>оL<>fA>2X ʿuJ ?|V0 (.?9=Y鳾 g?)Ah|nc݆Ͽ1>搏!?G >#2v?JTA$'G e$޿۽<ڿ}L>>>pe9cAժ٦Nu9(?, =>?>؉Y=tAF 2>*xar?h>,:?*A|hS.~Ͽ&Z?t?Q ?ɳ%pYwA## 9­PJ!(>8<ɥ*>?5?k;?aAllksGͪ?w|>'>{Fb>AQz v}?5p <")7=>Ax^k|0;d;?@%#>A =Ю>''ApZ47V"ҿ?Lӽ(‘5?TH>ؾ{?(%AN>}冿5)|& ;?m:4?,H?C=>M>MA#Q{pl mEp`Evƾ2>L>\ggA \>a`=d?0 ?t?:?7t?P(=} .?=Q:>;=DAA$ՏqT,Ъ!?im|='՟>>==OA0esA2]wAͿɂ=Ea?)2]} b>h?A2?) !pg^U̿ JpA'0eɿ|E&ˊ,>?q>3HOFA .5o?]D?4-u?=$=Ⱦz>yNA֖=Th ?=s=ֲ?x?A6eQTI?ȾyY? ?G-?4w߾8B"<3[RlW@9r>ꇿI > ?(9gB+ѿR6ťnf71k@MiX/J>2F83ཀטkM?M8B?¿64@wjv2K̿ CBWw@ =o]6ZRu?@ DlIFj2zߴ? B`Q,MH~YBVv@,;yuž~zy>m BhDɾӾTqQҘv@Cv_ , ÿ̽(N_>"Bo3_HK#nB@ZkѿDPs9>kRBw a V"77@6z h>vFH!Z[\s=BtƿI~*>yĀ @P+;t>9ۿԎ-Bp?>wZQA?T>?AFMlo>G?o_M%.>pp/@PAB1WVE?5ct5Y?OE얿o>̉H> V ?y+9B097v@[ӜuV?5d>G=й>"?&<2? 4B:?+_N?ow2FQ i?C> B;E֩?⿯܈??.a?<-?^o۾kBS?Hʧ)ȿ&=FBg*$?о¿s?hj?Ӿ:>W inBkr?{=)L t`?L>ݾ>迥H.Bo;?{=KS*?^?EN >6/FkBuZ)??:_1 aL?Ҏ]k?C?>e\ByC?FD9?,?#>}5ſc518qBxYE?m^п/@+*F>SM]L>d>xBuh;qY? `pχ?)i>Ndj?.?^BjR%?}־YGm5,?g#n=ǿF?>Jf?BPe>.7?w?[́6*tX?S?]?To?j2BBW@8?(?##k꿀@h@ ?z̀>ܭBB?k??r<:y?MI-@$~?lm#=SBRҠsT@/^yaw>GC6?5ȿ]pq$?BZ₿_@cؿtѿ?g"Lw?xҾwҾY*?IBXwb@4[,4?F(emw?JBPƿV@]&;?ڿ X?cE &Yk6>BKHD@|x?YX.$o?Hom=*BI}YbA܎q?;õ+?RUgފBFy`A _Ww?*ǿBuQ?E{>"EbBGoތA/U@ ? ~ÿ?oy2>mfY'P BIJ;A5xo?AZ%n?Iܿ>˿LUGBJqA~Ei?%5(k?kB>*=ʾok[BJR$]IA8@T{D[>$&uv?h,wn?Rο:'[BHH[A1\+dn?Sif;??;!h1f?B3<}B@d.A!?Ot5X?+D/>`~G?j̫ L!B-.:@m?\d(?:Կb]?V->׿>ݾDFB(dС@?I T́??植>x#>ح>܂B+9@r\47@]c@?Dgн{;pڼB)@_(z{j?U[[?l>]0to$cB @;0}a _>?r.-?@I ݏ54?"B<o@S54K?/=Yo?,77ٸ?}\ϫO=Y?pBxK@?f>fD?1"G? 2> @<;>3B~y0@N|?a}t?`A??s]^w>B9@V'>ZP?i?D eG %?E&B'NX@v˿Ym?Z;9>U?$r&0?*$) ?vB) 1B@㿰2/?7`?>|b>A{?y-B.s@_6^>AH\>|>>j?d鿓Z?HB16Kz@ha/>͙3?~|?S>X?B9@@fq">R(X@̷>!?7?:qB;sqi;@f;>?f@QC >dE?Xn?Q ?vtB:3@.>x2bѾr9?﮿V?.̝>??nԿd??lGB;, :}@=>&>?H +?gS?qK??B6&@ED)Ђb|?I !D>"?; ? >B/oC@W?}ܓ kE@M?q?N@B?B.WD(?i鿊?BCm@*?Ɔn$1?-[ p=[&^R?`rJ?eBXW@pK?kFx|?/~?딿=W?Ǚb>BbuԚ@hDW?\XK,]?_)$>`hyq?X޿wz>pBeu!(@ ?(y?xU:G>w>q ?ֿ I?0Be;!@F? _Sa??mn?&<8?tſt>eBdbb@bE>ӔXU=? yP?D*F?@$7.>>ȻKBb3a@ƌD? Dk?}7;B?]ZH5>M?֍B_%@м#>eI7!??dʿ>ۿP>BZ g@7>*GFtn?i⿎Й> i=˜BT@4%>Y%o3i1?]ѿI >Q P׼BQvH/@>e+@d?6쿔>X=BLr@/? 5yt;Ah?_E.? <0BI~R@?5qВѿOr`?fp?3/qnBIA@?Iեga4?R?T; BGFm@+?iXѿv:߽J?tP?轄%nB? R[@|d>Z4F)(˿ƸB?_^?p->=hElB24AA!>Ovw;aq?F!$?>E>$B.s @ド>y9QiTo?͑?٠<=MB;^o(@vž~&8H?Xҿ]S?p]=ʼNdB8vuAg>UD >A;Z5{?pGi?쿼2!=pB)f8A?i JCJB&ry|kAl?dxb'(O@Y?J;ō?_VsB˿ A>mb;KX͌$M&y׿q_BZN@Z?P|?@5E͋I3?'!>?ɦAg@ zr@|羍qBP>?=>,a@0!?()/nLAڽE\@>й6:.@VS?>AB>ؗLA)@"?IɿC@% EFŌ?dڒT1M3Q=A0=A9h@)?볅=8@K<,>/!O?^?>xv?mzA~&@@"?,@ ?I?0ݾؽ. >AjĿkm@#fd? њ@ Q:?%[1?v?Ut>Q>5oAQ6i?u=ӿ}?fC?4>~>>HA6~g©0н?᱿Oc?&>'y=>X)>>A*Hx>@J8p}?>QEH'?y?/A;5H|T/A,tTgj?>W?b={?&?GA+yd_4R>'6?|^(>K?/>!A?bgi?A&IĪ3I=ЬX.?X>‹?n ) =ބ?)_A,!Rޟ?rK>&L>+>b>IA"h6) u>^! g^mz# A  |Zi?jC<MpbDA+l ~I3+3T>"' />Ч8^xiA=23L?Tf=d?`0?hW2J/~T?n>Va>VAP࿔?O?QA?"?{.?bV?T>>A~ݿ?H=,6>"?4X?)? '.dAnVė@.8V1>}d8?``?<>T>wܽLADWq?z1ݿ?0?L=&ۿWp >p>XxA m?htn(?~<$l>? Ӈ?Ex>>j_=A}>mt&}dk(7>Y>S?=gp>9xA&0V__?:=u?AM+Ē?t?>uQA 1Ǎm?Do?R\PцR= @AI~REZt ?f - "?Ͼ>$>9-AS Lt=:w+,߿[=$>ťPv(S6S<>skAa >;JH.'(? oK6=>{7?ЪAӿiп8/D=¾>|%>?[=v OhBfMb.>xv˾̰>^ <r?ؾ+ؘA򜹿@ 6?>?2IW?>NZ>q#I?CaL;B6?)?J?׵ܾ=2L?ؿly?ȸr?΋[QwB_=X?vo#?O?$$g?zPJ@ _5Ba1>y?H>a.2!k?~??`hnePoB^c?=-!0,?~I[?GA?"LkOBUݩnQ?C=PLMix?ۂOZ?1ſ1 BD|:l?~?"_I?OV ?|B[?FǿB3$bz"@ $L?nĿ% B(@k?2h@iQ9?:"οnHce@*(?~byt3B&^@s|?@aO ?Co@ +0fK?fT`B&@W$v@)N@?6L>GAz?@ 1)*?qre64_B(@I@_q@ vsϴ@wA?P1ezefzB==iB@Ǽ?ԷGa?4]{>cpL;B].\B@XvVD'b1?MI3?rz>~;@_Bc{9@Ps#H>;-Df?ڨb}C)bs/=j^Ba9@[C^{?=sO?8⾻A덿%AZBar(@7t.JMJH?} ;Y/B`*A"Hvtg„RP!?c {fguXBaBA 0mS5w2YU|?{*mi="Bc1W _Bcj@ i]p?ؿt>&>63BcJ.@ZIq~=7foh?_u>k=iNB^Nx@#>,[t `>8A|8<>[a>4%,DBPqx5@ӓ@?[<^80?<6.=e<,+dK=(Bվ@@(isjl> tS2>=ҷPpONE7AҾ BY9X}Yn>>b@Lr1r["]~vؾ }18A!4?IW˿H oY>…˿ R"vǾ!:RB<2@"?nѾ?r>u?V?7~?s_:B;| @$[?!?j4?R?=VW=?I6?&B?6$?_?} 2Шt?".z?̾8B;5?n@)|/.5?D?̾{o?W>|*B1"We}:@?%>q=~@?þ>R|B-Eŷv??anilX>c>c6q?4F1ōB!wſ@N0>~s??Zx*Or=9U>ŋB9ͮ@&@>?]3PɊ> W{2?B$5B?@DV2PJ@ig> b=(ۿ'b?@O̾c՚$B>Z@xS@O>">лȎ?\\mGBF@OkýN@NGs>> >c?vTzBSZX@pSX{8@ w?}dY~>?4LL\ ոBZ @ YS4V?2OS@:Z5.q>&Q}?/rBZ4?H2==ܴm>fK@^#wݾ4(= :Y2B[ ! ,>132@m%w=w,B^sޓ>y%x"@vJZ 3=%_X:HLBcԟ'ȿx:g>Ύt@Z("aW7{2BevCN)R`@0G"-|nGts)BgnVz?6ȿ;HK=;@"y,+Z+Bfa?[\Su?sv 2)j>[f E-BL,,e?jB&6?`3>{8>4w#A_B$J?q?̪?3(rW=^E>ۡjd Ez>a?A @@XU{@ uy#ῨˡH ?&2C>pB8? Z?Q!6?~z?/f125 UB@2?3)~N^l$?"NgUBFl$ @&6 #FY?^>Ჿh@o.B7ȼ@x'OQֈ>@y?!>ɄT>L-B1뿿?8?m:w4+?lfcOZ?>KJ>=¿BU,[>0g>a?7[M:@ 轿afg?j^2K>ZBY>৾?bω %?LG0iUTB?5i>,'}BX>*뾇??ji-G?Togw?5-ُ8?п(#B)? =@<쿼R?"OSQ6B wz@va??o@&u +?j?c'} >B;}>.g'? /  Ῥ>±٫?[sÞBG-`>I~u>#ſj?mRBYR4 k^R/0?ҿNܿKy[?.juSْB^ƿ1%\?YeLPu p՗>Ծ#%1~BZS^:zew?H)H>GɾD}4`B^!@:!w?ufп-X>նG[Bd +$6C߾ҵv?>Nȿ<=c{`F[Bg1Q(%ۿXk#&.?=NɿgR=䓥:=B`OPн3?DQP䄿M>UE5B^̂ $_?fÿ*\F避>7 eBe <Zq/UlR?]:Dӿd9ξ#drBeoo 3!-$g?oH6ϿD<9 t=B"|Bb9[{ٿ7Ӄ?ƿ6Y?XU8ؾIE"\ҿpB^po/?7hɿ8Vȳ4ݿ#"BYh@(J̑j%?5oBTQT=оtf4&B^"qV}ԿbDXE_ ?迦 R,A:I> %BY, e>q- x6@8,^$ә+v>#B;BL 򺿈 ?6@ۿ+ؿ?jcMB4 Ŀ7&\?>c,@Eb`?(H?ƿn侑6B+Ԏ{-Y?=?RI >G?L\?(?_dk9B4T4?^ d@ "R줾3?1???CA?cҿcB<&55?Ӏ?Em?Q}?YiHu?MP'?C:*B;/36@@R;?6ӣT.B07@f?c)8,ݘܿB??*D_| s=GBZ2@?KhRQ[ ?fR=N*2~>@A@9?|>c{19Կmzl\ >Z]A>@?<[QڦGR D?8//wAc"=e>潿89/$ &?l-Q+⿗ hsAl@b9@?Tl|>, @ (V|=P 0iBYd@OWF?jG|xU?+!d?ɾ@sx"soAUJ;B58@N_¿[?'VQ>x<  i'e{>+tDB>>LO?6[2-A-¾.VEN>DB3+@g-c5ЊG?Y]\H3>.?7!PiEƢ>B'{@[`>v= L m?߄.=>-~9B2'@?!7FRq*a>{>6?Y#TdB,#@}0?Ƌ?4sz?..>[cB"@p9oaOq?Ϯv=Ŭ$?c0Q>$-ֿaB?]l?s?•X~?LX?dѺm?چ%>^Bo@8$?-?W^X??%eo3?ڕ{o#?iѿU߾!B@4p?#l?Y7e=v$4IZz@ S ?koVBc@7¡?z@+׾Pi\@#~[? ٿBC@A ?f@ 킿'i~!iu:1@3beN>wȿ>8݈B[@Pj?+@vm{^!yH@H1YZ OEB%։@,/?$K@?CTʩ8>g&@gfʶU)ǽB,@QGK@ZyΠ"äb@Rȿyc,\LNBWI?g\g)ſ>Z;>ps? F߳d?BVd]5L>ݐ?.9B>h* ?u׿k:uB^4qB'퟾' b?Hoڿ k )1>7/>^ؿ-Bf  g*PV?@1=8mS ><TZ=Bf &92 {.H?L*nܿ>J4+Bd)1u83U(?4:꿈}?* {@NBd[Na5OwVڿ?E俒]Už?>0aBicWFW?pzC$?5/_YCBlo IJ?eԿ\}Ŀ? w˿&Bk^U%o<;w\?c+ƿ?6 ҐߠBhG][wvtH?Ky=2ֿ ?Zʿ, NBfSU7 0/`p?ml[^?pGRfSBfMM  /p?e[7x?X8 BaM1TIGR&?#NR?Uq?濝;%B/?@,]zD @$I/?'eY>IBBA>2t@4>/3;=>)`?}yC9l$BSK.R#?bq,Rhԅ?ľ0P~>dMBYheB ?XΌg?@qa:(y?/bTGB\`Vx?{wD@=$@Ab?%*BS?A%1>B]B$SK@6 ce3)@ { >z;T>"Qa =\:BZc1@F6ڿs,? i?$ HF> ֿk9]H>.>ܾ B;6c@rd'G[c$?=wO>J?{B(>B#d>{@P5?V:,UM?>6Tko? X;Bi@]]@A@7i(%<x uD QF>6Zp>#BE@Nc@pM@IsZa@q[M߾?FC002A?#U@x@94 -NrO޿v?&+?if">PAtt6@@f >S?>˥6,'>0o ?$w/BɹAO%?B?〿:?X>{[)0>.>V7B#)W+@ʮZ?ϿI?[TjK? 0?DBB^zM@MRqH?DϿ3=dKq>L\?;4.=}Կ6VB/VZc@@=.?>6>!?U?1}݄B+*8@@bJ1>>O=fB6?⻞\?mRX@ gNx>\?U=( B=?iӿ@./@"M#)=ݾ#?OF>(?UZB;@6"? %w0@ {ᐣ2(?>A>q=R޿N>B3/@.om?,ܓ@1Sa ?==@;-.B1U@M?5R@40?>3[>!1>B9@d?h?{4QB(V?<=?5Ύʺ@H ᾋ??gHHп,\B5 ?y?մ_QO@E8P }?Y=3=^=B4?E$@F;@FE3n@RžE>*!+B86? @eU}lA+@?v!H6R?;k=g>XBY@@R5%c@!so?$>p%uB'+]@|?`>…i?He>檼ō?/b= QyB#(#Q???Qe$?>]>>~9Q$=)dB*~.X{@ U2ʿ18?юs?}%ٽ=nײB.43p@Dt0\vm@D=cQҿ%?t?})B-/gJI@[S ؔ?F<?%0fo?Ӏ?+H,ru?-B.4Nq@p X?QPK?F㼱'eテ>*?D>&P㖸B-(O7@rC/g WbKp@5?;">^1><(B66QKߐ?pM0?m<%?:?@(߽?w >:2BB/_bRK>>M@τ@B?p#$?#$>>AB1?^t?jy?]?խ5p1>$=|? B4O)tRbki@g>tj?,?K<=ҙ?|v*B&_STC>'@(~S?V?ƅl@[]\?)~@M>%E/۽!>BE@u>w p&>[==?m>]$:>|Aj>nN>Aڞ @3Ʈ?s?yD?ڿA'?Va=A>X7B@]>D؁#?]v\2龟?hp<žB(]B@i)?0"Y+>J]M!#@ K?]{=4>wUB<@VEYxMQF^2@4?u߿&$BA>@'\쾑ر~n01@3)?\1,3>Z@ܾ= 翻G(S @I?k7Rȼ"]2B=@u,nc@V{?Di&.vB=5@?Pξ{Ŀ$Q'@*? =*B2@?jfw4?_ItP!zހ@:>ҿ4>E`ܼB&@Y@h?ji)& @??r2>|򿿜Aْ@W>e, ?2 俬xt}@_ ?O1wS5oA1@:`@e>'@aA zH@_>/_Ͳ{E>TANCI?Hxz!:4Pb?b~G{=qzOiA0?k\?ӿ/`?'<|J?0 >m^?')-A$b|rO#p=0{?ч>]B:d?7gPb X>T?Zv7>Ym?B/P~[œ#9ܿ?bos>iϿG>B&JU?1I)(^?~?M\}.? #? ?npB!$$5@Aeȿ4?񋿠n>M᾿b>fdp?FB' 1@p[xq $? }>3m?dDҾU?OB-m^ ^@{?|>aD:o$6? >*??LB(z n.@q2zv>v`<>o/>9?J>iBɈj@ϙZ?+Uf?uRQ[j? ~?hEѠ"Bx@ip? $D?A5?#?C?f??[%B%]{@? -E?<]`,ReB?ILBA ?z L:8B">OfK\>o`BBEA#z?'JANɧƹ-5u+>^BC٩sA&?1:vfп^\99t>$Ϧ<<*޿F BAQy8An?ʥqCosx@c%>X>BK|>2A>B=VIDA@R^ Zٗ>kVep6=̵?kwB*+T@@W )<?!6qž>s>(ÿ! AD@k<@N@;^'Ѿ{=@.@Yq?,?>\ -=KBUi>JjXzA? W@f@H6e5;>MIP=,G~ N&xz@3AA`a@ [ɚ>??~>9b?~?A]ϼyÏ}A<)B=p] u Xa?=ĺv:ٿ A(oWfú*RJi>f!P?B)3?F⼜ADuQ[+Ŀe.CYBd?*>jqr{Ӿ'>[>kv>RA5=@V@s>8beYX?zV??֪>>hRq=4B%>O@P@L@>G0 D@AR?YA>rB{ >?OǾV"Ǖ? ?G˿S~9="Bc?` I_? ?2Ѿn1xD?d?.~^ ?a>E?w}3uq<wB02A)>1t?Qs+Ά0yB8VA0-t@yh-1Yt?r`>6?NH)*BCAȷj@kPaLzh?>Cp?%׿=NBJYAʃ/E@ aƈ̹m<?F%>}Ym[BS@vܔ@er1|?AAFGV?W*&>(bBX@ʅǺ@?ɿȻ>ּ?;l,|`'BRئ@ĂZ?h.@ l>z?~`G[`BO@?ncx0@ȡ ?~?% />f)BT@'iv?O=A<@(zc?˺>7 u4L>SB[@lBD3U?=2 I?٪ȿ{7?g> >T)?`B^?>|R?*.-Xm>X.BkP+ $0xFOc_0O@'x_о +>SfƿЈBa%hOտFv߿:P@Fw!=J>CiQBXVn6>=ש'AE0Za@S奄r濌auտBTK !?>Yt'@BWBRxH BT0@b>F%r;'@l> Qty3>LBPI,@mG>:l[7$? G?6(OU=C{ĵ?8BFF졀@.e?/g5Fp?{s?-!>rҔ??:B?ݿִ2@%r?Fbr1QPw?ɟ*ā?)ݾk;^?hR"?`߼BDX?g a?m+B2@?UR|?C i<h@q?R1ZBl@?iї Dd? ?8 >x?p@?qqmBq@\??fF@FP?E꾬$4;qB$:V\??>D@@>?>UF?RLB(0@Wu~a@VgmKB?-l)>Mb?Ih?PB)1o@g5>)>B> @R eϼ&e5 ?Aܙ?qZB&!@m >{ꦿ\L?䌿0c??>d(?BB%t@\98>ƞo>gv?.>j#?P>=?" =L B#<?$ٿ>?u3>\N??}k?yrB&m<I?zL> ܾ?_> ?7?re?llB)U@O?XkYzLz?P Qء3@6S?9B*@@} " }o?d󦿹 >Q$'?M׿؃!=IB#?@P?cU{k?`p@ýQ?п@/G?VԿiB4ô? =?QC?>Ʈ CO?f:u++ c?d5|1]B:Z>ǥE ?K] a>&Q>|οHBB+N!3?p>BR#Ư@{y^|>cW/j8>B8ٿ\L>r9>&MmB?S2&e?~RXbB"?I?(Q?׀W ??Wpgj ?B'ئfL?&\[? @鏿?uv?L>.=ǽFB't~|?NAX^&>I ?OǿvA[>XE}BSR@(R=83h3,d?LDžRS9Ier?.?cٿ> @Bf?gsO@Ki!>^K\?>D&#|>JBgk?WJ@w6?쿇`>d,?*riV?bA(9>+8:?U>@zb=?>A*? +??U. Aٜ>?@@>?ؿOIQ?>||?Gv[>eA4?pA@@@)@Կx?®F?>OA ]> @ ?g7}re#?FIE?=jA?{?l@GO?}?\?<俾7>StDɾyA@.:@/@~r܀ ?\?H8> S?sn=H>&}A:@@>GR@z?gW褿6? $򿍓1>?em>ܿ>E <]d=,FA?ZiA_@Z.@@ >^fN>>Jv?-ɽ%?!sq+XB ?v@\@@[.@8?/u? P@?E+\c=A$@>@[@|?t翗uZ@Y ڿeppUрsfܭA @0@gvK@??[Z@'}?žDۿ-?vAp@(@az@{?־Vj@ *Z??v?!A@8?/Z@XHx?gC@71??>Gt]A@)e@݃@y>gO¾@ w]?>>7waOjH>An?5?K@[X@>T@Uv;ӿv~f>@ZC-#?(`Az?K_?=8@O@P=k@1z|:b>^j&3>A6E>?@ ?:u?e/@uvj>T)>zL(p`A- ?^@Nr?Y?@@VsR6&.?NT$>߫4 =A1>@@7?D]>U@[h{K)B'QC 9N)AC>?I@?U> ?vd1Y >߽3AxkT?A@-e?v2?|@0%}3ZOtq ܏LAq>x@4l@??9?硿K$ίI>I]?bAZw@D@?u>A?`|>j?]?־\P޼/xGAM˾AO@"?. >_A)w@-JZ>>[E)d"uc>ݙlA]tז?.??K@1\L@?V=Hzd>kʿW%? )mAey_?;?Kx>g@;@%>|@G#V>>9> >œAY@?1/ =?(>??d?$TQjJ?gi@?AnU?ԾD.l?fq?w??)r?~!>5 ALG: @T?KLN?_?@g'd>?Vb>CǨ^Y?_>]{AH%+>p/侩=X6'??Z?3]1~:)DACP?;QFhVPѳC?Y=n?dB=GeT(A6T{9=>䣵?ncqk?$rLA"`ܾZmʽֿZxU a?s@?x>c>?BhA5w-r'=пizfϿN?An=H#>ᄍ R>h??2A5 ;#??S+YR+}S@3A#Y8?ƿÖg%>N~?QWYe9>p>} x?ǮA={4dN&rJ?5? \?>6A>#W?jcϾ῔]Fr?W=*?}q,9?Tx?`A6CkoHxdW#:?-ҵ 'AR~T?6}=?AA8ƿJd>2a;D4?R~< Rf+<*?E=A"CSSؿbІH>ξ#?>e_?B;=A>5ms>$~wֿ ty=E?\7_RA*2Ne? W(L?;=}  \w>>G+>tBA*cx-ޖKEN$?oK1.Lv?Q>%QAJBZҿ^4˿P3?XO?."?">wABZ%=NNsӆ?O?##3>?_>}%A,Yx=ބ= ?:"mj)=?'W\? YA'i׈SF)Bk?v)ݿU¿_?=PO A+?da?Y mN>h8AN?)QZ|A2*>^~kϿܼW 8ǚE\MA1bR>Ǩ'N9!`o>"o?.?>P"> >7Bn+A(pjl?Z?[TxI[>:?%z>꯼;>gxA"ǦXq1)Eο?B_>cq>D=$>A>Aa+Ybi&?$??ӵB>}\?(cKpQA* NQ+3M??j.??9 ?VzfyAHBpɿP (0? =_a 5?E6g/A.%eџľ?t^;?t?PA4zu ZASf?ǣ諾=˴>%R?%1A.?oM㿌OF@Uu ?ܾW<;|>Vo>DA9 d#C~9AUZX -}VNA0(w"\ؾgd"A8&nT 8n'LClA>>hyC;<4,+A2DoyD >3C?Vl<3Ӿ[/-tA8:yƿwmҍ9aC>tl 9QR>IA({_hIw:=?PuRW>v y? (޿VAkL}{e]7>p3N>߿!Y?,]nڒA2҂`P?^f>0.6Ѭ>ҾRA&P["=+NF r?4'8a<&lw=;R䷥ZAp3j`ݑߐ뿅#?9n)-6wcH>M?N%?iM>X?3o0AI_B>0J;V?#' }>Z+>"W?^VA4kR*6[ >gu? <dYc3&_EA0~'>J!Ts)|fzS;cL~?<[> ^AC_Q|6Mx?ʩȿoD<_@Z?8|>o]A0"c }g_?n?x>:QU?N?gXA8'=ÿw4 rH?Ծ9?G>Zl [ʿ"#x^6?(+6b=b>u{iC~%Cdj?U6žZ0A/I[+D`Uv=vZx>B6?WU>|ɾ(5A,D:x-Q?]?H?6d^b߾>=nl=%CAkD%xL[Q?#>8a{_F A)Tlå޿L_B԰پ?[-?A488z>C.>n|>ۅ\q3>=< AEÌJ?9J>@?hu?H>YS1?f?ZvAA [XͅW*ڥX? ֿ޿-^ {B?X?ڂ=SA c\ E1? ?BL>sj0ÿK1ƾA+"Z&u֡jX?|j>f?Ij=t>)PAq8'50`)<) oR{=}>>A.O.{#>8ZpO{L?o e? |w~A25>'Cпt2֩>,lK?H= 0?CZ>A9C?i/p9J+h>&>AͿmM%z?lqA<{eN')3Ӻ15?ݟ>ϑ?~,(A>~C%)'th>tv6E>Qsn_`?d>AC ]FH+e>@?B=x5>a{8d=? EA.'E]5&7#R ?w?5r=k>TG<*?A1)x9E| uez6>C?WK>w?H>C A#6>ƩCnfypiJ>]8?AT忢/?xO7x=:>9嶱?hA^ɿ,:Tk}=?k=PkB鋾>4ddjA;j $?X1 ݽ~Aؼ=vo ADep"C2Jn?'*">*퀿ƒF>!>jfcAGfYR_p?nA664>TY|z?0リS>Z8"?j|>AApίͿvs;A.J>cJ/_?o>ݽg_!&gc)CѾ@r[AIۿ 1{W޾+uɿr~ gu,~A6փ09S9=#&xb5 :!MVX]%>A2ozq.:@쿯e]K>H >h`>d=A^CqB_dVd۾~>o,>}1о9t?A^ǰ'PJEl9G6P- y=r;> Wpocketsphinx-5prealpha/test/data/wsj/s1.mllr0000664000175000017500000002212012504317077016310 000000000000001 4 12 0.940390 0.007725 0.021729 0.113252 0.006644 -0.006571 -0.083503 -0.015465 0.263964 0.012408 0.004966 -0.196122 0.031366 1.001066 -0.021455 0.005193 -0.012178 0.029737 -0.108461 0.094827 -0.101428 0.159052 0.108956 0.141865 0.005420 0.003167 1.023671 0.005030 0.042207 0.007976 0.029756 -0.059187 0.041448 -0.105523 -0.001956 -0.061292 0.019203 0.011480 0.016705 0.999544 -0.045127 0.060600 0.006433 0.116658 0.015809 0.041293 -0.003695 0.039516 0.000019 -0.001734 0.010966 0.003887 1.028791 -0.044572 -0.026165 0.027687 -0.065629 -0.078397 -0.071210 -0.043319 0.016770 0.026971 0.013780 0.000531 -0.016041 1.056132 -0.023315 0.014044 -0.113499 0.067735 -0.021796 0.016409 -0.012641 0.014621 -0.033366 -0.025232 0.013881 0.013236 1.038147 -0.053471 -0.005998 -0.099930 0.037376 -0.047280 0.018230 0.000533 -0.008817 -0.000064 0.072466 0.000374 -0.052802 0.971423 -0.094397 0.134858 -0.056951 0.117353 0.000864 0.011655 -0.012263 -0.000086 -0.056779 -0.021218 0.053300 0.044134 1.049278 -0.086728 0.079727 0.019165 0.009196 -0.009538 0.008170 0.014651 0.005991 0.000056 0.009552 -0.015178 0.035744 1.101195 -0.012110 -0.016937 0.014225 -0.000656 -0.008505 -0.019111 0.001682 0.047478 0.051453 0.058826 0.010395 0.014747 0.973372 -0.070182 -0.009949 -0.013874 0.015825 0.015306 -0.014386 -0.043741 -0.080558 0.006344 0.075583 -0.025568 -0.026412 0.959384 -0.223822 0.034186 -0.108106 0.037343 -0.019466 -0.033233 -0.028926 0.021741 0.027844 -0.016738 -0.013659 0.028252 0.931519 0.935903 0.989604 0.984650 0.990995 0.965613 0.963798 0.926834 0.987388 1.022624 0.961524 1.019698 24 1.100894 -0.146139 0.055304 0.058016 0.271488 -0.016345 -0.404846 0.082270 0.212430 0.258058 -0.207412 -0.163666 -0.066808 0.100400 -0.003966 -0.029981 -0.173611 0.044973 0.278533 -0.063175 -0.203175 -0.220448 0.214454 0.272712 0.020761 0.942077 -0.057709 0.134259 0.044145 -0.123779 -0.045097 0.015401 0.279010 -0.237251 0.515570 -0.934210 -0.010693 0.037944 0.016048 -0.108499 -0.040254 0.098391 0.033867 0.085721 -0.213024 0.211534 -0.479493 0.742719 0.041927 -0.050101 1.160856 -0.110844 -0.017442 0.126683 -0.015886 -0.012575 -0.030146 -0.138060 0.065060 0.342332 -0.019208 0.014619 -0.091320 0.051670 0.062580 -0.094495 0.015886 -0.067673 0.030332 0.143677 0.035285 -0.247553 0.021260 -0.050271 0.040376 1.051341 -0.062761 -0.010284 -0.060968 0.127416 -0.026445 0.151531 -0.395135 0.274958 -0.012152 0.040516 -0.030925 -0.046037 0.010813 0.028426 0.020515 -0.000413 -0.026432 -0.120519 0.196150 -0.099363 0.005372 0.032703 -0.000200 0.007216 1.005519 -0.048978 0.094048 -0.053813 0.072819 0.036499 -0.125006 -0.001459 0.002776 -0.027146 0.017293 0.015825 0.049938 0.023881 -0.052574 0.045495 -0.056812 -0.094360 0.078636 -0.125629 0.014435 -0.020988 0.001696 -0.085466 0.101829 1.079285 -0.041164 -0.073335 -0.142705 0.329345 0.015639 -0.160237 -0.004592 0.028591 0.029875 0.048120 -0.057178 -0.063421 0.023356 0.021559 0.040294 -0.262360 0.002492 0.176855 -0.008932 0.007061 -0.039349 -0.018523 0.106059 0.000261 1.009382 -0.193090 0.139300 -0.197911 0.343685 -0.256394 -0.019175 -0.013738 -0.006362 -0.000413 -0.082839 0.001195 -0.017625 0.134637 -0.147603 0.096289 -0.267913 0.111699 0.006065 -0.001977 0.008694 -0.045513 0.142608 -0.114355 -0.044953 1.008752 -0.018168 -0.049400 0.176179 -0.186869 -0.001543 0.012968 0.001437 0.020608 -0.079745 0.066363 0.036967 -0.049926 0.004435 0.069060 -0.184114 0.134719 -0.025171 0.080314 -0.096945 0.086767 -0.192089 0.090919 -0.018980 -0.093057 1.218095 -0.265129 -0.000178 0.133154 0.009271 -0.050833 0.061466 -0.070571 0.094326 -0.059273 0.032013 0.106565 -0.171972 0.117797 0.016919 -0.002885 0.015078 -0.032096 -0.005840 0.063960 -0.094261 0.018653 0.005121 -0.100139 -0.033243 1.095647 0.101912 -0.082092 -0.000104 0.022233 0.005398 -0.034255 0.050863 0.006375 0.002150 0.053915 0.035898 -0.007288 -0.058586 0.078791 0.005556 0.083574 -0.055695 -0.015243 -0.086931 0.050345 -0.108146 0.189578 0.113045 -0.062915 1.292069 -0.307834 0.003413 -0.055038 0.031876 -0.011467 0.071204 0.014649 0.098938 -0.104203 -0.060754 0.073702 -0.181176 0.164327 0.018036 -0.017305 0.016026 -0.045192 0.109094 -0.078767 0.089020 -0.096187 -0.008265 -0.078295 0.024573 1.128272 -0.021745 0.009155 -0.013349 0.054725 -0.086913 0.019249 -0.120913 0.108070 0.077625 0.032478 -0.076469 -0.195441 0.049933 0.073794 -0.012110 0.150323 -0.150404 0.148417 -0.063669 0.196899 -0.415687 0.479061 -0.733790 1.128010 0.909437 -0.054809 0.056537 -0.120349 0.152747 -0.095032 0.031564 -0.128549 0.360514 -0.354022 0.566347 -0.816114 0.035200 -0.112346 0.024748 0.058778 0.261758 -0.309005 -0.100751 -0.263668 0.776667 -0.369047 0.818343 -1.408991 -0.042116 1.085457 -0.058219 -0.061611 -0.233831 0.212258 -0.018023 0.374140 -0.554844 0.339015 -0.800129 1.006197 -0.009873 0.087537 -0.059478 -0.152122 -0.029703 0.337122 -0.255920 0.155540 -0.080489 -0.253247 0.195224 0.093676 0.009407 -0.108231 1.042437 0.078970 0.095854 -0.289436 0.160239 -0.189184 0.032463 0.262892 -0.062456 -0.041819 -0.018143 -0.058287 0.130700 -0.091463 -0.037947 -0.103804 0.272745 -0.092847 -0.054548 -0.059322 -0.009190 0.284372 0.010439 0.037092 -0.092353 1.076719 -0.068514 0.156744 -0.291249 0.253019 0.027419 0.026143 -0.170965 -0.135148 -0.019586 0.101846 -0.080405 -0.015411 -0.077162 0.047239 0.201837 -0.175841 -0.048099 0.163217 -0.305378 0.410796 0.012263 -0.085564 0.079104 0.040391 1.103532 -0.089292 -0.190320 0.141185 0.095009 -0.102016 0.148095 -0.566837 0.040291 -0.134198 0.028328 0.082989 0.180755 -0.189047 0.020975 -0.172874 0.092237 0.155866 0.187383 -0.440846 -0.011730 0.099894 0.003057 -0.086801 -0.094005 1.142260 -0.055290 0.103735 -0.208966 -0.090104 -0.078094 0.458595 0.002493 0.059070 -0.083027 -0.023961 -0.001775 0.070126 -0.078203 0.052354 -0.010560 -0.189318 0.189533 0.145188 -0.035328 -0.052913 -0.003862 -0.006635 -0.016117 -0.040709 1.046019 -0.077457 -0.063079 0.055047 -0.083486 -0.189560 -0.006011 -0.048769 0.120436 -0.116650 0.176727 -0.097130 0.060352 -0.063648 0.074377 -0.160914 0.210180 -0.210131 0.007631 0.049612 -0.033932 0.052496 -0.083046 0.038406 0.000426 0.956754 -0.110704 0.115213 -0.206888 0.252363 -0.033754 0.040685 -0.017813 0.096439 -0.072110 -0.050630 -0.006506 -0.096369 0.324709 -0.283876 -0.042035 -0.099682 0.024281 -0.012395 -0.008143 -0.081256 -0.012998 0.056420 0.032172 0.129200 0.793505 0.085412 0.066709 0.200389 0.028890 -0.050499 -0.044230 0.090533 0.027115 0.040921 -0.066537 -0.048048 0.058925 0.048070 0.081107 -0.335833 -0.009718 0.018833 0.029208 -0.049450 -0.025784 -0.030494 0.043461 -0.001552 -0.012657 1.095053 -0.035023 0.244816 -0.023223 0.083456 -0.042536 0.075631 -0.116279 0.105812 -0.172851 0.155838 0.153633 -0.079214 0.172714 -0.481852 0.025944 -0.051797 0.006092 -0.093469 0.072918 -0.019821 0.167959 -0.062913 -0.091005 0.077888 0.907784 0.296696 0.004274 -0.003844 0.018244 -0.057918 -0.022525 -0.090594 0.225875 0.000458 -0.156820 -0.057144 -0.041449 0.406843 -0.018730 -0.014897 0.007473 0.075968 0.018323 0.013890 -0.267574 0.084027 0.224904 0.034051 -0.068336 0.492451 0.006975 -0.003635 -0.005130 -0.003281 0.004032 -0.003319 -0.015212 -0.010757 0.000242 0.006560 -0.006457 -0.000332 0.002752 -0.011482 -0.005055 -0.005117 0.006740 -0.004083 -0.019354 -0.003310 0.001023 0.003381 -0.012498 -0.000250 1.014610 0.967570 0.995381 0.982298 1.061855 0.988299 0.965800 0.987844 1.045274 1.079595 1.089225 0.998581 0.946458 0.958787 1.013429 0.962358 1.016202 0.985315 0.988992 0.941677 1.095507 1.100293 1.018671 1.016287 3 1.064573 0.003185 0.017742 -0.010610 1.035844 0.001944 0.030792 0.004377 1.051379 -0.040866 0.140259 -0.048138 1.085700 0.909788 0.888509 12 1.019011 -0.007147 0.028215 -0.013646 0.014643 0.014852 -0.024798 0.024513 0.000082 0.001508 -0.031024 0.095944 -0.003346 1.012540 -0.016544 -0.003841 -0.024089 0.011689 -0.008780 0.050608 -0.026651 0.001694 0.031389 -0.032423 0.004329 -0.009106 1.041523 -0.039910 -0.011061 -0.008491 -0.020671 0.015683 -0.025417 0.009509 0.006566 0.022113 0.006987 -0.000360 -0.015824 1.027961 -0.002880 -0.012128 -0.008984 0.018194 -0.012736 0.020514 -0.022163 0.004766 0.014850 -0.024163 0.027793 0.014053 1.081893 -0.046113 -0.002313 -0.034154 0.001594 -0.068600 0.051250 -0.067070 0.012551 0.019010 -0.020435 -0.013153 -0.002295 1.058410 -0.045883 0.036449 -0.100393 0.146327 -0.121299 0.087610 -0.015239 -0.000431 -0.009909 -0.014613 0.028350 0.007600 1.061224 -0.039016 0.028450 -0.121428 -0.005666 -0.038329 0.015651 -0.005009 0.007373 -0.023457 0.036747 -0.003830 -0.027651 1.052427 -0.077234 0.098565 -0.056416 -0.006882 -0.006350 0.006716 -0.009650 0.008657 -0.077598 0.015932 -0.005902 -0.018013 1.128683 -0.120728 0.122282 -0.048501 -0.000171 0.006467 -0.000546 0.013902 -0.065300 0.009092 -0.051705 0.010712 -0.007143 1.132145 -0.038142 0.056580 0.011951 0.003580 -0.000658 -0.034418 -0.007844 0.034708 -0.002305 0.009058 -0.032716 0.011881 1.120229 0.048953 0.004272 0.006743 0.003325 0.006027 0.007456 -0.014992 -0.043475 -0.038588 0.047881 -0.034338 0.049074 1.062739 -0.008360 0.003070 0.005916 -0.011755 0.005185 0.012353 -0.006096 -0.005277 -0.001653 -0.007599 -0.006388 0.014825 0.932566 0.919101 0.918706 0.934464 1.019066 0.964584 0.939827 0.980068 1.009679 1.052255 1.083231 0.987528 pocketsphinx-5prealpha/test/data/wsj/442c0201.mfc0000664000175000017500000007146012504317077016556 00000000000000ANhy 9 u?c?r>"?爐 0=A?4p[;nm?u|d?M>˾=?M?ҽ,A8t>XN.D,)?1}>l0>3=h$AϞ!yXU:?zܿP>W9"!$Auhg[>2'q>CArHk盾xM ǼO$">?ʿ(<[?hUR=VUA;Abs{R+)Q?hܿy>R>zȿn>d`A--_uؾǾB##*@ٿO%dAU>lAeߥșB!? P+?>.=Vܿ?b7H=4? ?DAY04E4>D5?ҿi:?O޾"v潆K?-iA{na[I=]=q>JE<>;?A4P^ǿŒN >[~(=A?4#A췿Z?ij?(=c>sܿ={|?/̯MA ]51:+Dav?b*4>㿏iAI;&˿wq_\>Fؿ>$%2UA.nH%?Cֿz? ֿO],#Abg rj>@>.=5A.Nced;??2(p ۿ;ν>+5A_WnAp>c?X4Ʈ?+>{6q>ca AH=b?TҲ?D2RX?H =eALm'%7*"P8<ޯ?¿I_>r>?KFA9/q0@"*?g>ѩ?L+#= M<`RAƲX˿d޿=dM?>~ E?dN<ۿ} ?ٽAeR/>x7~>; I?gSGlZtֽǥ Aэ઄ (boINt7?afg?Aefe$-M,W-h>́۵Pоᖿ/AЧTkO#=MJ?Zk5wy?%BsF>>EAAK>Qs~B?* >l<ӾJI=D&f1AzϟV=a?r&!*ĵ?;Gb5> 澅^~A5N/>-F%?{^Ŀ?l>$ݨ>-|dA 8ȿ2'^<+>ՙ?ҿC?H?eJ>\6!=A@пi𭿨GuF?E>]\??w,AO< >![`?Yf㿗Ϳ<.`?sU>n8!? >ACidͿª?R<0s?qr>rӐA1Sϙ4 >TC\vv?wƿ=u>˷-Ap a@r>^v~r]'?½ھ l;J??\A= r+V?!b:v$ >@ njA1Y0,yG>U?i47v?K?~C=>nA|g8P ?j;!'3?l>Ĉ>\׏>AC'_i? ۳bk߿!?r[p>5x0>$l=;;A%<{V KYr?9>?F?1UQ=vAm[{)&ɠ?j3cFu\?׿f2?cAgMSB@(?Y?:ú̾IYA,Lf r z?='? 1?-*V:H@'V?oH?xMS\>HAvt`m'?H?} >@' ?J =A!3?^A1?|@$Ae>Lu?S>?8 ڿ C׾uB>EAw=?[?ΆA=[M c򿄅?lm*ѽ8gsW>0? `ɠA1R%l>2 ʾĉ>ݱrE>?ĸ?]¾BAr1ICRʿR=}@F=wH>anAlD?tHRq0:d#>#f<(چ?@>UA.?T /͆0S?3+>?T/ԿJ>nMnA0F`_SAȿG+?!&d>D`= H/A)q9o$t>ۿ?''{~Γ?HYAu0?WPt?"WMTк_.s2d=%Q^ A.dq@c̾\?Ul(&Y ?JL˅tYAfO@@޵>،?6"[M,_;WܛtB<쾥? g0Cſ2Kq=JDΤ=mȁBf6뿓=*Hjο躿4mv&>@Gj?oJ(}Btd2B-frݿ28oE0>tEd?ByQ~./9&>S>7 ժ /B~>}Y4!?IT>d/??u3]IuٿB/꿿;xÐ7>Qҿ3??P=2E7BO4IfOTޭ1-G&F?g+ ?A'o >d˿-\B}"B0A+} ,>^H>$?jHégBzt: .ɣ4L> ȏ>4?6> `Bq ݵXf[⿿?N J>ˤ>B[> D{o,X4L?yc`NE{U?'_B?Ň@ $= vkY{mW|X/ ҭ?'4B@d'@@+zʼn4=^I\6x=A⦹@4Q@y?SMX.}M+,ٿ2 `b-A]?Mm@]>G54r6 얿Y_)zڲۿп#4B [.ޯ;j u~ Hj&9|OoB#<9>![=aX" B .?˿eAijW?3>ا\4L>ֿ?qz?B8 ?Z A?Uظ?r"R2?V`>קB z?ؼ6Ⱦ~?*6a?ǾTpz^?w(;9? @)ܽA[ +@"KVMQD_?#޿>>mx?$>qA~va@}{$?R{~/?>?J?up>w¯?a|A>ioUj?2=0L?¬)>i>7>F~ (Ai>4?r=?*?t@q?2MPOlB5>޿U7Ed?qF> >L?Hux=rB)q@9ҖP?U >nxE6eq4z?H>W>rB2-~?u6?t>]?}%?1Rx4? Gl>lEB?ѷJeؿ-_U ?72 ?YC\BJ>,ag:M \510Xǁ=]BO@rM#d%wѿOlcpT; 4BUb@ 1R~fulٿUwg9㿐z,-B_?S@8њVQc6ɾ*SHۿxl8{?>AUȐrBb-W@u)v?%2=> >sjڏ:fo1Bhz>QrAE #OL7>p_A6\rhvBkY9Oxm9-Iÿ ?X@!_ʰBk?i-X&Q/f?SVla ƐDBi:?8m Pֿ(8?oL^M@yW)Bf??ȗ~⼿?*炿nxufOqBO3@"JtWJʁzοo?B*m>~x_ۚB}@7L =T+>0?&?-R= >\B4h@_>`? W- M78?RV._ ?9';FB<@`tuz׻;^ebUf7(=~4?$ ]ZB="@h˽%'ϽBp6>NB?@-yV ;gBٿ#o BAY6@Q¿G [?޿ZwoE{BG@nkUa=d~#m7%>z=+>/uBF@e{>a'X+p>O]~B=տ>M*w> 7ֿ_<Bh6vp.j꧿#ss> HΣ?i[xk>@BcuE:4=e]Az߾_pۿ8k=ٹ"F=j~B^~;w?kgO?M06QRr>Ż⾵tNJ?1GIBZ.@5j}?x3[iVY?"h|?D1BUԿ`?plw?k=ch_<){޿0w ~?z0BTQ?M+?f:G?jw=j$+?迤.>8r?(BRN!BA?'wg5~^,4k*=oC6aAB4[@x9Br&^?X̿\B-@Q H>J맿Ade,?[`4¿B(}~@ӳ%/>tҤxyEd>ꅕ\H}u\&B@==M7 gIn/$1>?#kvtBgD@5A?v?=uſͿ^ȿٓ|?%qX?:໿IfB0;\鸾Dr?NQ^"Q?ڿ ȑB OiS ?xɿJfD?S9?6AoD?YcT+?%?UBO?.?Kc ?2F}?7A<r?վ?d?jD?Eb=>h?q>݄>Ճ\>~M?>B#"??-.1ο^}q(=D?NkE?;9@=4B -&>?SaO?`?>ɠR?%?vbS>fmBa=I?r>Y>>1?!? >3jЙ ω>BS>?9>=/jM? M?[l׌ >>s=LvBO@=ۋ @EֿEiXO2.BblBi@@&('s R? !`Tg >4? Br?珅}yGHk?}h!ȾBF㪿?6uF$Bte!Eƿ'̾/j;Vݡk?ǹۿ3Bz:T{d>v,NBT@^%I BI&Q<ƿnE?15?4¿/׸ g>iȿPL?$2#B0b>4z?i?$uLrٿ͋% 6vմ?;?B|(7$ScZ!_)?Ov?[奿N90bR1>BwcEmn4$>&?QAn B{ >(%>Y:Bkw g|Q ⽿<c9Jؿ2 =BRvU@ CLkwB34w@> /(TT&>*;o쿌U"FZ"B#y?(> ln>ކ27׬oD@}F$jyB7f[9@7ӎXuUϿ}בllyi񖿏nuB[?y?G?h>K<Hب->>K|Bw@ [??6?^>oۿjo4'X= OB'2?ļ?D?b?,g=s=A>cBB9>-D?|(W}=>S #W>bBO?W- +#&0xҿ>=cvBQv?YMe'Ͽ{ {:ʞUCĔP=BM @1u\?a ;!BͿ! :|>&BL@It:_zjFoؿ#MJ&BZ~>|\%d_oVƽyʂD# YN.;z*˾BW>7NPtBſ%7G@6VTM*B?&@(\(֝P,ª0:m־26pñCB)*@W'nm>>%#`:ۅ29F(,唿rh#B&@/ Ts>8/u˯}8Iz84):_eCwB(L%@Y2P{+:qGi_`:BK(5V>t9懾Z~v~o?XFj•>Y=B_ܿsz BJؾw>T\k¿&|'6Bg7:WͿGy?L-GN>͍rBfaCXLTږÿb?ԍvE>i-0ؿ+YvAĂ-Bc=O h#|tad? 64?1[B]fWۿؿ(=2e-?Z2c>L#@L"k#sBC_BQ Dl?m6=ŗᅿin^=Gɾd[2CpB/b,?/3; @HGm>Ğ(3^>P>9 (Bq@D@@"B汾%Ty ?x.Ck(=<(AA@<@@yuF(uȿF<Ik==eO` ;?w9Aq@!W@6?2.(>!?d(㋿m?QAG\w@nʾ6ӿ+R >.I>^i?B-?A?+?A?.?]9˽]BG?}GMvh?ME>>D¾K?U?pNJ־(B;xR@>Z h(>J?!]ɽҚb?B/( a@i? BA?\?:>C>``U|=iB(‚8S ?d?1T?1?덾q>/qmBx+0?%>錄CU=@`>K6:B]dZuI>澿b>?-!G<~_?1BmBZ7طi9?nLhEg+?~KA U+B hR@ɿ8ؠ&? AI[]@i˹C@T`?BE@R{v OͣGU,7ɮ`d?bF_BV@lluR+ͽ-ÿʬc ܖ;%Bb{@#n=}V% `.9?p3 ԍ0(*j;}\Bd?$apFB]yb}l8?K=*;l->羭nê?6B49@%%IsaտH-M@YObh2B(@Q^?;]bpʿ mHЫm@>ɾ<4ZB''@ 'f/йgDJ>-}CBB-¾BQ@|r!\d,%޾ٞ.[˿>rBRP5,C@O%篮?B ~_>~oeMRBN>Ux@ \/g?G}L>Z CO-=TBF^@([R?= |mZdNnԿ T~YNB?Ge>;@4#O+?-ig>G]QIjVY |ScB5;> @Tӿ4ٲ>UөI]dĄϿ0B'C_>L@cR>.w%+x>MkĥDɀп.53Bp"o@y@.3l7P,͕վZf<Z q4'As@+K@7wV>a~&\ο"޿9nA|a?0̾-I?>=JXK=̞L>RIAJ?v+į4g*b?Utr ? .???7YA¶?quZ7w2?sǿW=q?$>A?ػ =IA!S?88?lQ?뀈/=L=Ha!>BoL? n?U`o ͋{U;jÿ6z?B9] (?):k?`ھJ쾖пM:<6>K>y>$= EAMj?F;+N/>P΀׾0߾ Ѿ?> B#m@C QýfV/㿏=(B[@>` .S>y?m"Z޿q9I>$꡿vvBgIP?ΐNC?0a"%4?8'?=rBl?DZ- e?\&п`Gb\?BnWm? X”?M|CþV[r]?vvxBmi=z>̃?xgz+ܿ{x7?"H񓾉 Bo޶>}6e-@?lrHO=>%oѿ:@Ys>#Bmn Z_?@ ) ϧ?͌꿭vy Bm0@\;D?%ھc --zG?⿯%="BoB䲳S?c>))eW?# p ?IBrÿǡܿ5Zn=d?O? S8-s$4AH;I?WBsFrե??{ / 'Ͼ?YBr ?\!n?q?.۩ ĿS <?'BodT5$$0?{T?؍(=+ ¿i>fS'?jBkbjDL10r?er?<\=wl>]yBga}|옿]:yѡN?>3wd~EDJ}Bah_Q濟Q(7>>kɽN߿E7BT΄?JŚ#?c,c >Emzܠ>B=@sY$#{>ض>ʹjScRR˞R?m"B!?L?>$X:=P>|.X>%PCo>ǧB g@]>Ok%򚾑xS4 ^$3<^~SBW)?'?f>)?? ?Ծ$.`#*Q_NA%oH>9?Y]?6jwCH?o?K<H=wu?nuu>a>G Arݥ?E>?t=zz%?8<>qz?Z?#1i$>AQM&?3ؾ@#?,B)>8;?j$?ݾr1q?o A%D_@/=4@ۿPC??K$:hNd?ӎAa7aL@:(>B>LݶjQ?}ڽxo??Z_?z?0 Aْ&@ "Y>ʷt?/e?O>?jh??=?;v7BA1?8%?hǿi$#H4!x>??q8>Z`??΃B/Dۅ+@ ???[?Lрq9 u=VB,D*C>?i?{?+(vN0W*h%LaB s 1₿x?4??@t>1m DD>rq%SlB ~|Bom?a>@!z(=|r?Z4>=±BA@8P?4'U"O 6Yw)iA9BHXp@މ@n\;5AT9m BV@ãܾiKl̿uۿJ>}B_@Trl`.d ?\J"ej2ú=aB_?|DNB\vRq!?X l>Qq>B\=XF{.z[ʛ=>½ m=HhO?v.BWaPrD_o>SH~ou>\?>BQc+ ?H[Xp.ڽTNԢGZя3prv>mGB(]Z@ʳ>|dB?? $,'>F?@B @ ?4Y#3eܿ޿ b=^=N?$A@c@3Pqzu#9V>x$kοRgD?A ^@S){@Ot?"$0.߷ѿ=?+BU?dj?l9B2HҿIZ=kU>>̪2>=ܼIBt >TibAvE?5?ޚ?0/ A^=9?5?r? q>&?L?q"܌>tǾY0:֧A@7L?Wp?X|s?DFQA?pH?p+A,o@0ǿi>K>ӔO"A?nh?uѮ?F)3#=A*H>Ѿ7y?]tHX>D֐?wE?%><^~KnAg3=b&?+?#>,=?XK?n>BlBF?y'?_>B? MA|4>@ (?Y?־Aot? >5`?m?IQzB$ݾY!k?N? ?b?u>lK>>?<;6T?ZB% ?Y=D?@=;# Psp=&Y=% \B`@U3>v=۾ɿ?i"/r# Bg? /-?[+Kh$6kd0!b?xt\DФBl> Vοҋ?dWe ^k?Mj]Bo"Pܶ Gݿ?A+ Y@qy4>#IBoгb:塲?M轲غ= y@ @?>DBp1aҿ>&{lUi:@@`Ht=yBrD=]2ⅿ̍`?U/>{LVdӠ@]4>dBswdxɿU#?Y>E,ZWdݯ/?I66? 1Bs͙H.JR?J>jbG?I.?FBuu]^?B?9Ja. 8?B-[?Bs[ԿiX?ĩT?+xJ+\=iᅴi?Bk7>  ??W։,l*^Ϳ[?B^gZ?]58]n>-?yehr^?hBG(2@GDۼI>]7?={S5)@.?0B3 @Vc=?XAn=P?+7T }iIQ;?B(hb@.>JW>q{+S9[^ l~&ӿჾWG?TaB$x@@ z}ię½qgپQkTuf&>yBA?KF?u/?($U e>k1ѿ9pcBW@Z3??SHME_uE׾Ofw)\f 6VB6@?C>T iQh9y;< l!>}-=E GBLj@c?hMeQ1F?"A-B%L@ZP8bݾ2@ Ll>>5̿~B/o@3 Ϳ̇ Esk'ӤϾ)>mȬcB8s@E= xIe3@X>N'CeԼ?'>{[/vB@:@~ 3K8q=% h?Ҿ콿>*BE@L+5$>W"=>-\?)ÿ19Ue>ϋ,BI^^@5x_0r"e>GH?'؝M?,M>.BL'@(RQb[);Re?!m?xX^NYoBO۪@5F^[p%A$Ȏo?^?SڿABP@^FևW^񽭶?ޚڿ0?tf+H$BP?&'濁. ;JtBL@}SBP E r.4? F?7I;GxRdBK@u~aEAT?gص?ڔ(S=BI@XeМHTS'?CӖ?>Vj,i2p]$BJ]@ ǾXJsH>X?Npx@(œt$7BI??ڿxSo=:vA9>y?dAϾ tQBG0\?_@$ו?ܸlz?rV3>ކ?5`ՎBA?'G@0?}(fXa?iB>xM쿌տ%(B;-?@2Wh?~m}.= 5?N$r  d5tB98?t]@|~d?g e?'8?3('cžmbB:F?^@zL?^7?T>0JB;8?Lj@SE?qR?$6{?U:SGȾQ$ B>m?@%Ɍ$?ڔ4??^8bNݾ ~BQ%B A?zg==v|j)T+5ޫ>%^?Q~>B1 A4?h ڿ6pyxU>ch?ܽ+AnA@fݿ?Ϳh ʾWJK>V?ׂ>$A8@@\z6h7O#6kPB?D?[>A@+@{势t3|_t={]>?YB,#Y>Z>P?l0?ZI!呾4V@k>۞>Ϳ}B52%?*< ><{3>C'?-.P 8{ۿBW!??N'O^?>FW 1m#ai>Bef=qLD?w?)=v4>F-v?t(Binx-,4s?jA>* _ri_6J ?JBj_I>\8Jˌ@?@=}&]=)#AO@q?` K1>Bj> S?zT=W"W?7=&Bk?N.6ӿX?d9=QڿTګ?xQ>Bjvp?R #Nݳ-I?Wv1ᾼI_ɝ?&)>$dBf?_: U潊W?\k˾=p?dx'>O2Bc??e j>Pf?Bؤ_\D>h[?FS(>Bb)F?7 '>6h?WLx=*t$r?PP?*B`S?%x1>=?|ͿM<=@?!0 ?$қ?똿?B[i@ &UR= ?Ji ?H쉿'H*?H 侳?NBVGz@M8vuoE?9]M>?8.O"'>&?VBP:@`AH?!:?{a 0"⨀?]BM;u@PO[Tt ?O,e?ξQ˾Ď"?BNp@sGU?Nǜ?9!ڿe{ ?d-BQ@? :~>K?[m*4þH4龲B?BW3.@.pa56>U_&@ 3jRb>K ">6GBX?A@HD1@ (;⿔*>JZK=BXM>?0A]s T?5__>Zgd='BVP?צ! `Je>A?N2Zukm > zBP:)?~ ο(O`j>?s*04C Ѹ>/BM1?0Tt4o%O?X!?4r J 6zm>ԠBKI?s=DB_?Wh>5$LwͿ$=BId?\eⲿEd?[S>W \>K->V)BHk?` TuZk>>x?K6,;?>+:BCI@>t8[@_=?!<]?Ӵy LXeBKNJ Al>t?Ywt͢?h.~[wmB+Je@^"j >u>a.?;W>e =ykBK@ sgȿp!}w?Gq=5>NJBw.@?R?hB?n 1E&x>#0AЌ@>֝?tc?,?b@:@ZZFG>@?6\A @gSȚ'd-^M?g>o? .+>M?ثB+/?ϿľqK,ߪ?☐?ɫ>=܉,?/JB ;s?SPBL~?PL?6(?K?M?B *(?- 8$C>iQ><7m?RJF0 B?%~?4>?~N> ->yj8?^ǓT2A·?i?ŭ J mҎ q =~俞 .&h׾۵cB "K@zNH<< !C?HP;n.>=&; B ؛A CNο1jh`5d[k?,*Wԡ$z;MzB |A "W/|gwf@S'?Xa0 ?>Ž3B)@+׿DR/"Z?ǰ?z?d ]+B*NA "f*.q*2Zlc)|z?<п+a(?忆B2@컊ZrR?셿s? Z!?LtĿ{B6@Bw?&զ)c=x>,m >36B:*M@x-?\:(v=U)u}?yyxJB5?(? G?1 > /3_翳rO?J ȿjKB/lrG@-lH{5u:?Oӿ%rBP@٘n? ؿ}97Aq?Zq>yڢ QAXZ@ =>79h>_>(>^ER%) #?Ī6AA ,@V3a6?a?/?0>}?E?¼>?G?(Ad1@r8?6en/>wD^J>ek쾍g3?DA|@,z@2 3opk?/K_">% 2>?A@K3>+>Pe>0ul8x =qA /oU?b=+;r:?g?;+ѾZ>̷A@\ޙ`Cr>jپ ?`R??!A.8@?ꙿNZ۟Frҭ>!Z>mkҰ?'k0?Bi?BN>2T!$?j=u06]@)>@> B?m =D4Db?uJ+q>迱у>B@?n>97ݿm7Mj> ޤؾxJ:ھoB756@Կ튿.j\.>=h>2n>B)8;@0?Skcy>c? >};ƜB@M? b?++y!-q?!ؿZ>ݏP.þoAkT@jx@h?:f&Njp󵀿x.P?JE=,A@3@?VmUe0q[V]ݿha?*XY^ =At @(@?G|ikΚdqs8m>V6PS>&.?QjY9ǿm?>̖A@s?k?*fο۾!d鿊?Ŀro?2O=AAK@O?->IO>l3?uH>ڟgIBl4A?}?c~3>įvԿb?JL>ۛBuAM.b?19rW1i=wƿrzX?WٽU)]Bc@TV?m(yQĢN̿@[1q?%jI8TB!@JSQ?8A i[ݿR]?I̽0 PB?5@f$0(tBE T?%wӽYϬ?嗾Am=%?.]#??>qBE*? U|_?| *W'1`2? K? p?ANNBE?*"36?aq(?Hq? Hto>wX>8BK~Nq3?'> ~׿O z>FLW oo>BR!F?-(?H~*?2e(z?_:B<@ 傿~f>^-bB>|?z?oXZ:?'B.K?P)>DfҡMFhDOп>$e0>B?̸?h?)x":M5Y:Qq ?ƿ~?HB+@.҈?.(z؉T>mG?d]u?4]B92 ?ۏ>k~h/?4^=PN? ί>:BVe8MdZ󂿲p9R> rd?mz#>OB@?,k}>C> PE?Gy #L+\=LZBI3?jDb.Pmm0n>{{?g 8^rBSI2N:>gK>榗w?P t>6BQ쾠oAOI=h>+>%)4*?sS%>VpBK:>˿2έP޽$8 yo ,?UqQYBA?fFѤlh>ir¿Ȕ?\1X=*{B0s=^>f@ *6:+w>SB !y@' ?!V?+&ۿo#\?@J#Xdv?3XAN@J@J?>wAP!#H<>!Az/@@?v%Q\-|9> Hڗ=?dFA>>5?~߿-ߟ˿9KV^鿠 F¾s C> mA,?#%Ie?ۿM^D\ecuV AG@3&@)v!/}-@>|>25g2>ӼAG@>?c άT49{]niWN>tA@xj?E>?;nKY+,@ZG:f#?\пcA @@=\Z?\RU|.%ֿ$1(q^[>8>9xAF`@@ ->mҿA8@1L?l?8 P+etړ޾BCōAf?2@U<91t:+~Tſ+AÍ1+\>yblv?PJ ?nKj":{A]yKӶŠ>q߿fÿW? ?.F?qebA8r"8#-+]Î>\*E?_=?$+IAAz2xrN?c5?dľڃҿ4'>D=H?LAx?2`?:6=ʛK?>¾goA@I?׿!`?|#;i%? ?m? SBξEAkQѿgL>4$x=Y?M>ʿYRQA3n6?<<?E?'>ABd??ک&(?$5oR~@m=wu=K=%YA43? xD11g?"><@t=kA=¾g?Z?V!.7x>)<>k? NAFfW ? ^׿?-ӒQ?y抿&Mz=Aйg>)ho?SKKIH@?I)>>UbACx?|B\?AF??v?i+EApT] 6@">ѿ'1N>~G>?A[у_|m@ A볊6> \9l"?&P Am_G5V/@ ? z?'R>)`"63 AGR>Q7r->@vҾ}R>?P?ye=ֶ ALF?0@~|NS@ʪm?>:?JA#4O?BHLw?6\ݿd@?D ??۾Z@Aql?A? 3<?%¾T'_Aw>?<'9JK?e6gC=?MO#Ǿ>.AdN!{?CG>N_(mn?iD꾰!C4j{4Ar+[TAzvSV{> dlB꿃)?ֳҿt9?L7"?H~Aj1wn% ?9?,>?>OE>%w Ac22>!U4?˜MJ4k>^>VE>_A\Voܽ,?{|ܿK)<C>@N'8AEHۿg((&,>ݿ/=L ?2z=84SΏ4AW#Pٿ="aC!V'[>j6?X 3t?OAPBDR>#@?fRC?,> D>7>:AWgTiT/>%rz6,>s3:=4&?l'w>>lFAL V5"ѿD7ԿНу?G>b>ᄍx=ɾAL{"-(=?/0>y<[1?]>; 2AJ2=--6jW֗5=ToM?Y>:+qݼ)ATO QĿq1^ N7 >}>= ?"•{ADTXDH̜`d+}P>-/>z9>v=*dABy!8K;`>#A=DHH^lG6P?->⇾HuA6QM> MKV3i=l>q? uTA/'҂m{?8^|-o ]0?V=?w!پb)A|I)j[ͧf? Iɿr-v==S=A„S'X =>BL>)?ħ?zMž))(3A!KqHw[>'~t=6ٽ.+Aπxe/*vͿǿz?m,?,?.g1>A)&C2O?Eo<E>MS?u? 9A>zy>y>A'B>R '.в>^ffi?IN>HԿ2E8WͫA-r˛>Dc>UdWL)?{r<绿?>A0gNž,zSCqy>d>9> Ei?>oWDA"zAf >P ھĮ,??'^>^"=t?!1A9i>ܿˍϽʃȅ?3Y}Am>: A)r֣? $%7R޿854IvM?K0+>oY+ A,$?C 7=ھ:4>z>>q?]qA*tv?aR'XG dOP>i.0cW&>7%A0>[[8::iL:QTkTd@I$>5u׿KAdOyR1?^+^!>l?+1/_>"A$+\9:}iA>S?H,=dU=;?DA(dZrÿӥ9wθm2w?2[?Pe?A;Y*>Z[A 9b7N'+|Ih? {?aywԂ>jA v=˵I>ƨ>5>8>G0A3V?"g&Q:Ѿd Q_>I&&>",A9+o޽oxrg]m]?`?=!?I=76OA.}=b7' E?^<\>?%=B^A* 9bY‹+{#1?콸 k>peE?:d#XAщGs ?*mͽNW";6C?Ihf/_c h?5)A*y?gGҿ_俢?T?06>b'"AYfbTr?<>R(=-c( KW?,8A!*I<p( ն6bMNӿ~!=9!mؾ:<,=Y\?VoAGxK`q>[Y)l<~#P>`dP>c,l<0Tɿ=ؖ]U?o?bQ.jE]A,ˌf>ɿ0k?uD=#??lڿD<'rA? Կ$j!yO0aV#>qJ;xUA/-^@>iyGNlƾ#? >ko=">Iۣ>rA>+Ci3>??(C=q=j>y?N`A8iyH=4?fK,¿c &u>Ŵ>^??,[={A$wD=܂:1R9a+2@,z<#>7ҿA,qj:"8MT!??2\UcA4HBio  ump,??Yv'Q>>!ۄA6VxſzaĿX.f?'Y>:\8G=A#GR-2\*>=>,=e?:>/澅޿ B;Ac|\澁οW?US??4"Ξ=oA&w>؄)ꄿ`bX=yl?=nfM>=A$ʹ=N=`DhkS?Jk?Fk;)q\UpAS|*/M2JyEC?2>ƿ2>AA[YHQӿν4q>уxX?h>hvA'E׿ /-Y^ҧ4?:2Y_?!>%NبA":}vX/Y{A?xQ d软j? =$=A"hQ014>FҔ=?>f?/tA6uJ6HKcէ?!\?U4?*D? Y?C9=A*cg쿫cŻ}0k>̬\"h>A)56{[@^r`ҿ 蕧Y1+GgD<#A@1nnr:dip?NO+V?4= N=>DzTA,"5Ns±%_G`<;{u>`AF(VY4>8V_{J\P?>nݿ^u.6A-z'+ ʩۼUɿs?16?Fo>49>0P=YA&KBϾnWV2T|z>̀>W>?A!}]#H>YᅨEǾ!Q>jy>;L'DXsA*U~"4{؋K*o?}?`=(G>]8%A&_{Y'⿋鞿MT>Ӷd&'lb;!A(y A{Z0Uq?eQ(>C&@=Sk>A5FCi=R&q ܿ+ɾϿo:=YZ,',۾_%A9g> 7i9~ZşV7;=>]"eA6v?BqW g<B? X߿^\?jb~AA> -n#,2<-u>KU+ts?!w?=U?nA03%Ag As wf?}F9?J2=V̾UU{A7{9' of/@/?.H>=<`A=H`Y'‹jxɘH?8vL?3q6>>Jk?>yA3].A3*߾ο ?^= ?xO?d231"AG9vF=- I*?Q#Z>4^?2ZýAAؿXڿq>2ݜ?;>> >ȉ?(,A8UnG*4 īy?vM?WԿ>">lI eA7C^ kq$8;Y?1[n?y>h[CA09q}:[晿U:>>yl>3iP=쁾w8AEb g|rh%/>yhj=Ͼ>>KA+s,Y ]? UyT??c!>̬4\?1|A%Z꿿>vg`Y,?.FR>,?7?mw<>;>^=÷4A%d^c^|ղݿpx4?6t?)} Wпsh?m$pA#T8j̭pN6,?=x =|W辟rLnIFA'Xx̿A2i2K35>>RfNA *^=Ȼʗ3KdI=ߋ>s>sξZUA)QE˿Ո._c4VV?/dC\bA&- L<$0@K>kse=mb,?WCwA9J;4n51 e2=U #>ҿdҷ=0AKI\kk>G:`py>O>w?>瀉AFUOֿa!ԾMTzz?m`Z?0ؾw?3ʿ; A<񿎲*yƿKDi?ܘdN6'r>*$A!iuվP*ұ n@j>ˈ$ن^[9eA.h>,AB!ǿx)ɽ%H.D7`4X*JA-nq{BoGDža{><>oKb}>2>ZiA =,bq+>{6}[U7?-=N?fP>G?!TA`/ɿE -$ȡ8 aR>b?L >>9gA/6濠5㌋В ׽ۑB>?|?%>"HABm`}p>kDqݽaᮾʽ1:A:BֿAx6B' d?y?+ʾ3-G>T?0> P>uAaDz?W-Rd.ӽʿG>ʄĿ$٣/<>pocketsphinx-5prealpha/test/data/test.lmctl0000664000175000017500000000011212546074702016304 00000000000000../data/tidigits/lm/tidigits.lm.bin tidigits ../data/turtle.lm.bin turtle pocketsphinx-5prealpha/test/data/goforward.mfc0000664000175000017500000003264412533621347016767 00000000000000h 8AJK߉7@ @`Q_F?%#A@H8i%lA xBsh@?@e>-9?241@{<™?AZAOmAsH?@W?|B>E)?im@CAGT8F{|=57w?v>ʠ?2@4A4qG]ž v.@d# m @=@%A#I)@UAZe@M@$zS2.Z@xAeM;h /ezc@@ @f@~ 1 ۖA#˥paL2k/8@8`eKS@^A)@0A 8^(Y)R3 2AlKYAZ@^H@/l'@bA:oF7#!>??/AN@]J`@x@@ AQj>4>00>K@oA5%@Z2?A:@ 7A!?\ ?@dTA?CAWt~@D@d;A A%EҔ_K_ѾFF'ަ/@e@A0ؼ`fEReMjw@x?NAH$"I8?]A'vZAxx>A^>ݢ^ASNA#ٶA+HF?&Ş?֦cv@&AZ@@ijAARASAY)*{ @NrAA=?Y$Nhb@v;p>_0BhD vApAaٔA[i4.@ A5BMK+1AXŴA<%A\nna@A8@$+NLAAܰ@lAy>RAOA~BAE(@X *??$ d?r!"o#Aȁ AtA5n>+GfR ?U?\=@PbA'΀5A@_ 2 ~b@W@ggI A"8I;?683h,^Z@P@:qVݿ4AOAs %YMA(A3@a@Eb@v:1@ @0A0%I!jAeA9@D8W &m@>cA;9ATu >kԿjJO=+AAIs@"z{j?AvA{i?{A?dKe@hO@u x@6>ɾۻ;5@@gAI{2@l= @$=V[Al8)úrc=p@^BA ?_6M^7OOAvؓbA֘Ao@(\z9ThJ; ?j@@ @Aʽ/@qږ`g.@@Z>A"@aA85A1۾Airzxퟃ@AA@:+>?A:AQsA l?Z3?ksfA"PA A\? /baeu@'CA:dat?A@>:AۘAFA@w JȽ?AAyDqw?K?M/LG@@]i=?s#S> pUѽA[q?LZ6^>'=Y\C{@A[A8 hQ?\b$A@RU>Yuun ArAAn6-F@AU@sGο/{?~AA$}?>\̋@C?}3 P?#7w{@`AyuVp;@n&ͻG Ap@;?V_ @/@D@b A_/$wAyQ+I?QwjU@@1LA%>hIWa@r>>÷XB.2*5@pxHAc0J?J#A>BڬiG3bfA4B@Ů(A׌nh(edB>Fk%q3@vAABjA= ? A1sBvA C@SA6A`Qݨ%ըM@I89bAHzBAg@ԿTz@|(.C„>$S793 BzBAF6@{@,2„j_wXV>AZی2J}BDABT@3v?? Asa1MZ_@Aށ^5~B졪Aa!`8@G:3@D@RiQGW FskAO$xBArd@t/@uۼݦd@tփ*%JFA _rBAt@K[@Z@H(?qg!ϋi\zA`=qBiA@➓@Y?U@b+c13„ACmBuAhA9Ȇ@2@Ңd@ẀG^@+ N@edBA`@uB@|yYƖ A&QA]Q\1 n@7XgB Aέ@NR@}}æJAm@xVvwՄksp)mbB7@Q@ @+^b{W@4D'YGRBk'?eq@ ~@z@?FAP@ '@neMByl>^+AՇ@"\Yqlz0nľup@9MBj^W~!Aun䃾34w?0&v_ƫGBE>~[BA_~b"?[-kORu^skAB1/eu tA%*׿G~|CAbFB}Pk /1_@p b P:t?ncZHBb$5'\@x!ľ[P2В-A8|O@GBfTIB3@]v@@m@Nk@jER?A\FBǙ6@|I1@ .η-;5kd@tZ A2UB ]&?wv@!=ە>'_^@s?@Ϙ :~bB$4P@R=}N@&@$^O,@w@dBJhzc9K{ktj$-FA ,A` _B{5_Y_#bR1$7N?@Yan@CÚKO5>AB 6@ Z@I@nJ>@ɑ@/AYA9k\h"VU6CBFArAe@dpnL@{A3'tArbA:j?BhBmB <"Aw&@X"¥S@bbA PcaCAst#A/ hrBB!B@@"D#@CAMS@ӿ W\AprBKB p@l@a8ޞ汳A =Q|Ar¹gA BB0%AȓABGUS@.z_#?>BnA?:_A?v6꿬\~A[°>@Dm+BıA>o@P<@`O?#? 0Bk?ՅA(zB'ڎ?u-BogAW@K*-1-@K@SAH/5cAϱF4B׉Af @eJ1@:>X2:ARGAU¦8EBWA6SQc @*?XeA7XPOP@xXҮ:bD?bGBAi٣Qş@&wAp&AʩmT?!JoPlAqLBLAw^Vv@BA(As=@No^.ANBAϚpx;AA AA¬i#@4|A:PBrOAB(]A A@ 2>0u7_oARB1A,)SA@D@?R5v#ASitEA%URBApAf@ꝿ“ˆu+Y@?i8APBA{S{E\BL:@6^4¾(ID7Az:?d)0ASNB)Ak/BBV>9,xZO<*@f;l=AVKBيA:=b'B?[Rf>At)H#[ A;EB[Amlw@5Bf@gnE_A+S@;BTA.* u@^MB8A($;?o@CjAgG:/BCۛA!z@B@5x Rr*@MPAHdA@)@@qAAIح?w?ZAsMd?"yA ?:AGC@AAx A/@1A4S|MA7L_@u?P\7AA@?a~,AXԿ:zAw{?@~ l$@&@K\@/AZ*A)ZB?=A?׿uW\L?t2AA*@q@?\&9A B͙z@4,Ak-A-qYA̿?@~@"Bzo@,AAK9>(W@B)Aak@;>L1AAg@bs,F](⿮,?YA/@ A|3@ h@ ێ@yKp2Ǟ{>hA`9?{A#@=AL@hl:@xBy jF?ftAs @;?h@>C0A?U~m]BM6 \AIA&#%4AEAd,@Qt>@k>YSB]&7A@Z[@G=Z AH;,AX@ lUB7CL1@͉ eZ@QL?@2ACοVDvBы@;-=2K@m]AN_@buB6AW!AzL4s>IJAA@mBAA"Z*)amp>@{@ A̝@BD$Am"A?rvGи/AAJ'"”?j/̉Bf7AQG)Ar(+#M@?A @XY gAn\NkB>dAe FBf@mz@p;@A@@U&CB=An AUAy@A9a&B3cAaA{'4BzAD,¦Ԭ@>AAV|;?хA F/BBApt?]-A\5$BAOܬ?魼W,BxAVAx@5BAS+*@UA#A+q/B=uAAT1BB2A) U@N]A6<:Ab ' /BzA`A.BwA4+w@UAle &(A:"b4B[A؆ANf$BoA2e@AػNEV2A\J@n6B|`AKA{BAAbAQAV Ax@l9BkALAB]AATA1eA4\gU5#A^P@ 29BSAA-B3A@ЬAAMcqA:@n4;&=B4KAlyAeBK[A}>'A"A'rRAO+@?JB_+A[@AviADl#A+ƎAq ;RA͉A6DȑCBj]0A7+AAـAd'^?Ak@Yb]x[<AHEA8 N>B4EAsABA.܆@ >w˭PHBA>FI>BQ,A;FAڣBAtIb|@H? 0ĮAzGJB}$A@QLAXAy>#Hc|R[Wܪ?J̰AY?O]BJЋ@@`BBZ{?+&Hο/@})YB@UʍzB0QA&+&ARVB;(#BYAV 'kƯq?ɦ"GDQR?3?6B)9+BA*<@2 O֯ͶA }_ھFAB|Qdӎж x~z}@ ITB=@"APη>UIބz9o?KB`@pQƆ@_A#l[% xE\t_? A1BAw"AivAki-N< U?8:1NrA{/BA1!A5E BS@Q %?D;A.Hop.Af .B[ABa?Bj_GsktxA㔞>@w-BÒAڍD˿BQR#´Q|A|M‰P!@(*B/0AП@$XBEš:7rAK&;)@+B1BAJd>NBWzbO¯>@.@j4D@0BA^@GB7?ʺ!9ϸ@@: A+.B^AUAAg)?uȮӼǤ  SgA'*B$gAUA A#GNnL@@K¯7eA4&B@Ax{kA BHS\P?N9-AO"B!8@umAW)BBbr߷AV%AwBh'@bN`AT!B4HaCڟ@M rrAB.IEY!BqBؔ?dA(c@D`T@!B@KN.BVA7fhy?%W ͨ?8JA};B[ _AspA`xA$0A\#@/,ݱϔ?f?EBBKšiA Ag>A'ȗ@6!#؛@DB{WA@ZVѩAA4&?nD &е@EBd§مAv~A`t:\dALʉA?*WvD?CBZ~° ^A1QAD6@KS8A}t@@ ƾl@GBFxxA~\Dп %3AF A,>@W SH`LBTN²ƣAy.[JqACoAW9Ą4?|NKBJwAmW^AO7*@v@`&(҉@NBI7A_0Z@zdAqe@qn2p=a*u@]A NB*QMAom}@`C@c5c@B 7A u@@ wPBQTLAy#Ag@-A 0@#@/A/1x ?$LBȀS6>AD x'@r@k>̇@a#K@OBmB=A1}@@ ^@-;AR)ac AVB>7¿c@/?uc?CRtgA7A[XdB:.@&魄AEw @8BAKn@<β[BR})!@\V$Asys>BH°IAw+AAOѼAqSAG)/F!¾-BblE@Tp<WAt돵@+οA7EM#Bñ3@m? j@PĿJdl@lj&eBU!?w!kYxv9ARZH[?A]OLƔBr.Gз<[-A3= ? 1?-OW@N}Q\IHB?߸?̔A-`@uAC/AL A^ޏ?Ǫ͋@[6@Bœ۫'AQ]@Br AinABKAAž A7)fg@AJA_[ 5V FA\`G@ ?l[*TS?Q7RAn*>4}K?, ?:;?`g@ei%c?)?A)J :@^?]gܿ"@$Hu A $>Z>A]!vi@1AM@Gþ#AI@CA/P罿@1[Ͽf Qw߄JE' ?q ?XA#E>(@4O?>@N}_$;g1@9A3?N@tz@O4 rv{ ;YrPA3y}??s¿@@Pa@ŰqQ?"$?Ģ?A?0<a@| Ao! ?@#ACA>t1@?@C2Am;71~w\ZAbAg7B#?@8@V@wU@@#@SwE1^@G@AmvWоhe?ӆ>l@ ཞ#̰>J=@\AJq@@!U@CAy0@ȿζrDx@HDA-ǿOD?8Ah A?ݬ@НA AÚ/A}AAB@2@O_?_??6@a/A? f!^GA,.A4A_A.y`@ls>(L$@1@=@z˺@ ^A[A`jASAv@)]@ۭ ?'%@i6A ABAʹo@/A]AM$A@ e$׿*4A A??0!ˇ@A)@Z@;Xa@kV=A=AR|NqMu6?qk Al@}T?bjܚ Am_@ޚ<iS` !#AÒACwR~@C@q?fAKoAn@*X,AEAۮAH@E6JA(Q?V&A}?(%B?G?f@SAPlA@ e@1:Aw$@qW*5APAA>IA]2@$>ym@>ԋ@ @8A{A+A= A^ .ѸWA@'?XH>y%O@҆@hAiAM?3Bp?lWAXѾi$A!HFA9AI68A'aTӣ|@/߾oA>@Bs?9ˀ@3ȯA@.@R"*?k@`EA= RA Alt?@@DAB mA@VZ@ot1)Կ6AMIAA&!A9? [l@R%4@X@2e^@uȚ?RR?Aۻ7AI l@?Ui'A +Av1A˹@oSy1@p@@QDAtuu@:?HAL>@0{R|/?Xw)@(*A&A_[@rPAX?=Az@vl 96@Qf@e2>G@/Y@F AT@(AذHA9J~@@A~3*@?2?j@Ȥ@K>AG-A&.?B |@<@̿1L*pA?@ڙA+6A2_nR@KdOAA]@6A M@AxA!=AN&>p 0}A[A?@+ۛ?"+A@NAQә@!*xοYA@ ޺?)@`@߫A;pr2A;:̜/AN@!Aُ?x@tՔAR!A_ #c@@lIh8|XҿS@0ASA.~Q@>,?kK0?(R?r @#??<27K6<?4?[,>Ϋ?h?>?0D?HqY? E?%bA=٪?d??!??do+?b%=Q>ni?[L^>d?P=,>GS>#>=?pO>L׿X`Y?8?RL?*?xhoXּH>}7>w1??>D$?Nx>i>H?T9@BC&?@0Aj>,?\ѿ2=)@ Y74@iD? -=\?.q{=&+ ? LO>Zi?̋C}?lT;?p> ?D,?H1??>E?&?v=R3@V6PԌ?t?L?>Ou?|>S+??@? /e?"s?^ؓ? =TM?@>Yy >?Hƽ@A?>P}>ը? 8>A?c;#?e?h?a<? ?b@ O.J?r>[>>??ɕY??q>x-b?]If>a?Go=ӾJ??Q?Q1>^>Z>_V 3|?y|IXv|M.\vGX6>KU?r ?iVw>Sg֎=q D?~K@ E?Ac>۪?ai>J?^?x]?$?/=Ё>~@ ?+>?;4wg>r?(>7?PR?Cm'+:s?sP?za>EϞv=P;?DИ?Tҿ>># ?2é?W@PŪ?vץ?:4?J/?ji?q4=:? @)U(>Whiz>q>?$Y>>a;>i[<h+?BhI?w>P?">!$?3>> ?Bn>ؽ*߾ >n?gUjI? =G ?"> F?3>>&>T=Z>@`?H?=k @ZD/?O>??I'?*?L>1@ ȿ[¿䟿,[nv4C?/>d>>>~@JC?-iF?n?>V?8?Dh>>?I>IA[0ƺVc?WZ>=7>+>zR?TF?ɿ:AT?ܔ =\: ^z>P2?Rr??VlAe$=>T> ޒ f>Xs>AпIS-AAT@U?N׼ɷd'?bM/>ZRd.?;q>苿*/p?>[>9C5?&"5I>:>A>?V&g?w7=T?=?Szb?x?\+[˿.l?Z >E?%N??o@T$pF>>h|hK=v>?NN?P?u?_>ًY?/? ^j4h?/\> ?Rp>)=N>!X?!U@E?W%~">$}?1s>=?CD@Sf%pZ/4?O ? !1r<>>}B0=GC?*?@sK1mſk@>K$?F;?e?yv[?">F@>咦?I>>φj>@8/(ؠ??nF2?l׎?n?D? d>Or@ YLk?X? +>)(>!x=| W;v=+?:@7s?92?~??8n%?|??h>&Yx>4?h?r?ު?H?? >>MXųXώ|D@|(?Q?R><{n5&ido>!EɿC=0 @\+]?k ? ?z"{R뾣?>.s)t-=/?ﻠgs)@X^?Z?3?O)P=b׾G,>=>q+g@ݿN:.ɿj>AH_=Yʾmh?㔿?Q߿+Wֿƿhc&@/i}@? ?~-?۾ '󾄼=x*=q?FAkM:???>xN>)<)>U=j? E>i>ACX?*?祾"~ֿY9(Qfy> AqHl@ v@?8\7yl\|D=@lDA@/?Q?p_"Z~yps?EM&= ;@^ o ?l??>h=> Θ >xz>?>}po @x@s">U‡dpo>g*SO>4ؽt=4a&@dS?@1>!!i-Ǿ??;×>@.@6}>±0V۽?nz? >TS>l>t>`?)y!1>84?J#Gaa? ?.< {=&@HEʱ@Jb(@?H\?&Hnqs{?j@翀?Cmt?^ŧY?gm{>I=Q5tEh%l?tF"?:uBg??C?$a>L>> q?R9Y?4D{?i>T_>꯾'|mZN @'a>)? ?H}Je:"k>YOi5=>O=@C9՗?P?4=6E`rX >]5==<B?*?%2?En?7?#P-fg!k>>𽪺ھ}Q u?ռ0」?ƒ>۾(9>?.K!?`?g>%T?ѾXR>ۉ?]%>]v>i\>7#;ҽ«A^k?n\?3@?O>Fz&"j<,>\bV?]>(A@ @b8@ޙ>F&*8M~a'PqJ?9`ȅ>6AثAf@@1Y~οQپ$k Q/JtB,@A@"f}@JE<$R]/. Bk@c@*{@7 ܆}C"qcJ?agHyN+ſѡB%p@z>@ @YBcP^>9[dA%'^BB@u@ʼ@ۯ%[o]߀?).<|NB@@_@f"HWAa|?&ݿ!$UB;@@@9^C`J? ¶PDzR"`B!@@@oGThM!e}>L.Ⱦ*ecB%7@muF?@HLT/ko> ؜6dBs ּD-Bot%A+UbV?ؿ>=8;ϽM-ᨿKLBpD#WȲþJнƸ80 .o)ܽ| EpcBqG$?=rZ>\L=5&{#nC}tBq+QkDy3=f߭>ͧd;>x'#9۾Ϳg腿iBBr.n>0s>HH? H>"򧿳>=W?,ۿDV?#'|ÿSÿD,/[2BsX2rP?X9 ?9Dn?%tM6M[#}2EIBtۆ3?[R/?@.|?i_O:%WBu 4>+?HϾ^?<0i4?% $v;)!no&BuGaP}A?b&yx??M.>Ɇ[7;w򽖕A_Bv_:nɭf?[?8yhe>1Hҧ>"5wBvm?Z?Eڨ>{9]szob,?M?Yz>N4QZm:1m8yBtc ?Y=?W/R?yϋI2IͿ7.пL3Br qa?0!X?5?ag˿7!ClK,/>&dBnzm%;>XzCX?P?o_@)ɿܿm>ZBj($[ǿ-??RgB:^>3BdxV59Ⱦᾫ h?(\? $T[Ύ%?]BT@zu <9&?X>/\"F?9?7t;->B8t@v?[@dL 6Y䕝.5n-B5@>YV@n髿GN7FSī3B3@g>@?edKh /#D DGQ"%HB2}@(h>A@쩣g <)- 迉v fB1P^@1=eY@(q߾n*F^vCD1{Y[ɿy1B1?@*;>…@gk1ׄ+ݖ#?@EB/GN@BVW=@, su{j,4ɿ6Hֿf/B1@,m>f`@vbs^` ʐgk*δ>ۿ4TwB1X@j>a4@ dZֿ*%d>ÿжB3-@>vA\?O2zE'$(>犿ӿȖB?C/?щ=j@28́(.fQ&ֽBBaҿM-?調:i*=:(HUhH n#Bg`ո>/+ݕ L>Ɵ?+.$>UPPBj>>+D=: ? n8m꽡ZBjfA? N =Ҿ0>ό&6 EfKrl Bj`K2?+7=r>،V5xe!m[BjFkc,?.d >)o4>@*|7\=pNBj[+zͫ?W>`? #\vOBi<<4>vT>oq>~ 7ᄐ}N瘿vBgM>\>4ֿY>o 9κR^e/Bh]Ԣ>qq>E >_8:aQς hIBhƿ$hͨ?3.q 5>@?3+V O"oBj$1 ?rFD= 6n">f?OC*8iBjF?Ka1Dp>5nf?:+:̈́#U}1kBi[ڠU?h=LA>{H@ yqBjsab?S.Bq>Z=(t>?rHpT濾}@hBj&Vr:?CH=>[lƮQJRܾ/:i*Bi/*Z r\>ez~> ?'MS>~Y7ݾҨcBf-q!/E>@@> ?TR A.D@|ËٻyDBc18Y>(]e&??|]' deEQ=9fB`WX.i|fW=4{?i#?xOyR|x>gB\G0~>Ő*zc?~?yJNgmuAG9>\vBUv<Ȭ%>W>B?\ֿ5I<~!BG^=H?.+l?qϿ  4_B/v@?=k@rjQٴi-hLHhJs#B-r@?{@Y[+IC>п$_Ѻ"B)bT@3 @@p(]i?zֿuL>Y2jB#Z@zD@ ^@p qؿe>ni?^Y> B @@@ $进_~u?t^ І>n B@E@DQ@G6 ?0E<} C BO@ @A$L@^{^T?Z;:?JOAVUA @e-@Xr**6R[?CY `Q1#i}GBy&@J@?q@0?0q{=F1+l!HTB]?@O@y|?ő#,I?Ȋgػg8rqAoO?W@JJ?C2q`͋𸞾Yz=W?#>G䎿^rA녿?4?@9>9AHL#=tg޿Y>Ihp?}cb8>?ɈA>jwrF{72>Ё>f=kt> S?ZؿL ?:-Ai!X| =~T?_&?=?:?g%?A=>ax ?!lo-T?)>? пc?^Amq a>%Y]/W?q>A0>Ms>y?x>?`#7AӨ;4˿|PHNp?pu>_y@c?J?'Aׂ1bп!?? 俞vgd?B=Z?wП{?WM ASXE?u6?>C쾫k@!e?d$)>mA#Ϳٙ¿l?a3'%@uc\?R?ՇA[cA_R= ?l`<?Nmm@ ƵZ?voBDV~?6>p NWUkGGn(O>膷[SBJ ?{Kߥ-j\9ҿIw3I1'^=K/ο翁BX@:gvٿE>%(f$7ӫ(潑b:0$BYa?Fi0opNQ>?20oQzӛoBYS#?*ܿ] N Ӿ?C?ȿJD$>zaLWB^:;Nh׀Q{"? y>CPհ6<)ۿ[-nxBjn.VJֿ 0m?=m>ye >/=2@vBn!3Ed?* n}?vh=bo ʲ;1hɾOÿ>Bn Q1vc!'Ӏ#>ʨ>">3#&|a~Bl5 86?kJ.fBijٿ+B}=e(B_yh,8np>e=0>ѻAE'D_? ſܼBK?&YQky>SƏ=>~(۩ĵ?Jl !B9j?'@? Pl5A 0/{ӿ[m?HhB-E?5f^@(^@D῁{Aiο]?h TB#_?B@R8pGۍhN-+a\Iy?bX^B@ ICC@5@|'3%7P}=L>nӳJBe@*>MD@!^@nc7Hƾl>׍kB% n@Z?6@u!1ÿħ)!~>ܿ>8l_B$ޒ@lKi@@5?כ%c?R*>0wĿoB"B@N@O@cOοɑ׊C*r?˿R 6%rB )@@@b/H&5H3~?,S_(8?|ɻnFBGw@<0@:@C49r0?0O=x]iB@a@V@TῸ:a'?}M? !U࿝BbAL@:@*f[pdJ?>~ o<}jGiRAA @@܏ FJ?;.X=bڿA>@ /@uz@2?5f8꾇Smļ6>Aa@-/@d@?>mi K[Ҁ?誷9#B(kt?dHAGH)B澴Sc$3>4B#;!Bc_ݼQm>*ɿ#?k֜Hg>B'D\@2.plSzt轃SJZ̿-nBN(=? NbJzQ~ҿֱX>B&'/G>NFBK?>QR>a59wp>$g>^~B+[B\?@U}6YD?#)dQ"c?/3|>똥pXBuX&@ADL[߾u >Ȣ?%X>>@h@?ZJ8@>- =c޾vM3>&gBI@ /<6?cyfϤ?Zʿ +.j%6^?&|BH=@&A7%?42T?PeWњ oY5/=ϿRBH@l|?M:s?lѿctȱֿYo\dFBH @_?չC~޳p?'`*xӊ`m>ὠBJyY@6Vtۿ?Djɿ+?9]>cuEBOn)@qp$?@?3^i<>>ǁBS0@sj< {>P"n>r>s>w;BU~?&@:?wOc@=u!qɂ>,?}տ-{_BX,_[$-9?{ڥT?ILϴM?'n3?!﮾BW;@(U}cT>w<%?[yjK? aeBU#kS?J@3c5:Y\\Ro?Z}+j~?G侼sBT S`@S@0$-LY2Hd?Goh?[⾯BP1,@ M@I:0hQe&Q?DͿWr?weBN0@@wSSo%=0?ỾO?j+BH7>?\g@o\80q} N?+y6>9?Z \B>@y?e_@>7zz==>>=n?Z翵 B2@G6>5e?q?'av +S? +Ѿ! I?ڴyB#ƍAG>}=N?aEC_"Q?JDW,?ӝ?]0B /?sIB A:z@A\:?"Ri;> J?Q?Xw]BGAUK@\xn!hN5?YEu=?!>JOeAA^@kwcrr?hp Vu>?\>JtE?A AO@q(As2T? D΄KG>;?~M#}AAGE:@]C"B?a*za`О?60>upB7A5v.@<@-辎W?go5}:Ik>^>Q> B A.@F Y? Pݾ? />>BA%L@AR"yV?z^ῌ ??9^B"vA͝*X;G>x:? -> Z?P>Q"B5)M@4w 2<VA?@ '1=8}B;)@9R$* |@?eJzĿܿiLj? EeaB;@vC!˿A@7;?Q!*?j#өN6>шBC˅@Lf@- (50ȷ^ۧ\jܾv BP2>A56+Uuo*?@bտ̗?o [ؿb5AݾABB)@?~n&'?Y?bsp?W+]̻+͑=軀BHZ?߿iFI?u?i#龺?rɔo>/BKDu?Q̹?iW8> >>b? 㿜QV^L>9Y^BQ{$Ld?̽>>'?[M/pM>Kn+BO6dd?ǿ#>ّ?O?崋ٿ%KQ?YBN޿Pӧ?+#9>nR?j?kɿ<ݾȋBId:+@h\==?[k?hAvǀ9A.FEBE3>8mq@bcWQP,?!?Fl>ÿCb?/B:4@kXD?ս@ ?Sފz(@c(WB3/?Ԛjc><{ C*?p;? ˗Y8{}Ŀԥ1jYwoBg@MiC؃@-o^:iW?g쾖t#'Yk־+qB s@Nsl C@T4!?rMv)=󐸿I? BI@?Aӿ@.>8Fƿ4>Tyq]`?$]}N96At@ڣ@Gn@ᯊbwξsϱ^z_彋d Aܨ@f@y@HX-"Kir˿m￟6AّG@ g@.AࠣnA@(@Akѿ>߿R`MBᾠe-P`r{Aȏ @g@xA޿er|_{fg;o ˿ W𿜦Ab@5G@rAK@?NW;`6ÿ?MԿ~ A@+C@A!GQ>o>~.I==ɿu8A@@&@A~9>?Z9 FE=Pܿ A_ֽY#@ml9@[ ?p%=g(HO2_#A{/?gy@%30:wz >>)Ae࠽Z@\W=VAr?<>4@&i ?kI@˷1?Pt¿apYk %%n? @Ewh)?@Wn &_8?I>@>f@*?s@woӈ?A*[|f!bkYڱ۱?Q@=?.>@@1)?kϿ0>8?gp[> *o}>X^@q?.?@dP?pѿr?h?2]O=C@+3KS@Z?_nK>riE!ĕ?Eھ@j0d LVWx@Z'#?j9?Y%S?kL"?N=D>=T9KJT>]@,~?%?I:? n?W?bFľK?K+?cHh?/T5?3ۆb@\?Z^@?o>?>W???BZ>w@ ,? X?_ >t?n?>f>0?> ??\-:1@O?mB'?kf>K?>?d??5Xr?c?2 g>Cܮ@,Ų?fE???"?O/?~?v?j d?W?xT>@9(?%@g}@ >H?^)??5?8?n?>T>j, ?I?9?P?q3#>?>`?b?-N?x >4p fS?E54pw}>?[?b>?t`>I;??Ba?<=?[e?J?ʿ?T?Tf>^_@B?$b'l>By?M9>}?<?>p> Zo?y?P>F> ?(P???y>4+?1>>0@=?f?=_>/>]6?Nu?,H=>4;!@P@>>?fW><?%>8?,D0Qwn?>> F?'87??hs?cD?D?\?.}>@uye>{>,?NZ>Иj`=Ԛ??ʦ??i*T?(?UA?tx?G>p忽=?!e1?{??f=I=Z2@,2^???6@ ??^ >UM>8? r?Z6Ᾰm=pocketsphinx-5prealpha/test/data/tidigits/man.ah.o789a.mfc0000664000175000017500000002177012504317076020622 00000000000000@Qg3cxk"P><5>C#9;@@YS^n>ۯ[ʽLOb>:LD?2>*D^v>w O>@D>~ 0[y?>?o>a==?%">7s@/?c߾ws>0?#?E>Zh&怿jWKVX?n?y?GD&J þg?>0;>zۦ?g6_&@D"{Q?:1{Tj$B?PQ? S?eпƾ%>@3P,T8@"%?4E(=)!>K?Զ?GP> >׾R_ @-RLE?ƿu#EGC>/t?EOm=5?-ڤ?1h? ,>I(@P?P>SOy?yM2?(>?!o?1?>>"*=jm6@n@7>.M7R?/??.? >?3@;?>s> &4K@8`e?{?[>KVT > =??f?O?.]@׉ ???a?)?<,H?.w !^'?S?Ga?[J%/ɏ?A=?'@\i?5>s8>v=?%є?W,?{/>N[@>b$?!+@o?Pῇ?#ul ? SU?*?`Rd?L" ;>?JA?m)?q>>%\C?!0xٕ> @jP ?x]f?*?[ "&>m"?3SҰg>>@ʝ9i?)ֿ>y~>Sx?b0?r==e@\?b/Q vゥC'~?>8>T=꽐@9k?5#ܴx?!N h>@q?\>SŽ?V%@l[(?UΗ龥?>/ο? ;?>b?!jf>Aik51'HÝ:?Y߄@*_?xN6{>D|ACs>9ri"-?(?:>;>ɖ,?˸; 5i-FAe>-J?ȿ$'@b6?%?@b@I_?G^[5 Ag@N@2>ٿ> d>!>^B*\1@bj> 0o1eaE׾e̔?,>YG110EBE@C&?tk=|O6~Ӿ:F@.Sֿ_BI_@8T?o2?ZLxNm@/мx)8BJ0(@.@ owC?*Qp@+hQ!߿@BMI7@+??1Vxh@&=8&L`BI@;@ mK|wB@`@y@*ɠP?\arYֿh9@."12>9B=@@) 3?S@yiN(??(I>8d*(B;q@p@^5Y@F@̈́p ??5m!?[&BB=@@_Y`?I-!)`?gl>?V(B=@@B'!U ?\Pbj(j(?1>d}`?צdBA@?Q8#><)Qd?X? g?jBAԊ@''?h?N/U?(*]D.]T?^$f>! BB@IW??;Zz O/?b$N-?o=KB>@0M4@?ؿ/?.,J2y ` B+~@=.@S=>˂!?s>&7o>*@?,11r?"ɼB ʞ`@z?dt??BNx?X?$pS|UL2Aب3@U??ݧ?9"y?=a??+l<>ōA*O:n@ ^?Y?D;?2  ?>wl`j?c&AQQ@zyTn?&\-p2k?s?9?cSrLA*+[@to݂?QD߿V@>`d>p֥>\)=BAuCffv@V֖5y@C"?nD>ɒ2?> A[*[P@`6%?{ӿZ|`>?xY{!>?Z=D^A6TE?'>|y> M7h?⻿_*$M?5>,BʹS(?Xu?ň}¥&?3i>B~?5u?jB Mn<X?z]?s >Až'qWx?z]vB6F ?Dv?}^F>4Pe>ʣ>Bz@&@;b+* >>5?? >_>bœ>\ĿpAV )@G>fƜ!ݿ\?/c?3ӊ>,b?՞]>B7cz@?=ӟLd?H>?8vᕽ>ܛB= p?KT?^?AATC1=x?? (jHػ->hXB]C> -?鞿=#Rr><,?Y?5L>?B`3>p'?efOj>u??3X>mJ?8Ba@.>4w:;?u1̿&[)???)>]?Bc1?X_>ͬ[?3?꺐?yq =v?$7Bd?7eUa*\2ЛԿ?L.??E?ya?0Bd"?Hi@Na濯?2PX@?(H?:וB`E?_Ob?E:zſN>#?&?!D [?!-BZ2@9d?{6 p9 =[?T?5v,,&>ABR@tG6Do7L=_b?g?9?HֿU>BBZU@o9 N hZ0JȿU?6?K? S[p;[B2^U@%ؿ ,eæe>~K?xؿ4uB'@vi)^? |Tyᇿ7ѰfZ`<@A?lN1TB%@þj ?e?x >?E\P7B& n@QN? ¿>DDwI>?jYB-@&F>?¿``hB7@!,.b#:~>$cn?:=տ,MBCM@ HSU?+B?$X*>ݿLBE؝@QX>(6q:=Ԡ?t>`dƮVtB>@Bbȷ?S-=״eE L9?=ᾤٿNmB7I@5$?Ғ?uۿGO?1>KVS>@ B85@} ??BքOt>ͅ=1^>rB;8o@) ?p?bR/>y,>%>Ǿw~>LBAn@61?3 fܾ&?uIo@>BBJ];@Dj[?n8_z~b %?H5?4wy տBM>VBPy/?@ÿ~?ǐ~,6???hpZ(>BSO?pie?p!8W@"?:οiRp;J4<8BQq?gnF@ rOk@*?R1ؾ􄶿>iR0ɫBQn>ڿ @bʿa1)}@ ?b6CJe#>Y BP>Kr@5+3rQ@?=Ux?N>ԇ BPZHʳ@T34Wٿ8_@x>JX<ߣ50?*%LBMI=t>Be@`?5\Vg/BMԆ0C>@{R>BOm@ "$I pžH?%X!GbBI?\@68UD4e?5|X3? HBDؿ?w@tm3Cp.@uc4>?%?rBAYpN@@>`6cH@s(ʪ>)[/+X?ۿB=3]?@?@,D[Ty,߈SC?ʿ >ozm>yu0B5<@>@=A0hq_@/u$=b :ɽ#.!B&l xR?@<7"wL\??.X=;*UGB?6t>ӄ@@^f `?M `2!Ͽ D?UbA4y@O@/]@~[?r b 5?@4)Na?$T?0YAN@N@%@?7em[oH3;B MA+/@wA@u:'@ ^a>4ÿ}](>%>9@ERA=h@{A@l?"i~Wy!< prHl4P>A@@>@v>K>a?p=W A̿Se?$Ad@1!@x/@Az)Q*?4-Uȿ6LͿ_@"vB?@~@?;%>HIin7$Nmv0@7B?\W@+[@ >r0 ) Gճ!Ͼ7E#:Iw?AB?: @P @4.I>d=w@gzj>{/Ř࿄(?½B"@?ᕵ@%)?%¯䋿Y>82^d=^?pB(@?@L?[B~#%2e?꿊+5?>B5@5??4~xRQ=>I~XDzZ?XgBB6@)kژ?w?=z??fI@Uȫ>|BCx"@A {?M?$`:()??@00ۿU+gB9Y@aE=r!?]Bч=I@ ʕ@ KM,(i3>^#B5@582L?HAa/d6?т-@.V@cT >YRB5z'@[R<1>.c)3?Ș2@fLݿGklױB6E"@W6T ~?2M0K?O@GIbm. yEiB;@5x|?](࿂ 0?.&@we !߃BC@_RQ ީ>\  ?PJ@#X˾#>BAb@c;l >o)q#z?:do?*~W""oB=@\u/>꾐& ??^p@P3aο$f7B<@Bmÿ=럟 K?E? @ԿBr' >;9B?J@S$!!&6jAZo7?k @E=I bv>)BAo@d"iZ-pU˄?Ph@/ Q`XyB?߫@`X42H>y]媉? K@2wMb=%>}BB9|@\p~YEU? d.?Ft@*TGJVoB9@]t;/>! O?4@9wrJĿ"1B@>:@D31|ơ>@,J? @!hx_,ֿ#pB89`@vWf?[?ސJ?@B?93_'^7B0@9k ?\>Ӓb|?@#׋xw-wzp3w$B8@ d ?G>@/ ,L?a@yg)`\ԿpbzB8@@u'e)~?U?v1tԾҩUB-`@ K@2ѽPIn?:?rпҀ>l3>_G'&B2-l?E@#>?K?ȋ>ș/?~Sj->qB?@ė@B4?G"Z>_>Yn?mK>B@!H6@0Z@qۿ R,FJ%K>LBbU@wl@@@A_,e\E=ݾ)S?B9@? +@@ o {U⿈{{˿&{_z?EÚBa@v_L? L@@?59=pj>\ LBS}5>lB:@N" #@!?C˅F܋нivJ >qB @?B@z?>迶6>舿+Xȿ;k*??A]@?Q|@4?R'ÿ":$,2@0`?91A߷ @6Y?q@[?s{㻦>U0J ToG>xGAX@N@E@F@zĿ8Bѿ~=>忊 GsH?AE?@oX{@I @ ZILт na/J? A,`@@@[8? P??U#T>_ : >TA^?@ }@?aZ>2=?E'>o쾫̽? A@? @WG@@ϸҿx#?{/ܿ?J%>?AQ#d?Do@[?m>?u t=Aqn&?ie@AoF>*?FU@p c?.-?O =&eU$C>a^Am>Qzq@m O>s>: ?і")ƶ>>,At(?]N=M@># 9>Fg go9$ҾAYC?ńݿ[ֿS?i>?/?&vAe=6?5Z$C&۝*8? N)ֿu>?W!AIʵ^>+?"7Sߴ==/#{j>Zt*A6\RT?K=mz>V>=ٽh2'VAݿz?\<%>(S'=;?I>? &\“??A,="M?r?L<$~s?h ?P {t` A8)?,e?vM (^>NSy?1/ߙA/Z/{'Wc?zl>L`N>l?r$-:qO8#ԹA.n18%.^?٪;?Ȫh <>ҾLrʇ1?A3k^?Ow?Ƌ_? H/gg=+? ŽX$_;Ӿ\A  F?o??i R=?&fR?@ؖAU=Ӵ,=t[>3>Xf#ڽ$o*fc3= j+>́A ͑T?L_a??:\?5g5>ҍ^jT?\A7^2Xɿݦw?6̿ Ծ``>[ADc7_?>پ7ڹA4&?~ݾ'\k= $K>^A x:@k?<֤O?߿J>ZE]K="w>d>A21'^?%?ܽ\{ȿS=n> ⾮>!@l"?D?>7l>Zp><>O>2'>A㿺]?~MV?L?඿\e+_?M>>fQ?h?OA XZ?|>כֿ<. B5j[?f(d@=I>/#@LO??A>'V;qH?=2}=XAZ1>0?tW?}1,~̦>і[=J$hy>ҿ n@{?>oP蛥'DC?k?M>>>R@ݑ1E?>J ?D'6>N "fN>޿X~ >ʝ@պ7@x?7MvV<5{>f>>!߳Q=s@4?G9>x>ԽmӾ.@*iU_^^pocketsphinx-5prealpha/test/data/tidigits/woman.ak.84983a.mfc0000664000175000017500000004225412504317076021164 00000000000000*?)? >HG:"">>k?5=??a>&> o(B`=YV3p>O\=8=b53>[ ->?>ڊוC'?Jv?]_Z>e?tn>v?哿QS?+?pνT=#0l>˾A?9Z8̎>ݿST?IL?)GQ?=cr??KQ?ﵿ7<61=T?=pE\?|k??f2㾳A??f>3=Ά>@t>E>S?y=Pֵ>ܴ?c>u>&>:=S??A?rIdy?%H >v?b ?> ?->1E?mt@8*J>=L}u>0F>> _/?鏽 I=Ot@04@t򏾇u?$>?H S>74@{ C@~ѼToo࿠_!?ruWw w:oA* @pO;d43<?3.x}D2?e@f 7@9u?;ɿP3.>e1x3>h?ÄDK?b>*?,T%=v> "Z>c U?q!m??#?37y?to><-\h?@a?yܸљ?i-H?@?O=>l? -?~me?>2>><_? #&>쎛sy>d=tl>>?/?#>?R@`>H)rB?Fx2? @>?OѼ?->>]ƿa?#ʓ[r*t?_?M:T?r>`@Tɾžj%t??#?/?E`#=.Lt2us5@]DA@lؾ\07?mݣ\"^?NJ?! ?8?>Y?=@9}@>?P??j,A?P$>aI?*D?KQ3|U?M>a>r?A=??nҽ]?` l? l?"pAiQ?\y?'*o?=ʁU:>YI<սu*@P`?/?)I?T??&D?>=2?s?'t?=?)?> 8?L>c ;?OE>?>0?oo?b> A`);T?nP@ f;?ml?l>l>?c>$`B$x;6ԧ_L>a9@^:~Y>EmNVs㦾 6@)l__?b^ ?>4= ?^BzQ`տ]pJ=?MYu^ 7WB39BB@E܎Y~?KQV(p/_#BTH=m?;=o$9$4'BIjwԋ8=?,)>wM%#,ɾ BI &̿[Oc?lǿv6E|㨿G?PU<Ba_{<ίX bS>JUL=w"޿mC`R6ZByhd+if{X!9_qW.&H]Bu8ٿʫ ǐ!"7oeQLc(=,ٿUfZ:HUv7Bnɿu]W ۆҿ3iʿ꿝׿ ~Bk5"䰾걿gο /˿fBk޿+)?d0Hq!'H~ >0CԾz9.Bi:ȿ{?ԕq&eq禦b>s>q?.~Y,Bf;[@,!%R>m lȿ }RhBfa@^v \92')tUT={[BBg@ob ȸ,cP?jґt8;Ba @u9Ή> 檿C ^˿ɿBZ*@¸]Z/ 6\^`^[BTaCW@{<;[AQ>Q]mA+񅿒5@BEKV@ܿ8øF8$*}B,O@O>C1Q2k V7JՐl/wKBQ>@@72HޢPf?4p?38=޹> kA? O@"?$"|LMr}>LB3\e;@ xAI迧@Y|? {5+P?й@=i|@’>H@:>_ᑴ F5?0?&~? ??@j:V@.ĽZdX@0fwҿ*>??>>W?ޔoci@r?[׿S#+>x12?W?a?[? @Jq?I!? *ys!?!2h>˾:Ӿu?akپAf ד>h@'?rMyo -?R7'i?BP~>)?Aܼ!?Ϲ:@Roh_GeދMsGe}P<ղ=%[|Aֵ?)?@5>-g{3u &vlWA6.?@6{?k9=m(&>>ʬAj!x?m13">=Mڄr`!gRPA"> ?-g-?k:?O?l?b"'?bVqA?o6@A=Q~I=$?#=߾˭>)/A;d@?JƳ>%;<~>nAZ J_z>d˾Xf? ,~>mUR>m>t2>Ӎ)AA?̸@3`>?ݾ.>V4+|>(A)wa3&?)>66s) >@=O=?j*nA6'۾˒?uP=S?dK>aE@?T3?\ؾ ˾+A$hy?tbl6#+:>Z>[>s???>8>|AL9Tm?4%{;lUƿ8? ?^>>dB\B;79H:x>&>꒽pK [=?KB4pM7?Ms1?&D?F?6,|?`B"@A5?an`yk1N︿ xo쾾BZ_B>@ &T)P>=ZqW3#޿̑BF @J>v?_1^>?JzkrۿKX=5NBDA/>c1 >3⽊᭿SH BBAh?E= >2:Ds[<\̠B?hAz?V8 9=4vqmPoE B=AN@,$Oֿ#|14I`B7eA"W@7;T޿<>ʿ"GͿiv/ (SB:AY@+ D|d}~@EmeݵMF(B?&Aq@BPܿ-ΠEګZaYBDXAg??^/;'=q6[8*BH|A?ɾ_F܆GBȅ+*)EV]rlJ3cy|F<|Z>hTBU#@,uI"%)3wV>7Zs?ҿtBX@;ҿYpSھ=^ż>ީƝ?zBZv@Q?0=无ZDy>ھ'? %5RB[k @YM7Q 51Upa19~=M'>-BY@ hrL*,1\d[@D6ٍBZw@~\I|5EVPfu_IÓ~jXj,bxB]#@ǔhV\r)J/p_\2dysc7+B`@';QN(\TJٿ0>p̀(~MBbz@l,w$߁U8X係? ?YNBed@d""9v.dW?3'GRIoBi@C޿d1m,lYN.?0EVlQyBjp@zѢWK* _DzLE>^3?= Bk@zA9RDbP>YPd0<>'x*'O]x(Bj@JNU񿘪=忭su9GQeg1\[Bmsw@0٩ >Q>꾁wN]#߾^(V>Bl=]@lf+ڒSkrGpwu$Xy(Bjc@m^o^斾aN=I0-Bk@Qka? ? o/ȓ/տX:Bl@LLPþ?\?^˦zOBV)Bh`?ZKAaǚ?x= *ο6*߿Bhh*@?D*?o?xx6Կ}'eTBde?'?{) ?>ILA0i<(9B^ӫ?Ê@_.|t>܆!Oy, rBS ?M?z-i@b{.BV/NiT5,(_WB;@@ p#@8=bXE*)^.>Z<)sB(@>@'f6L,ZgL_?M(%־W3iB)jN@??=Q@)"$g B+a@ܻ?@,#8=C"o;,L>o.3?05οd3SB+D@"?š@SPc30Uwh1x>l ?N|ۿlB,?@:?c;@nAt8AtX?>i /?߿7AB*@V?B@]pN X\=h[)T>NnP&P˳B+ @m?@v$>a5]mj?'J|>S}GPB+_@>,$@i_E7T?>AXZ#b B-0@D}>3A@^'>qc<>ycU םB/U@? ]#@n( #?ſ?$B6@?@fs{' r6B?3hCBI@9uj>@H .)t p*"utw=Thj BqU>ZHz(u/|ʿm>0Q0H [5(ys%ǥBzͿ8.Z@u = :K< ۶ +~2B}?-/ؿ)'>SοD֢b!B}nu<6"c`K=ۿ#F%شMlVH;͆^BcRgrS@EV[3$`no쇵18¿XB{߱kL-絈ѿ#ǿV9FB~㨿Fx <=3>03x#ضٿXc7E'ȾB}F:uWD>[tJ?:t - B{0g|࿸X G=o1hĂzt7PBy0fjN޶V=p%P^:ڿjwBzٿ!IĿF~?ڼ7M3ѿ4ן)}j!|Byo^E۾j>νO >zL\&Bx̆fs`Q>6Ff'6 aQ[οʺL*\Bzk1⿗(>i7>9ĿaU6ܿ?ykB{tjΌc>O?Bʿ:KrL^NtC$UOlByHHV#ֿO o*>Jo }<S3 qнn>OPktKTTBB:~?8{h~=!ؿ(bz$B0 cܾV8,ߒ2nVh蠾\PrԾˌQB95(DH;=/:;j->B1I==ǿ#~3zdͦ}"%B8DGwܿjZ5oc/NĢ~N}B (E d>=ɿ~v?#I-:ӿŃB~FG>P=}J?0ˮff#ECrHBB|=I>?YF,1?y.^пB{@f0>?H1 ?bk~u1l~}-BBzk,ZZ}> H?M ο[DsBx";z<,A ? Ya$:i54 BvY2}\p%1Yy\>E65hοRiۇ$Bsh%H* <ﺛ(;&?C7%%9Bq#]@kN>lޯe @BqI=A?.ƨ=N?w]5fӮƿ(}BmupwMd?.B*u>&[EQ3?d%Bknm"?k?38W> X(d PFӉ=&PBjW+U<@,aqئ} ?{Vg>˿ Be`?aEW~)̅U$N޿TBbB?8NLSkÿ4'mQQBWU??zXA࿏ؿ!)(2[k6 B@@.:@NhEΘg>ſ{ ?,q"]B;p3@q_>H6@$m ŔP>w(F>e%@@B<@U֘Ea>7>= +B:@$@?? @//s"70RkY?*l>=@B4-@+=h@ ~ E *{'?O (=>@;̿B(w@m&>6# @(` u¯?=SBaA@Ҳ?: @:tg6?:RSp>- ^(B C @ M@u3@2#ew/ rAiٿ<侾͐B53"D?UG??^?5P=Ik/}(?SB4n7X">IyBEN|Ж2H=:?OL?`˿@t>$t?w P>)BF;x m0 w?T'@U<7S?%yA ?oޢ(?[μ "@d^?Z: b4J f@n%As??HD9;@$ j>}?fz7mQ<**@ wQA-t2@R:>8F?x?B#Ò ?T$A8A@JX>ôr/rG? ?x*GDL?dMA 1@1P?un???kz?(y`>n>K?B*|@ῂ~?Kb?ɯ@2>c?T?? >dBxɌ uu?,O?"OL>*,-?-Bki&*4& ?A@_d>%_I_S| ?\Bd?Ž;au?Tn? L^2h >8sHBkի>g8O?龸 }KK =9ByhbRT+*(@)m?>qV)׿h¾BgrI\ >?va ; ſ\%B¿@E[Bihٔ%Ⱦ ?29ÁB]EŒ:TBn2Yھ b?i->zlBsT5~׽s%w? >H迎T򡾮Bv<~{E3T8$>߿> }]KaR߽B%m<>J Ԗx!뿔>2FF{DkatxB~?:'qWмr_߿8AI=8{I1R$1-B{}?ྜ&лS8=OW&+^ BvfXŇ?ع>&6JZmm=et]uBqy1_@>G)deP>Bh4>)w>x=BiP\G@;>ehKZ)c$zHӾ>>&Y>BKBc N@]>+$@G)==e>t>$k;BaL@>%{{>[@νn>Z>@lNZcB_ m@n=nJ<F'E8=5˿nyaBZ%m@}?C㷿ݱ#p-Ήs$@<_%>I|pBRHe@l*?{EC)"׎3[>F῔YBJIYvF@j1?)?ɬ2&!9[.Xy6j>Xp忦mBDP:!@B?)j [[89I lf>̿B>;ߟ@贀?n6^O-;yxP:f>aB6//A@@l#Ҿ(=w>9- 03$?]kGGB% 2t@@=4^>4 K#>PK?BZbB>ny@yDd@2[GkaэlLR`B g?@X-@n8?\oA"@3@[@wuӔ$Y};qy2=7 @>@-?NFv̿fbPVe1Y?A>JMwEl@'޿@ 6? >a ȿTھLn}>v>NC=@ ѪN&1*?V??O ?. ?4?d>&>@d?7~+?9?a?P?Wk? Y?I>Ȟ>kq9b?d?2}3>iY?i>y?l>n>@L>N[n@cQ>?@wJ?=<5?Ds? n*?W?%D>8 @ޘ+hi?6?>wu>=J1>^?h?dՏ?;]n?'?M?Fܫ?b>b#W?z=4¨AҷUJϭy>ϸ?Hy8ҿU/=^m/L> kbAYp1;w>X5>3p.!!^~wFiȿ )A6Ϳ}? ?L4G>4lqT`@ſP? ּHE>A!e@-3Z=x8;> >pDXEvپQ?M ={>PA0܌@ @U?nf?J#~/?T*}x,,]<>A~X'?~?P ?硿XԔ&F>+vba lFYAhw;q|tCOb>BB=-s?UuAt7TA<@ˈ><۬>Lr̾5C! M ΂ľUA؀뿂 ?q&>}>>].7?05GS̽\}|WvB6'Vȿ!?R{?7?n=Dn5>MOs=u&B'y0>òC>ò%<)in=?O/"˾)B9ܼ'??)DܿOyonv#=0?!-S{G BT@1Nn>3F]h ý&ZL؉.`%9B^ @SnV?gT}Կο AZ BIv?,t?Rt@+Rx=P%X=DNF4J#RnhB>oCm02@ ߭Կă, #`=BU{@ (r@aou G4$ؽֹQ}#R:BVK<@wk@14{=X%<Ʈmza|B[ɕ@Jo4?FoeSSJDʺ:ľ7nB[@R?Oe1ê~.¾,1mG=sBZ@Yw>hAߍCzPt8ǿ9ЌK^1?ss=B[@=@κ{? uK>>ڻe#ݿB^ @;UYV?!af>/>3B>Mjp]B_%@<|!?ꄛwN>=PҌy=I+!Bab@0U> {CZ*X;bBgKX@&U>t'48$]uHC>pnBkS@hӐrg=?2g~<׿:RʿvGB=b/_Bmw@A?7}! 9>ȿ+yQ6ڿNBpȱ?{?S4JPx?؁RV2˿<Ԋ YBs>‰5?UM? \]>|n>ѵNBs VDۙ?eI?>b Tí>FZ+BrZ`=տuX?Gx=~ " Ծ0V0"Bp>x9?TE|+aͿMM &YBo@C?C"?C hӿc&> ѾK KBm|9?7>v|;LsnϿF$ 3 3硾ZUBm"eq@ a>^DFa0y!6W>nüq@=Bk1 ^*@4>F&a?Ͳ!L6>Y__bK>BjKD@#>/ĈN$Ś\f>I>CӾ>#BgdOn@˿0r~o"2^l+ݾƼc[Bhʯ@B>j6X?ꎤ>Έ>H7Kd> Bd@K9L@־H'TJ$ɿڌӿ_6&5:fϾBc R_<@!K)FfR 鎿y%K' B`1bg@IH\N-oi- n[3B_2 u@diY4cGL3 B<(Q+m딿S QB]{U\/ @Ҡ׀&"0 ;/,픠=%/jBZt+c@K:01:F"~meBؿ+BX=q?@}EfTe M:_yZuBU_Z:@ƥi Uh>gEQe x4!>bhdb$ÿk.vbBMV@Q MUl .s.>VۿBIIT@ڝ~M1pr"#i*k3⿐e1BD-)m@ޅ=7B ?U-E8$P *B>jOM@ގq=>Mְ68ƣ lB6;O@7Vx=ҿE]ű݄B/p{҅@0cvcs*ؗd5^>HV!0DB* 迋g@Rxٻ&6C,Hmb@*˿  B#˿"պ@I?+U0뿀L9lCB6? ArՀ%1$j9 -LC#Bg1B_?AH]fU>=O/l ==.ݿ ^xNB@0u@ֿFW9 *(mT|g0B @A?fdm~f @\v!4ÿ)̙A|:@ȁA5@?$KsL3hyW"z8<ӱjAK@1-RA"<@^3x5{֧(BvT%:RA@A(%@JB ;?;iq; A @}"1y?.gUcq/4)on۾ܐEAڹ;T"A 6@$Y@"˿ZԶq>, A\T@@,xr@9Wvϸ3'Q\?q? Aś@;u?o^?>S5HPJU-2e ?ŏA,?ˤ1S@7Ch?+>8AY?1|d~0@I(2X><> ۿd?U?CAKJ>?b>@ 2m?s#x@aV@ ?sAQ??+om@?Sz cDw>|=*s+{?A0[Ag`*? ?6ؗG?f}>L|?mD>vha?A}"tI?@%?CH?lPX?w'!~?᰽'yAg +?C@.eN?>>?a(vװ?nAZ#C?o<@FS=>c>l=)9&.= 8 ?d?A_g;>K?`?t??vVvjK?h?A+B>5?혾R?X?x`>꾝aS>A6VT?Lf?="?P:o>5 ־ GW,Aپ=@'_@2poB3>@5(?,Sq?DDG¾ >y@l>@y@'?[=fQx>F?k"?2%7;>7ZJ@/X?T@E@2D?ۿ_yq=`>$D>+=c?5@I?y@i?W>@>?0~5pgC!bz~?@!w$K>b|?@B@7?VOE??). +>͒=~GHQ>PоF@zAQ@ 72???= ?٧>+־:<½$ǟq@iI@Zz@I???CnͱPVJGL>n@Uy@2?_G?1>|? =SȾ+{I>(E?@n(X?1 ?F%莾y>;>Dߛ?$3?%?N?+?t?Wm?~>Նs\>">ZzfR?b >w?yY?Q6@Cx?Q>(ceU<ް?Ң?6~lN>2s>b?5 nP@+%r?f?? ><@p?,]b?4 8??U=>+@.Y"@*B?c?2? ?W?>t=s ?:&g?TW(@?~?]r>W=.?w?k=??X]>Q[?!L~?/?KX?y~R*?k2??>~u? 0!?R ?&4}=3??&eg?:?[(C ?:?1?4,?>>?"@8?O0⽿>1b\>ʾ=Ͽm' ?Q>ҏ?Ƹ%$a@]x>L>p[>>-?>\>Qh?@@TU ?>?|> >~>_?P!ۥ(>z? pocketsphinx-5prealpha/test/data/tidigits/woman.ak.6728za.mfc0000664000175000017500000003763012504317076021267 00000000000000?-@ex?A>iD>n>>Ä?g>]P?k?=ƾT?8?[?.,?!>ˬEx?"#=SOh?u=? ?gY=>.? W??S{?umg(w=7.>G?A>bE>FXnj\?k ?d )#?ef ܑ?J3>5q>?3p@<?SNi>̹`>ﭵ>S[࿂=Ϳa+?ty1T@ >lҙ>>h=?QbEƭP2RW¿.M>j@+?3$>O.>?fL羊>><6u?>Zv4?f?uR> wP?V>RH?6?=v_t]8>> ?=bվl?xDs@x[dUFʿB 'ѾW'qt?w o?H>g?\W0o?.>h<;>Y>6E?"wѾ?(?0;.>?r?Z.?;)>i? = &r?H?*RW>xn-=c??=t?]N> I?&H>?/<=_y?TR?(=o>~=X1?FH(?,??}?t?$>?dp²o/=Z@dC=?q?s?I3?`A?y? >HFM>9c>R?:h@ v?Ɍ?M?G"?vi>FT@> ?W`_?x? ~t@Id?@?cQfFD>>G@uU؅/??}?؇>b}7{@) %{=uK.J>8?nm?U0ft@5t?^?.K=Tk;?p`T>ܺ>=E?X`N?P8?Dž6?/B>[,???U>\t=h??2 ƾ[g?r?NB,q>y?1A>? ?ɼ?,O!q?IQ%?8,Zu ?G>1?fe?}?@J?97F*@y Az?_F>8?[cw?eſ?uʾ,,ӞHPO<>G@kv?==Y? GJN@aCH?=9@{n@>?<>f>K4>>TGA=ô @8,*dZ\Z>ϾE|? >[>%=X`Aս{mJ@ ѿb翔ς+l?[Waz?|>K%Ay_C@{?9=Yx {ҿ[Ԅ?V>T@s-@P_>1YO';俻H&h>i>1>Ms@1  1q?=ҿ xw?HlԿ(j2g? ?<@ P{m/ CK1Oo}<`kT???_@0>儿L> ?D>hTX9)> ?yϛv?וSУ?B?8?h1 >7y)>s?K>L}>?T:`>]?A ?K `߿XAnvF?5>؋>|G?\j7? w?|?ѿc=F>p?a??_j`č8Mn@Q?Wb?8jn?? ??{@Lb=> s?? ?^ֿs?Bk??ZT?UH>~q@ 7?W??owL߿_PM>K?1W!?y>=>tQ?k?i n?ŽLS?MlϾ?U>.܅?~tb?[gG>_Ҫ=nc55w-?Dr7>>?kbb_@X+* ?뢾Ԧ>dM??%>[\mɿ>( ԞA*_0U=1?yY5>8z>b~@>R5>y>>n8A&RRᖭ?h> ?'?Z N>w? ZA?w_?ȿ$:1{>K}"> >J߿'? Aggj??C>Cn>X0?f6}=TAD?8[}򿁍h ?L?*?^0?Anc.?}?6>WĖ?,DATRQ?2-A?;>?l?U>. ?Z?- ")?|:> > C?<쿂7ξ4A׀d@J?!>= &?|lżƸ?Bf?O%l>֡A'&?>Y?= b>xh?5cw4֣0A "?0?>ő?RaȂ]ƿ) ? dq6L=AȽz?fo?#ֻ$>>m,?;Ώ>rֽVI>a>/Ai,q?k?Uҽjau>Q=PQ=E ?AM:fS3_Aԗx??WFp>=5?Zȿ0 g=7=9NAϩ2Hi`Ap>R>ϣB?^0>u< >?ӿd>#!A*j?V!<6t>Ri=  UA>t>%?€Ay?+">L>̤ͼJ;\9?M>>;Bx T?C`>c >:b]b?>X@!I&ʽuBܖI?;??(TԿ>>?[ZxlPi~B/Th@FͿ lY&: &BGqlu?'bA,?H5B[yEdk>%}iO"]M}:>! iοfBl3GɿG[Y<-o #qmb,^-1(@Z5BwaDʿ`x^ ] 8Ii~B~HVZ%A>OI>񿄋o4M;BGtĂ6?+ H.?M>b28P=P%ϡ!nBy\NE@nA> ="V=͛ PN%} Bsz?HM̶A?9U?K$nĿLUgB_x5YD?auH?S(??A#W` BB3쿧|?g@GVsxr?|}?h*տ YAo@v@$@W RZ}=hZ?Wf{4nZAow@f@ٹJ@z:Bܸ#|FVڿ6S(Wƿe}1$7Կ餿Qw@ @>>QU龡Cs"ce< =Ox?.>^xB ?ſcG ?};?YS>}&?R7?$> "?1GB@Cze*?~^m?I?O6?>GTֿخ?WB)o2ɰ=&" @JgxXo?V> {I)>O?VB# ?n\@[Eֿz.?;?"X?.8,`B,"P=?@=AͿy@䄾R!T0?}l>kB^s?u?ҿ.xM@ ˿&/P5?a64>T;Bށ@?=\=?XX?&K>U?֭Bx??P-0?[{?3M=L;$<3su=0A>=?l>??K:B]:Uҷ8>mB)>FroH>H?'>@3X> L(=I>TA/n?&=B?d ?? 5`>>՟rӿs|?_A9AZz6?)[>UΧ>ÿ`? 2>o#x?+A 8_??98Q1 ?7P%?wu>k>q?vAZ>w>4ѿ[?G*>u>NU>B= >RBLK? q?q.Q_}E?t45h"=/^>ZBnw??6kMm?.f8>%8޾ ?KnCBb?| J4>NgX>Đ?#z>@2~BeP(@IQ9} 딿(deK:?!?mB*\|?@2esT#j>&l*?5>BR;@1mERoJ O0}o?.~CBe3?89㾥\'Q<9q>\X>ǹ=?`F|ÿBlU=>?&15EH 0FX;j(5QBqٿsh=G5>Uk LlLB|>)18#?z̾ j~@~Ѐ1k}BuK'l|D?W;L880 muTGSBHeT+=͈g >BTJf@DL࿉kBB;d뜛5=B/Ѿ`rB0 nEAb>0h?-?ZBk{ ̳$.ο8F?jӿ`z(罒6Q2<'BQ 5Q?RGf&fy!,5B<uĿ0'G?Fi7<ܾ*]'ѿ+h>B}Ϳ/IIX=?U61d>^ #$_Be9?w`^wZD W;>E/%6n BK?3c>鿲 Eg>zՓʷ3>R5B8B?;?(c>R;-J8ľQN?1OB,@ȿ0h@?u+^<`oᅡmk? $Ŀ*B)j?]@ Lp>N>uV'h?G}s>\B+?:1S @&M<4?MYw8߯g9P-DB??韱@_俙$W ῆ7~ zBM?J@ =7$!~p֨¿zпe3~"Q>ֿikhǭLy TBb5^y1{@?Gx$.nj$x64p]CB_u?Q5ςQb?IӖ +'(6*GgúBU[*QL)?B W?: .A[]Nt%B@?r%@s@7D?!{>>(*=Oe ʿB4@}'?D'R@#YTXm?bi%Cu?,cpmߺB3@?@pj9BP=job'?n9?0Fm6zB0@(?b@Y\bT^\?:~4?LYm^!B,)@p?D@J힎6ul?\K.>?a˲B"@? Q@ %Xb?rl>tbABA@-C@gTS Nb@k8OѢBA,u@_@"0zXOk?ajoPmBrA$@%@) NN 3>09j2dA?A,@!@/l*f! >r1ZcXw࿈AtKAE=@@MY;,b, 4 53ڿmG4MgaA@@z@14ab߿Ft3I>*f=+@NU@ؽ@e2?c2LZ ^* CwX˿nf$?8@[=@2?5'o?:阿$iB =>?_'@#B>,5=ޏ[ &ݿOy=0y_ɜB%_>0o?.ȲawV)}4<ؾd)B8ϋe"_羓ܿAA|u7x76$=!E?EB  @s?'k㵣7ֿ`E>:cX>.Ͼ8?B"!@H9r? ܒؾXtX?g<:?֕>=9B+n^?:Tz?a=jPT5U?U?i9P>迯ﰿ1Bʤ@ƒaa?6h?%IifȾwd>-B$6",@YN9q?<4? `5 l?<5=]?g½3?n,B!}9L@opc˱^( C"mڅe?H>jB*N(@B(6sJ ]?\c?UbA?yB-(F@6 ?2.{dC|?-C~9?!/ ?8B#bѢ@_1%%I?b,>Vr>>.௾m2>hB+:@6?}ۇ'7n+mkH޾o @p={\ vtG)xwwM$ۿCj`>sSBLl@O:gſšKF֋>aۿwϿ6|"PBUs?V@?4⿟4-+m*cQ"~BX }&??#N IͿO򵌿{p|BWd>?c={Lb/QX5'%,CB\iQd@T?a⿤'q|پ_ޟ<TsB^Hʖ@7;?йr? ˺8,owˤ&= UB\jKΒ@?e‘jQ35 /d>=+B[w??t\a&9g2H*7W$B[W??8(Np\>y= ;4?+BZcJ??NJΌp>=!s޽]*IudBXcM5?Š?U>`$Cp׼2NBTzi=U?@6'8 JI-;Yݸ1r BQo?S{>ucsLACANz߿ʿ !?BL(@{pq"M:f?i%@>>jB?f@R ˿xws(wF${A?ԿҒ S?6HCBR:>:ž?]9D[ĸx? >>!?ʢMlBR,Y@3mPr@ Z>4a@֨B>~WUcB>P-v^+G@'?:u?N4IQBEB,qMW2`ZU}=r q@)",K?G>+$+A唤?Ǯ?4ܿȦ @@Q@K'>D?%fE pA%?a &vvͮ@@FX@ZK@&rzP>HOkݾa!]Au{UE?.JKWi@Ok@%@>C޾?E^BDW~3F,>xv)@.Ҿ Ծu>7q=BxSYh=Z0:ɿ@YS +7ԴIi>I៾^BBh I>yg-ؼ@:vԺp"ǿ0>SBn A9U@ӫ@UmÿAxJ3 !@B}BKfMۿfg'?D;fmZfQfLB })a:}U$?TV S{A{_&p^BVJeۿ$0q?u.h=\n3`}BDsK[,f_ ?pmֿpT`F鿈;ѽBn`$u3пP?վҾi&ֿE{u{LgB2h?e}d>?T8J"꿦YcFBqٿJO=LMG?4l~rTb[vB=c忭a1PBz($۾J%Yɭ:P>R>xnq~WzlÎBuΔBk|ݽOٿ5n-<j~ar̶9*Bq/>>⿭r:jA>XH`®v uBks)?Tl?b+Ka>UWþ?8=7ɼBi@:W?}e c?6kd>>V>񏉾̿eBcwH@V?*׭&|&N? >?2/> SB__ @Kg?\ Ќ;t5.u>~>eG?7=ܭABW~x~@?H72=>8?3>?3>jIBI@1@?}/|[&1N8s?\Z{JB=/@?KxX% CHz,?-IJ?S?;G\B%$?mxv@b@.۞\aN? D\g??9A<8B-^[?@/@:alοԱvV16HP>"XB @N@ӀY#=^ҿ Omv{>9,"[>{B n@@*&t?K\?SҿWӥ>hA?@@@^.-8?-濦]ƿ]r> /DZ'?A?ח@#@Qݿt?h/>f >nxB0fA@h@U8c@zݤTq9? +gHN>4{uڿ)AR@]$]@f@e2X?ǠYka89?e? H=BG@@N@nď%)i?F5>^ Q? n B @e]@x@Cοj|>I)2ʸYohB?_g@@fT8$I>׾}Ͽѿ^k˿>rAQA%?V?̸<Z='͌ǿ"h΀P5j)5)AׁAA @{n@y>2 ֿD "ſ2r!ӿ ?A.(r@6@Z>?ع>a(F{Epk翈㾬A^W@vl@?҃>>ĿHР{rA&@?X{?&>>`bIVlh8ˢQA=I?0=;J>,>&>5?7Aa0 >?y*?x>1?o)^?g?[ >lU=zAc(.>r >xy?>=>t>?(x>>AA0g @=@?nc4%$*aR? yBÒ@hh>Dk?W?qɿMžIL6sBPgc@d>\?B#>H?W#5Z>z׾'kB'㰿C=@?!&+ lnb! Q0OxcpB@+?@f?ɇ~#CCn== ƿ\hBKc?z@J>M :+ :~TdBSc?*@8"?Wb:)[4+a=vX>鿌lBY[6>R@c>iy.%?k f>ce{{?R|BZ*UOBYH@kX$?0^lӾrBXr6?@gD߃^>#򿲄?$>%dBV o?4$@i{JU7<,t=C*t@ G#dBS?@dq>zM]"J NټCcBT H@@tGX?`mI {=~a%em &BP9@GZ@=?~rL,j$Mؿ>3LhN>FjZ:BL@??|,F9xʿ%? @:µ>I}qBI@,o~/?^:'Dzs=\ѿǿ))?(u?3)RBEA\?y*w :Z=dfϾU%><%^w>)BGrA' <ܹmXa>QVD*cпh?=8򾭞BN_@L-~ί>>^i?Y-*6ABU@°g {`=Py>iʿ+GZ=(>k򿤶5?SGBW׍@&ӿ0>&Q >Oÿ p\+Lu? ;s BZQY@E?[Ⱦi;SSs>>`C3cB^;@B!ؒ ?x{>4FH%=_^Bc@/fxP{E?>%OgῨ$DeBg1@=O>h =4$? >PL4Q>hBj@.x~?d .`XK?I?% i׶|ο&Bl}Q@ >6,!\?>r_ #a Bo@\PZаe;I??Aӿ+H&;pYbrBm@OX=Q/'=?]?*m`Z9 >7Bp@ [ڣm/Ȥ?Ah? ſN㖿_1FiRBr?tEݿ?ʢD? ])އ/.L~pS= J]>)Bs뺽n@`'D׿[??{r';dR=ɾ!3 Bq3>P.#?Ȑh?TaA}@rRgPBnDz?Dbv$ %Кn?E>ܒKb,K=+g@+kFBmg?~fc&##:OW?כ?J}i껽þ.̾BgI@P &ԚQ?3?Aj >J3X Beۗ@%P=|.9ܿ?f?>X>|p;BgX2?qUiYM_O:?#/?(悿=e+ kBh9?y%0Kdڭs?$t?J\Q٦μQ>|տ\ BeT[?w>?RY5: ??0ٷmݿH^Jj7BgL?CQEռ$ST?T>=Vj¤GwBd62?!Hlۓ,>W/ BaT8?h# n\HHS?q辸9BY,@J-- C??Z>r?E1!Bྗ lBS@tB/;̑/xdG1? ?L>䓿?>yf*BMv@䷿. C>A>s>zkuܿиqDBDK@B;A=O =/A?$">hؿKB8f@qy;T:߸Y9B-@@;s@V 뿴4>:wO?(;0=N?p=oRB!@?>Rz.O$;N>rBgl?^BС@T@,过1*EY4 =>S<ϣ>stNBB@쒝?m?{GDF*-= $FB @ [>T@ @iݿ=Nỿ6'?څAi@v}@4@߯>E+/=8nZF%'?/NA@1@2O?/?. QyÑ1>4VnDA;z?,aN@;w?jȿ*W> K5X>5PrA<$@.h? > DMk~ ?jxû>)փ?< vlA+\&@h?0??̿m?(0?]=9CAa]=?UD@"5jyV-Y?;a&?얡 A`7k?@k5Q P!(?Ͽ&?->׆AQp^T@tP??!оrO?u;!n??꡾ݪAm?y$->X@{O>os?ҹ?D3ֿ"_?tq?[I6uAs?H~@o?m >-T>mWj?zK?4l †AJh?:?ۯ@b-??Es֑>R9?(>,wmAE.?Y?6@7iu>=`VM>G>g#=rA7;N.??僿|>ӿ?#~`?c?¾E??;}>A%?H?n\?&>?F>s>?6-?Ȅε>sJ-?Y?p@H@-@l >/"[ʿFAT? @8-Z?QCn?2?Z>2GY*R^D~wkX@@=@w@~> ?5Ŀ >AV`>?SҾٱ` lqM=@Ԍ?@*??|.>=< ?4;;>WZt=ؚK@4?~.@Fi??ߪ?6?#5??#,?a/m_@\?A@@!Y?E[?g?js?[>t4[>M3 @}>#@z@0?o?=Q4@p[@x???OH?ӿ4'i?*a)#@tkDS@t?ƒN?<>`>?MȾJAtm?m?j`=Ow@fRd@[???"R=V=v?* ??j>=r>:0>?Uϑ>JK?+]@9W@^Y?b@E?Ҭ@??g?몾>)t9?5q{@0 ?Q?$?:.?:U?N?:m >v? C@?w?@ Ϣ>d>*>޽}<>$ၾ?+@1:?JS?ߖ?|?qjh== `>?︿C?B?#?r?? >??rU>Ȧ??vLH= @6r?$?@L8?O??i >묥=!?xs-@K.?@N?>"?>?s>~&$$v@пMd@|x|?ݍ??)?-?j;!8Z?9>?j@UM@P ?'?P:L?ׁ?>&=;?8?Y >B\+g? eh?0*?:?o>1? P<͕bJP>c?v?]Spocketsphinx-5prealpha/test/data/tidigits/dhd.2934z.raw0000664000175000017500000022600012504317076020160 00000000000000  # '057,36>07/3C@>1+0//4%-@30"3.+,16'==#""  #.*#($ #"! %.$ "*&#"15;)%/.00>+$$"-*1,07='-@10&4/27A<:<B;66L@@MbVFPS"DBCD0=Kd\]PHGA8CJ=4?ND@9:CCF4<5<9;7L9DXMTA<GMJMNOP\]QWYC@F6=$;FKLJGLGLLMLF:<Dgf^JDBCCISJ==I?@7ANHRIHHJTINLPEUUXVVNKDMGIFMFNf: ,OSRSSWUG7;E>9778D@>?=I@??5A=7,,9+03/4-'>PKA<525.'909G>D68>?1TW>MKN>:BOG=CBCBJOFEVXX5"')-'* !/*.-;C+%) #%!$    szivlSml#"5/-,@@2/&%('976253-;;';A7(7;,&55.4D''# !"(*&0&0+1)$1',,2,)1>8,;COAFG:<B:,&"-1+6.!+)447:6>;$*NFN8)<8EKNPMNS__SY_aPNegc]hmgdSV]P[iPNQVUZaPSUIJL9:GB#8N`KLQUHCO9<JF;BG49;ACR<8<??("/0192/ -!'35+=@B4"(2/C[@@CH@F8A8-.9,/1=%*.94?0:>==E@DI@>.4HN=M.?UEAXQPMI>9CGB5?8<24FA(6303-56E?;>=KMD=@47921/9=GK@38@;9):;'*#8&-2$%127"+((2>44+&%%((''$".?5))-3#*;*)90.!1+/-!1827H<3KI,.,/)( *"$7D 2=.(67:FKI600--:>J@%+! 2-.9;(#4 #-&&$,))92FH6:<?.8--9J!FV42L<EBKLKHB?L_VWJUa[CI^OIKPe^>KZ]O=T[BSSNIHMJB9;@>6'* ,;<22011692,45.21KH4A@/.22/94(CKA0#,3/5-& !)"-$4-4'.+$6! tk~z  !   **%&#&0*3 # #            *0.)'43#0G874.<3BD@8:ITMHJFSXWU- " .RKJTfPAQMOIHWS>LHBG=:B..-2. 0H628CJBOZXLMB?F@=::N:'ROPRO+51'9/9JHOPD5273,>=KR;NI634F@GW[BAER[agb`Ygne^`ldgijegQZe@[qkmibk`NWb]OLV]Vade_`RgnnM8KY\X[XbMD7BE7:86A=KQNYQD?B<11-"$+)6,-$#'"%  #  .2       ~|      '  &"*$/4.@>E@1=?;62!(('1:6&)://*&8//%')%#4$$*..,("$"&*)'/-%'#1./,# 2<52*"'"1!%% #'!&09;=/5,',01@C7>@DOF>748;33*-;3,,&!" 7%0?1,%$!#/"':28--;:4:9=8&;.(%1*'$$*)2408@E1)<D>;22@(  1)$+>DD=*#%&(%  )%)9VXV\QSU`_IDDB@:9 $-3./27>IDJV]ETVO#((1,%87-'())-;86=51>$8I4)58(06<<BC=<6=>643,$1&'+$&'BB9@@<9EC<12D>C4D==8DQWKAPdYR]WMJQV^VQVPJQVJA'5C@+.6<);;%?.26,))(-28406>E9/A<(26:8-/)%  %,* &$(;8/.1A!#:.'21=15;,(3E:09> :2'2>%,''& ($% $.*!# "(8#(3("%$7".&/"-     ~o   >&Y1G@\6Rpw<Xq:aBQ@ AKHd.JkEc"]'UfiK_I8V@dp@uC@Cm`n9[AuqTsavV[Kq5GR+|Y4%]p#<rH@RYv;$&+\3HmY9a| & ??^b+ UY'@Or-1 ^u,(4'>q0>E 4'z9~GP\&p<S[-w /LDOGF"# si -B~W] -268'n%X8aS @ T0'Nh=S LWVs7&P?:"xfZ-k@wv2CY4ynkW  F? {K4MWd^JI, *},mHrCK,TU]~PPt;)Z@w1 5k[Q7 !1}Y'/QeCkI{Cc+\&8_W`CepIUT"gc2'8=s+ <gM,c+z%^%XA7*Q]#/^[;nv;*IRn-/z&\t1^<B42Y"ux x:u,Ms8aw4`n-Lvm gftA>DeNO"[pWmoew%bw* CW1 zXW"PF z8x$ON$F]e^!k_zJ)Jn;c^-6![L Z?D-U;(>Iu ` sd &os\)K^) Oe2Kp)2\xp`NPq[6$/V <b( V! Qu c^< Mc[ V2 S  >  +G]C D P B W "uuu.B@zz){N $ + 2ZJ >  Dk5LD' 0 F  D G0 ! Q %S 12_dD8}yPr$ K =nm <R 1eLTIi} (VF[4 \ N %4e ;  p , 01I.S>8:bJjByIb W F L!@ 9N; rCW1 > = ] f $ (T!a%M w W ; -l3xLF${956  `, YJEAPo\KxYsuQ=p2C  ;mO D f ^ .J =Y/>~qu1wR2^ w<e  ?" _>^se ?|!t1I _d$ s| l8%}B.z=JVE_1 sqWZ LO[eFs~ @ 5" X -\ -Q.w fyh'# -EaQ7w% wRN3gK-BI L+ TV& c =Spu7,2@bYk R @ /-Q & : .i ">EovJB%z$Uc($lK & * d _ )E}K S%.{+^S[~V=::dD3I? 6Ksj O E )*s*>H17IK e \ _ >wfZx ]Dc4[[f8dt4_[gh@4x c  Zl D;~JI;>+G <c U/ A;g&/| /e04M=z#% u iH :]Uk1 yLY Y   v  8D^Ro V.#d%fR E^ CO F FL ; Gckd|q.'PRg pef /pr`,==50Pn@Khn>1S.W$  o & ih$,+LW[^L- :3^QZ3oK?S[NjZ /M&}hgz.S!Ho.~E{5gId? -0CkhMW .zjb3Y0  O  @ M <Uq6y7Ysf.WK/ie]U!Nl5}zO XtMPXh= J % M n 6 D 6FP>bYnF_ YZ: f2 ;}CUt$j,b;'gjw_ d ; - r wRL #Fh $Nol $s   V'.n/?FR0"9xHne   .W$   l H aE f%rZkq7EG[ 2 h u B W T*tFDW/5 V2y F &M  A0EMZ=NIHS6D0 \a tM, _) &.@v ":290',' #6;; !&( OE3 j  }Dg!1 9*#t8W{Z ~ B K!amGtCr ,  MM : , IEe xy_0!.I{E ueqzO!D~ 9 ? #)1v)[- fi$ C &]=* G"#Rlu RM #5Qu b?`O ؋ݵ3k/=,O @iD    !$W,7_yέ e  #| M! t*)%Q$Y4j KZ$pBdu5R)  !2{=/ ~y (X! y cVĂ5\;'i+JLda,0-<>^FH +7 u cH ZEdA9=0ڕFYx+-m>?x"Ko"# \f@` M,wʬm?Z+ 5   %SH $"-1"jyuަ܄>& ,,wY_rr G:ee+=899_B/ k' 2z΍yos4CN yr .OL!'/ K0r *_Wm(* Zw~t+|wގ><#/r9|0h!=:=2  2 sq9sD|ѧ6iip>:% wc gk}|Xj Ov=A]Y/!" 3T PH\ NyئڹmSBX#-47`& BH AEs c8bE yJP-8 ~.KB  8ff 9V\Sk?q3%DEڕ 1 B/:(z8) 7IJP m'׌۷8k-v p , XO AX"@w  YA z@6n~4 "ZI%N43bE,|-"%:;; ` G,fsD A "" y=(}T 'Y :J (p W SBJn[a0ٙ0>n/?/0Wqm"o\! CY#' "> "Vp<&C t $E %L< l1"h]OsOi'k'ߧANmD %93O53 5 ag6m, /f 9r~ &*LXB~l U%U\ & & {Zz. rd<nr oT8yeeKa9@~M.M5!4?Ro[ ] L e`dh`M^O * 9  j[/l wm6@Ceh% a j f & */b bX:w_ LhM  De~6 n3HU*P R3QX )SjV^2oۭx| r $30 R$-( &a 8Gio9  & 0yHEh ?. ?w=J=::4*{Bmh$rD) 7]Ah v) Z Ps?)b.UEXS%6` c  /2)ZJd/c=M#K*ecHqX5@ 7 5 > 5>  G ~ty7||=y4qo8 uSV9 n S 9 N Q V!+D@1\oT"5d3>9. z b  S " ,4+@.j3I,u PKm=,e"Mm~ Q#Ai1# o :  rC)iwv=ep<c9YZcc5I\E& D   ux n F ehRs(z9xL8#8e9'tC;1 G Z  Dy>`zK`1e4OYOkn *@'2, ? + / 2 LK%v;l"-t%`SI  H  q X +5 \[( m _?[LebbS:*QfL 4 3  @ 6rF=mFF_5f-U4J(af6l&},32+m] **Y1{ FHGEBF d uck+,8x }z(STp**i w8xEh L2s3fT~YvYn@9EI1rq[f!XU+Ae'nkHGTecEc*8 A>m <2o-o#"2UhM3 @-8^)gP{+ng~];Mc$omkM/ wH>&Qa^wcZ-+A5vma5% LLIxo$`bSxg{cJ+c>ox.AZ&dUU ~9:J xX+' $Y^;^G<=.F&!'f\rAJBS{POf%4_\6= 2twt P r`u*Ko{HFpKD]m%Yg95@O#$2:e0>X`{)28 "\]g\ V'7/S@m/Uw]V.`@4?9('6R}//uCd`]L|6},xr S6e'R +r.r<PI{9'9Al p>?& :n=Ww6O2/H>(^25D,=j "N. smtnU|Vf wei&dh:|nTeh+x/@Noq^V/{#-Q?Gr; 4*%JatKAAywhg5$tE'NE6n%}~p";>9eo G#4:m|:,ras?IBD4bG@ v:,Wfsfp,oK4{2|Ew Xlzi?& 5KF|KP-ebr#6~ fTeh[X>J_Z%ASK+v)g}9=;N>q T?]6I-pyTS >/Ct<>8=TkEt0m5sPFrW]}E(}Ng/$?k5*9}: wcPY7b[<wQH,<H-aR/W# V:7HL[:dNijc"3z,&ZeOc*P0elOrL{zROGF+qO\!`,K~;4vGG:U;_/\S:F W]qp(Cp\0  9 5u_xr65h'yq7Yj7K|Ci)H?QATJB2Z+pB*v\qI'^[x=.1N[7Q?W|F  X LN$rL aTJRL Fc5n{.>#ZA>VR&8/?eH4|ZL$Z-m 3 :_ + <H)ZUP 74{  :8 _X3vGo_@] vi.`}m1o( wdh g\<# 0r w&8>Rifo^)]S+(`2 v} pFu ' D p E*)?rF2JG4 NhLNM !Two?{+[i'  ? <I&}T\MBOc|vcf-] MSF M % y,3p =k 3)lq>=WsMi`G? RZ Xr&(Itd lztb .69?] v s  y n X x H @ &t mPL /!0Xceh[Ang1[t*@\b?c5u1Z! 7Q BpK">v5"gM"!2X|0]x/n ,  )  y \ g r_uDrY mLkk fyyF+c=1]g ]]q/a $e=^ \j -FbcnUs81>i f j  %D lVpp'phW& OL? ;w.3^bu|}4 C t o  y S>gBS[:JP8 *]sV <3 %(  }*Y R+tq`%28-dK=Fok  ?M. qz 'sVm{r u K  <<'ywh3pG)6Jg@f  QD<S K 8H, l2u|;2W3f:"MAp  f%~s~ T .u ` $ T1) fZPRaGhA<{uOYBE[@_J&  OJ uAFfu{LY%2  1C J a F bv Lp}MU/!m| o,wc{ Zne0 [ [3PQ  ^~3txi 3tN"Wrd h J  M Fg V  e S3RCqy0ijLRm6q`WS%Ps~   o  ^ 0 = G `R ]!R _ZZK;_gI md@PZnP05?qJ b : k EI HLK+3L"9igsTE #  o J vlU + +{shkF9$) 6 \ANk@t [BN h9vBfgp_!> T Ulq0 ? V5h8\y5G+*'*&y*@HY>||EDB5h8>Cy'bNC=_Ji c(kcU9 ~  ][9Rqfk?Z:D%<IVV :we(9[1q,j/JjuEx<_/IE PUC%m8<1uoe#^c;!e| hj'b/,fhZ,:*P:U% l5V, mI_A0CXT=%Jw=n4aH`v4c}j*| ,[;>|)\kId.3z\}s/)O%0p=rSxYpK5hKn}<)1*CEC(_WH(|6"}Kn&c#iT,FWfEe)7_ l z]q2{ .*w] vd[6~:sY+ h-gJ\zCwYQxNCx2#Ljk '[/&a7HI t$|zh=>o#*~}WgU{mTzr3C`SKCTxcFRZ[ Dfv&*j0TkS,}!Si_^xbOafO@ |`v@2U!:fmqagxF9?:lXG^k^y.-I8Pe\ny=_ r$2`OrHo[CZXP[2>8gEiIY~cqY8'~wr@]VawvL@vqVu0iH0,r*k3 )z\=)@9ZUsCO6IX\C -o9=/3c2_82dGu%qg.uT em;:u![Ah5f C/v8V %wRc)' Fa/^nJ", LTT{nu%^>jQH,  TMY#K&N\(U@y x* -X (R1|urH1!qcGQ!5;dM a:hY-KY8=~"G4vv#K`^gfix-HmkVI7>$)U$RR(wN;yobjXic&/ {X($E 0eG+QJr3v;g.AXJuWCecXY$e%"T'#1[2"| [ #g-Cl$YSj[:(%dye8tc Tz\bop2x<x?  ]16J%sVu`a`i H8 p=^p+ -C =S2Zexw-   2 V^>h>$ A X 9 e w`.Kc9XR]gvj'bUu "^%& %skb~MYq:T~ gJ 9$1I :~ G QBb5 !cZ'6? EG(vY0) X*!#"'q*G+&Ts \Z,;W%b `q L1]M)~5< &IVxH b <*@) &z; { 2 |^k61?$iAxts $ 3!&*w.22,K!U ZߪaR fSOY9 kh3 WTv  <Rxx } utfW} ` .) ;I6 eJޞۆ& 'P/-22L4`4 0%QdeRKCi0"3vm | !nvk5pSPZ.g!H \c W .  S2s  KjT2Uo$jZ vX7 9!U\O ۧREu" M%p/t31.~+E)$ YS IN*@ Q  n Y| N L3h& +,b8 } gUtu  dHEg>8kG4u1.j :(0l1-)&"2K{q=S;wegY,  Q3Z/ :)#*&O %  r ,o]>g >f` aE'L ~ WWD/E*VGBfLK*{ #B&/2N.I&.;UZAr>! U; 3#N!v W#Rb%{*P~ G ,FL iRJ`M(Oe & v ^LMd#S-l%Zp8( x#+.) )M =9j[|g-W mBE9El2be2@j= 1n|  "xGL$ K/H Q f S ! xJw'vzjs[-KSFUo- a?L%! %-^/(VjXe Zdxz]e<I C\g_?D2$93/ E_>ykY ~ 6 #0d; [ w _ sI&2 xQK\*'W  }AS%) '; 0q#o\ y3_ ^ d.OOb 2!S <Fx X &$bqz7=0% |  wIJFa6F  !)+L%u$mYTQ#<9L ;0 aLj R ^r5}a7!5& "p"!fF\65v? 3 i k>qN;~_)CB &,n*p! Y ]h4ߊQVW#mG) D   u Iy( s8nv L*!e!U] vFf(c j@0.5 4,lq{(<8 }%+_(! \.k zC2y* '= T)eB|? @zw W RKoo#&A*T({ t#lv8 htq7,$$qu UH rS '#f +Gg9,s D5cf + 4 A v+ _ 4 R   d Vy:'@CG>)(V`?G/B; r]1'( { \dE9 I1 KWx9z`)f*Co/ `  Uw{>+ R  ? *TO9{*L.mIP};X&ta' tId Z C. .2 #F" 84| lR\K)_.\0sgW2Q} r8i< h 3 V$  `SMkR+g3O! & 6g4\:Oi.*`Ae3uob.Ul 4&6*=)3QIJ*Ftg$I  X r i PsXiUxqEIodi@.-F) j .xG2T5q3!lP&pkl@/kq"]6=2B+{L ,8$nTAA.wV-Yn*-}K}?^`V-S @0uz qY9CHKp$dJ[5XddI;R?8UPcKsZ xU(3JW<-2A,=w2r-&2#>:tL>2^F.aI3qpD P- ;6C39- d{E 7 )<U QS]8nD A?D > V v Xf t !F N;GZ" 0{C_ fNS/evo-,9`gc .!kAvg CB{W ;0/LHcN < 9{7[F'yd}geA G$A  2 _3z<[-dZ br0 w+ / &K-,p tQZ`+bI9/qX AN:, "}GC!v3\ Lg<J 4yTZ!w h PK@X $ t; * O2/L@[H&eDS\D e+Tt60b2utJ ]Z x  / ;M3) l 7 Bm8 $gC E^bv>s, Bq Kwj$ iaag(M OFK3@/ ( Ph |/.6 z/pZ  s/e #{ajMG*cy\D :l5u @4XSEl=xKsEwK* . DTx$U:zH%q5kx3-~2|M^&OF\F=1A)q|5@g {8C wSfG+.XP_9#{! o&cwd[&pEh5|Q ?xEf1 u~'t|G)\U876n If;iK}ik #a*rO/C<q:l# f,4Pf X.&)/j|}D#.8N L M^B Jj|xvGA0&[jyJ!|3 ?J |U iz `  Z`W #Lja xT?Ks|GMX WWtk \coDcQ((NH*s' J&qZitz`o jW[>Hav! 0F 0 64+4wacr#I1`N[s DO`]x)y)g|)=Ce3"Gs+lT9(0/ d{EjrOy-OD(3] eD5UkB"o -$! :xO~VGnDK]qi9H V ; f : XT^ 2<alvV/y;z^&1D8RMIRo*M)+Vf ]79okY@ ?x ? { W#wjY'Z>u(=ghyV p !B8[ \*B0s}p k WHed4'Rb_RgYPjm<>E25xx {? X+ * IWun;/Y0-<; y(y  re8 C ,Vop:o+SQ"a]}c88$Nft"EfK3n d|t ^[Z  `Prg ]:,k:?Ce &Nh kuL+"vBlZ    h a y cc7p4F+iDqptCK) }  *kSe] t , n?2cuqM?"  E < kc\g>?(3z] C; I ~d 5ug(^1:c z9R8Z 0 # %L l# 82'EQAj" Q G-<'C' 'g\d R G| 2  88 F [H;vTk0=: nC]Kz'=>U b1Z5` #!+ f v *n ~$(d=l-@Apaw` z i E 4G&>?HT,<uG<9 ]w}_+zUK*_UY3%g c :v^5#H\[K6 sNw \{*Mu8mb & o) - kR;: PsM*q5RRrOqRAD~ > 3Fl <r265%C/IypO V t w &f @Sg/=aZB ^7_ j#Xx4Pxk* 54Gx}"Jm#STj}[dMx `?F vSgF1?Ll t  v  t a C`({{<Tm.G dmNq X Ez+6)"ahDs@xXdHt?ix{{TGY3Jyr\ e` R 4S b'Zf>xTu.?i  Pk N KEJC6.  z n D ) +T | ZRK ->.A xc"T? }{`Phc h\`  D   vo4{A9E 5 ,_IYq9,FX & 0 % {w>6$ypF}1_iv TO|6x%Cq2dq6C-t Gw dFhuZPEhRO$  23%Tggh5b*)^  Y J n RL/-S xe` DQJl x&/`g5@#xDm}?a[cL,5 =.-svV  K h ?'cCQeOf)(OIAxF " > h 5{vU!#fm1 <8h p2Y{lRMaWGhzL + & F-{D&Vm"#FfbLA#3 }I>f}IUHT AtrX6m|Mas @m?8=jUe PXYcG.8>/Bc"p 65W ~jKDb X  c-m&4y  @ l@2  ke8UgJj2aHfmt`ol8 ZNK W>} c|S^j/^  S  4i SB    . @ ?7DX1"##Be8=6WEe M/0fK.ba39_HgWHG :o (Roq"'E _ uyFd;Eum. # 0 3WlPAMO 3 5&P#(PBnNaHS!#j}$dfUw' DSzP`b+  ]]4EL)T O , d'R[J+VapgY1 $u_' Z N 5Sh<zV=y{8_9t-t `$ XL#p.j%e Y  `C8 A"siU IR{ J w7k]p>dt}\DUt0A2W O 6 Q # , C4BG(r_~xG7xxV,Qg":{G/ZR'"++H{aE Wz*GQjZ i  : |({}&}#{'&x$S.Vey;sq$ >  sSfy%8)*QpBQ~ b ?is[)0hRt"I*Fd%6T=1)E9Yv = wnR70Ro.@6Ef\mm@_`nVk  1 F ICy.hGG/k_1dDY~9y{&;SDtkK&@FX$$ ) #`U 0 Po]}gOuy!w< +^3" fw m )I4;3N8\ yhS3X6h9xw]8!?v89mN-4$0 =55 3^d4"\$ ^6V,@ ?1+]ZL"!qN ?<Q z : =33e,Ba}D~yQ1=4HO,8)ad rKF^$IMp+  S(v_X#Rv0 Q}m!pRVi$|5'{UScIK3GN(/LP [A$V#\"lg8VC*"M)2 )N rm@.P]!R y +m&jF QL(!pv(DxRZvZf lu@pWv%O!Bl2yH& C4 jAXP):r^E?k&L;S0!|6Z( fCfk*C6nW(-pZN"uIJ8%/lR]vIW-ql:-\KZCUG>IoX|1uA|:,(mOWre1Ezw7mVuR{Xm)/q u-]FOR_A=M q\>+H+[)?Wn850?zpg_f?rF$!&|@! * (tn%:]2=jXa F$ ]T]\ mP{H1Bld:&mfg88lCwN"&D!>^}/gker`oC.j 2y"=1eJDB T>) J4Lr_*i9gUq2N Za2.$"VXz6ZZO&M j(MP)*}~UFQR YXt~}H TfVf@CaBmr}nCn(^[uCF<!.O3z2V4g}nY}/h'sPspf:?d_`AC+!HOTL5538I+Xx}-)r?(yG\W -50+5\3Afu?N~'v~cm9rLK90-^8,5BUyN&ONH{ MyM~Fw\qqE  U0q<R4G?N];4[')=|yCF__GJTTpbdidGIPo(z7" O:?`+u`j~}c?pSB=8Xf'0kQQIov2qflC~rf-7'5829;EzOZ5#$94e2[E[z=]mR1,DI\Bj60>>uqjN.;E[|X!"hOtJRZW5]_ &49ZA y(]{Or:/`ES,-S~/4>B\ZB,/]fF (-4B9G=" .g~gPo5!P9ojH7x=DGfmbN) /RTzpw}xwXMMotz_<BF>LLE9FFapoNHq t22:1#6KqvgVheRRQQ7GY<,{ @ofP:@I88.- 5CD8;X[J<-# 4ORH=?@,youtlcHh~u{Xtq}{nlkX[piynf_lZTdmp}ssmql{~yg[SV=/! Z`C4`wztnhaqkskfifoiddW?:IK5' D2Naqvp_Uakws}swfkjkoe[_fV.0AOjeR9,-vm}|qppytrudkm_krxokk{{yYprlqwohgfohovu}qqyot}xqVE@>*#AXz{|ygpg`eabceXXhoesgdQa`vrm !06GQFRYN=>/12,"   (5'1/(  5, "        w     !  (9!,),10+:RVQRBLHP;$FBPE><8! -.;<A;?>>;4>D>42:4%.&))&!%%$'$-116E@ (8:3;;($"#!&"%*7;BJ>IK>OS>83=?<99AK\_ZdZ`RHLIOR[\VNusj\nYNMD8@>Md;AFJ@-D304%<KLOJYXf\]`ekrz{}qow|kmrpvw}i]|mrX[PTbA1."0pvtosW}mv]ibveUYDMHP{}wprxgg~npjjhZiga^]qsf8M9 X[U`Z[PWE?@<JKQYXCGMQUP>?I><BB>5:=6?HXTENXGEDTHGNF.%*9+$5,3+"$9B5+$  +2;,#)2(  #% # #" # %% !#      +"}  "# (!! )*#/+15.BHAA>:=((FH9;1<2>?=B?F98A>EID7;1+3DELSD7@2,(3+:+ 0((,??72+!05/18??:3;;BTOI;8;??B;0BLFF5>1-83(!""+>I7:L<7:2,3)41&*(;83C+*&& %/4B;2630:?2@BL>7LC=/7PA2:+273A(  % 3!%&36(FIAD56/+@DB:32," '#)23=:F>D;-*151?:EMHVdfYVVPN#2FDX[OgA +)5' TMQLRT[ZW`g^dXd[SJSZdgis]_g`NTmibf^a{lmaM :>C=KLUN>C=C?PD<35>C46- #*%1:+#*,4-3&)34>2>=<924134,-7,&" *9365=A:@9=G=5 888FLIQI<HLLB=8@@LC57()5.03-1/772!18(,-8"7C<+(&*$#"!    -!$             %%,%!,$%!73'5B3=:0;379@)/B9H3*26IWB%-!/$$  ! $'$"*.#+" 6A?6?J2.;3=;;OZF@=LVP$E')ZTRFFDUW\PMNNKUVE?:@=2731?FANEJF5:=M@=3::A[J;OOHJH[P6;+ ,&6.+/)%# ( ! 255*,6$..#)&36-$.&.7'"! #"*7'((&&/477J:NCS7=F>JH9/(,/% 59184E65C:IL?2KOKKPM^ga`RPPTEJNQ[QXlkPRLU<7[@AUMO5.>D4+5%+?7#/8DC=5:66.2+'+)93:8)B?2,7EJ>KQTNNHJ/O'YKbb^d]LDESP[WWNORh^ORQP=D]P5>@DEIA;%4489:3=;6-+ '64,.5H>7E;67803,59(0/&%*      n{zzxzxwzQ^Rv~~g~_hTlg   !!(&0&  "%"#,      %$    (!%($$*" !)#%53:/18+0 0% $$   $#%   $      " '  % &)/!>B:688,&*2(1*(+'21-&7*%"+##&,  &$,%&))"""+(,%              !#             !  "%#"%1*&(,)5+++%#(#(".'-"$*%""#-       ,'  23-.4558-,<,AJE=130)'":E6D:+5)*-4-&*"  '+-$#-//,+!#'++&"1A3+-12.&,(%('&*,0"/=F>*<I%25.9BGPOC>B69EBLNFKALORIWI% @CVOZTNNHUL>+>8F3039,'-8&AB2'+*89" +#*#+&20 &!# )+:2+&!+2-793;@6:>LVOBEEK@JQNJRLI6B=MMGCDVPUI;EPHCKD<.4J99<655',3*?RM>*#>>/3C<CRUX``VXHEOF@TPDHAbebkkdWUdbRA:K?1BA68>30IBH@+/;2* *61/%1,I>B;;D79>?6<G!97GE11;64,.&,("(05")08+"28$!,?*($#! :1&#,239CHJAIJ<(>D%740!.*)(% %"$(*% "(445%JJ:I>>A3AWEE=/68HOJ>/7..'&8'%:-(.:1& #(#'*$'(6.'15 +-&6@7:>/14-'*(#'"#-842($$#41%0*366+8C?7773(;6#2=-00A3'935/"<1*.3(, ##,2 #*+0)%*-9,( "#*88().11-,#"',EJ41)6TQE<D;AC988-;-=MH;ALB +FAQPNNZcXJEJCCD<>B5$;.3"0>J@KM3'SFHKF?>EC63::.0# =)41:<;;34%+,*"&& %!$#! #"!!,E3$!*! #$)$$'  }yxvw{~      )!$22'+,. 9:/->9=HCGGQN0+1OOKOIELRNI9<HLKE@?2=72=<:.,)7/-'5C?;@C>2-87.3 8)>N> 784;/.84=<.&!**' ',,0-'32(0/$((, FM?,"5<2'*' ! 0*$'&20#"&)(02,* &%&0*458'      "." "&!         %#, ""3+ #   $'   %$  !        $$!+&':>G;8B?3-51:?19?DSRG<@W@>5=A>H:<@5<6HM878?LJECH2MGKGGNC>6:@O0!eaB28GKG6/-6@;1%$"+=2/6!$'845$-"## &"%*,)#-=4#%(216)')0'6D8BB>J@A;=:8G::41DC>4$,"#( %& $1%%.$%02'              !                    "(        ( "+# &      # !   !       # -- &-.6,-%     %   !', )  #'*)*   )"3"'#( ' '&/"2  "     &% +*%++",!#))'%&"4(C>8*/3/**  $%  '$.:(&)%"%$,"+#/+4"69B8C?12%4"#%)%#% "!  .6"      %,'$" 1('8968=/'/.-E<"=+&3,23'@H<E<4JK?8LOE5/<G3<BHF349-$&)+)+%)$#'1)#)$     ##    ,     !#&"' $   #-,- 0!"2+&!,(/"*%$    $$         & # ',$" )  30%%!$   !>*21;<B9=TLG*8+$$#372&)!(&,&'(3.2,)08=8)+85)9E0+39=6?G3!-/(047<3.-."6C)1>?E #$05F>HA4<?A><S!0U;B8=9;?G>NTMUXS]XKFKSP]QY]XNUP_pgkjfgkfhc\YPOU_eTOa}lcaV?B?IKKKQ\eNOXQVKBE21  +62<BB>25?4887A=DH<;<HHDM`\PZQFO;HRQYVQU\K8 DS>@ABNYTXLRTS]RWb^U_jkh[\mk_fRMJROWWaatpxwz~yifTXbT\PMXNWPGBM38>6FDM0%'247&"+*IM_ssjYgwc_qgZ_ed`L^gTekT\QR\_\njja^d`ZTY%TP=`WW[bc_Y[[\^PX]di^^]QJRcUDZdohY\ke^bhlmy{vlkqiVKVGA@MS;+#5ZbPG\NSOAA  *$P=J\RHCIHB@?AAHHB<5DK8/:211%# $!(" " #,.1,4/'!$- !(&$# #'(,$ %  $'4 !#   xxo  '*%* ) !% $*0.   0#%,-@.$6/6270+29=F;:.-;D=;BA@FY_VI=;<:>@N)1?GRB;86:4#7'83@JDB2Q=nRLJ3uq#fV3i g7jU")S9K2<4.7&;)L?:: #.4"7=+D .&% %*  $(  )"'  , ! /#1&'1$,2"%"        .               #    %+' &'!.(* $      %     %+&)"!%!.          & "  ""+! #& }~w|pocketsphinx-5prealpha/test/data/tidigits/woman.ak.334a.mfc0000664000175000017500000002626412504317076021001 00000000000000 ,#tO?0]N?(п6N#??^0>;>ߓX=NsbP?{?%C?H;r?8W?u%j? @l>=W)I^>S$?0Wv>?O~>o>?l?">?E`=uA쓾{?$i@>ml?#,(?F?&Ӧ?4.?T?2>??>7????)?2 s^?rM?1V>|?Al?z]l?ɰ>?6>︂>U>T?ks?+pQ?s=qC?j?l=F?VC>?>/ ?CI?ki>ح?.X\c? ?⋝>]> $3O??eU 2+>>FYߎ&?%>&BC 궿,N>M' >T%>׀>=?t"?_O>[>x??q> ?B׭?L?ξ>^ǒ?6_u`M@ 2>=?G>>??%"> J>ET ?1 IZ@f/CѾ?i/ >Z ?_>:b> >Y>.u?@?z}Ͽ?.=r>>]n#/? W4?~?i)>K:>yX3f;?3>1? y ?+<=!B7@?y6Y> >~{?>i.?D;`^j`E??Q4=p?j?+-?`?7N?Φ>UߺS>/>?p?3?+??.!?JEuK?|Ҿs?>sԾhq%? -??2=V? Q@aZ>^r>d>̹> R1=د?gu<|>N̓? W?????wJttL??o?:?=j>&?,?J??lƞ>>u?R>do?V?q>1F,7?Z?Tǟ翔;?H?R9㉔>+P?l?*@??5b>}@a=8?2v>S_??vm?Hp>낾NĿv? a??W?D?)'?yf?j?һ?B?,:?7EB? \o?%j?=?վ"?t?˓/Ab=9G>߾jD>ks@d#R5>;5?ާ羯>$>ɽ >?yx?cT>}?1A&S8Y s@ik?K.m?_=;:%B?)@M?@H ?Q+??9e? ؍?"=*Qz?i=q ?<:?M8?M?&|žr/? Zc@ z?s?p?Cd? ??]tGC<2b (E@6@8?"c"~U-n>;>AS꫿Dþc? ???ᾣ;*.P_#/>}ry?x&>Ț@ @Q%?֟? Q{̩OEܿ cPbZ>uU@o"4fc@L?<\>)|@l26)>?F^T>8D>Qkm?*phM@?=#n?43x%c?! ;R 3jپ)=T?Hƨ?DY\T? >*?>>Hp>,I?aP??[>Zt"?3?ؔ?+>b~0{E=N\?I>HLõ?O>D-s>^>$?Ϥ>E>]w?t=JWU?>>*?x?>}{?7< ן?`?>1z>e1:> `?$?2c?+=? ?lW>,>Dh=N(?98B ?"z>=AF>ⶳ=㬾֫=r>]o?K >@-!z`@Va,?"n7>qA>P>zC|B?k?s=.f>kd>R?Z>5?%>$>i@"p•>mm>u??>8/r>?ՠ>E]>mA|M9'G-9D_>KQmZ->ʽƐBjie?;+a5> dNCwS@z=3!AA63JUֿ>m8v{?E=J]? ?4g4Qb1A.&?,O~=Dݾ?^pS>|Bs=\s>4nw-s䙿I쬿eʿ>B5Vv4t?I7||ҾEx?Ao.pRyB5BYވ??Kz,a3lrO@B?=%ӿ*?D> 6[g}sB@|~@pּ?"3Dܿ$^ͿAf`JhVBT~@\9Q?`AF%/`$=ƿ`"<4ݿ7 B^4@a ?-*8J-⽓X tf>LtgȾdBd2 @R?X<8c6b7'2BmR@C!ߋ>bl+K9o>#|쾣2]s`Bpp@7?Hy_<)ybBtT@bk=g Q>(s5ƾqnԾ<+CByr?hvr >j|># H>$uz|<]Bz`?.nTmpV8>ܮ|n ? BzfX%AX׭7kn̿ZkbBſ/(B{Z ?=>NT%1!%Mp$zW:By=~>bbr7#=$x)+`ҿUBug ?j /0^\Uʾ.U^:4V꿲Bp-څ?. ^Lcݿң'Bm^@+%> 5ޞοCBh,p.@jps'!=?^"׿ 0$xBBf@|@/!q3w\L/.+2dBdDb@bߋO tD߿<&@}5ƿZBa X@o=L0:rv[& _qB];p@aP |''ob,ȿW.ƿlJ2BV lN@>ذWɿ-ſQf mʿBIv>Q@#?w3"OI,:뽿ͯMۻf BB3J@Q@ ?2C;{+X"vB# 0B0@g @6?+dM]%ggʿ?BFBA1 f _0鋿sῨK 5l>dA6? >b>A|Q?⃿L[>oA+ A>6a[?[kҾV,>$E6m{M?wAv]i E|?j9n@cز=v`=T*>Q :?ҖB#A۾Oe?*ƾ봅?ws?־;ֻ轮=(p>R??pBT?)??4?%K??I_'=m ҿ>BB [MT@|???:d?wL>;~-|,>L?0qB@/k%V )/?+Z8¼?s3Ha'HP?AԾB2d=ߒ|6GTӾȱ>' IL;̿4ZBK?F?4W]kH_JJQT '%áB\?|,=˾MHݐsv\2,;B?q?_%??J^ǻwD>ʾսτj!lJKB?!5b?x?LBU?T?$_?Hj9JZ|Nd K !ۿD7Bd@ g??m> ƿI`п~jBBh5@K_j>.De)u>ͯ r- tBnm @*׀3ſྵŭ?H_Q>񞿋[A-ῄBr@ P3ͦ[Dy>$= 1ɑҿBr?eb ޿+ 5DsE~tQ S5DBt?}>Ⱦ(עjYZvtLjBt>FR=ڹ _>+ˎie E:b[BrSHX8>/zF>&|,VPAEMܿ`vBqWu>?DyC?/jf>ING`2i?7*ڿZzS}Ω~Çrv N }5FSBeuk@2 ˿^<lG&o  #K"VBcIyL@v0HHHϿu=8@ڿ&N0޿{B^)@xP_S},`(g;-Na¿BYʃ@j['Y"l4ldpfAտ3 A=BTI@CCRSPֿ/5KzBN@:@7=$#U3.7n'd %S9A= mW5B4Q>a@"?m^8%kI0N#¥4B B?en@>@EifH #TO80ȿB eg@P@u6vBS=snQҿȀ@O6B!q;??6T@ӽlOξ)Un\r4?wWG!fB L@ #@pX==q% ?- ~[A¿ 꾪Ւ%B )@>¿:gA ?[>uVPwB pDž?҉ <*0h?sX?ͫԾme$AEIԮ? >)8ג^BO\? ,T7gh>ǔTA \B? ?L"d翫T7>bH hۿ6O0A ()2?<{" Iy*e?Yf;7DCAݗەˠ?$>jI;-{ojFc>Q>ƅ>1AG> >Ǿ,#n;)-Me9j͠A 8 iſ#j\IC<`!A6 d>?;??|{տM1|  `ޜAOHd3 >K`C־a:>tAvK=@?iPV%IrľWgJ:_? >1oA0t>?W?O)k~_WP >Y>3?D? B.oPƾ鍾I#,󆿊[=߿ οt>_s1WԿܾڿ >QD%B^)@q?J߿'w/>־?U"hiB\@U/ǟ%?V!7H'?>\?ɿBWF@Ӿpܦw%(? s>(>?BSnA?6?w6Gu?2?e?}BK@?N;>|!|$iފ8D*=.`u?IBFXA ?虸,B><ؾ.6K!琾ER?NޙBCDA#@-b3G>ItJdMIh`F~?aힿ/fBAv#A[@"rE> Gӣȿ!>v>XB?bA a@4 ہ.$3Hޮ1 :1= s.B?bA\i@=KL'v=7H¿ξ#5z=?>+H)B=Aƨ@:7[0}eVnȿ7ɗ ;1B<OA @5Ods(PW\\aUg P\ZxB!AR@YqxTξn's󬕾&/*p>,%} B@A@- H .4CmBYBBEB'A!@^GoɿAnо^1>gο`BLA?D;|?7M\>r$I>K?dgBRM6@YŷG #!1>b?PmւTBY@d3c?tH :>?єBa@F0`/7?mDCD>?' W?j׿BcҊ@Z63}B>lr|K6|y=ŌK?Q #Be@UyHT >OcH??S+ ?^CBf@vcR(~/@%J?;dPIMBm'@Sd[pz%#?[9j Bpi@_; 򿸋ɿ􁾰gƿ?%@h! QKBq@]@#qmʿVm>Oſf?bV$n촾'Brh@JǭXgf*>*d?#&wǾž.qBq@ :v>al^ݾlz$I7 9`ܿ&E$Bo?Hex?4BU><&3 "-f%#Ŀ UBlu=?= \<-[c>Tdn~!+8"C@֜Bku.@2Q|>Nr?yr?9o0yϿD#ξn%Be$q@* > > DS9r߿CXB`@@cݽ>?@r>Կ} :3;BS$@V.Ǣ6\ ?sDȊ NM!]3BG@d"M m?MQ}B.B@=rB$?)ƿ.XlX(ߤ?Qn>/B$ @UAe?ui52^Hs+2p-νyAYƜB@:'D@:=zyO'Z4I?ziBS@3@'Gys}mx/ <_˰+A|B (@\%@?ĻWWH*~I+ BS?Ѱ@A$?is[ꏽt>x<>S A*?>Zo@.>tssF.M?(!OHVA8/{@kV= =߆f'_j9 ^sE>Q UfA۱!8@H/=KDA|y [D&) j=(A ڼ@@?4?h?NNG?B߿D>w? iA.@??lq??r?_'riWAQ,>xIA>F#?R?ÝTr [zJ1*?kAm?n?TOw?};vc(Q!>ؿB6 Acq @ b?DI?4㿾 Dݝ̇KU>ya>cAhCwdp?!A?45>KP>;A>?ȋqr@9P<ёF=ʔ벾3 A;MWB@#o>H8??`{=-Da.\>j2A{&>mKg@ 8!?c@=Psտq{>8-U\AV>>{<>TA9f ?+:@@ae ň?A?d?j@?B;}>VɊA"\?z@ @D?aɿ3n0?>?Է>p&)pEl`¾IA)?Z@@͓?Lbg?F`?:O,2?%_>dH<!A!@#@,@?z='=)?>C2/!>XoA ,?_I@ @Ki?›=O?gF?N~l>g>sA*? @ ?1?#?mqrZ>=ws Sn@"X?mI@}WI@y3ܷ+?]V>b!@i?z@g-@@D?I?w>vJ=ܪ> T?>0>>S@?qs@9t@/>T$=:A>w\>NTW;57\Ǯs?&>TƗ @C@ @@&??wZQ?>> ^I@f-֭@2b@ % B8<>Х?F*kCN>$s8@b'?'@?]??x+L>w? >-@y@c@D@W?J?}H??"=@P=uH@ =?v@e۬?H?S?с?\b>8`4>$^1o@>*~@*@_??/0 ?V=abǂ=v?? @~P@h)?@V@7T?H?;R??w)> ?Do@J?4??Zk>b?I?j?"OO>g>-O@ZGLE@ '?±>ϘX>S?(?>%l>ƾ龆K>@tu_}@S??o?Ĉ>yO?>?7=qxp9;@1@@!E@?$ ?_T>gOp5?I%d>T4@Hk@'ud@@?Ks< #Vw??eJZ@ȟW?n=]?%AE X>wѝFu$R>}-epocketsphinx-5prealpha/test/data/tidigits/man.ah.588zza.mfc0000664000175000017500000002652012504317076021022 00000000000000 S@ d?qm?{]U?8+Q N0Ϳq>`@ƿ6u<7?:F>C?5?Gu%$c·mD@O#?G2?hu??W?) 2>5ʾ@`PE?Bտ?!y:!?̃?WP̾#@=>@<\"?SZʿ=@Z?{?q~>Z?J>P?+?bDM9u>?i?+?eO>bJ@[#5?К꽔Ȋs!>;?ta=VP0?vھV>H@Y|>ؿ0>Z%|8~G?">fX?AR>iɼ@OsC@>?>G6?z>?px?e/ ޯ?%QL̽#@t#jx>J>J>m@ L<#R??A4Tq<@'>>k<mȾPK>F>)`+># >d߽c 9._@~Dj?JOI,\#`=D2l\?>3P軽|7sj?4>C=gl?'=>=8 |@bYǿ-݌8l41K>p+?r?f>Wv?8>7z;E@0E=D>>f^;>-辎Q>-P>a? |<>.3#@f?aH??h¾!=?T?>&d|?W @Q:?~[?ygYpҶ?ĨQ?grH?ֹc> *=? L>+?mid?tH?Q==>A@O?C?9>.>7&?ő?Z}z>FT6>{>P@oY8?? z g^ֿh>-@IL?dh?;z@|;?:?i>ƿ4p?!@1iV=:P>\)<@o >?hpԾ>t&>z>᳾׸>)@Vtee>m̿׬I#k?,R5>?]Ab00Q%?_?п`(U3(?sgK? ۃ>=I A;x%jw+?>ޣ@̱N>]A8ܿ{E?Uh\ӮcJ>AٿY%пUz/׽˔ ^?>q>Ծ狾Q-ZB =OV>kT{?ƾW?@M?A=w>tB@# ?t>Ś=-fs?b>=|BB @zK8; I $KS?'Ok>\??F{އBN@j=?jUy?Q?(]?,QQ3 ?v? =Sq\]ABV@o TEf?%ֿd?<῅*?d>cWvOI/BTk@pgx7+;? XBh?YnK?.4C=dJBRM@v_=k~?'|f@d?f+X%?=;_%>BS@R6!'R? 7@?BT@0#7 [н?J[yh?AbN?iOy ? BWI@L@=1?ѿM?FɾӁ~?虾刔k?'`zBYF?#t??/6?!?!WB[?ܿǿPq??ۿp??}>E?jih?/Be=PSjeDtOs@'>՜??JBaw?+Xi:%?eٮփ?m$B_e?l%X Ϳ ?@>_?ERE?6PB]C?"@տ=¿z#?pJ&yI@ ߩ? ?aɀ?p_BV#? {:,M@??ufL $g?(cBQd@'5#=S}}?2>ZQ&`L?t3>;0?@n>Q?RLKB5C@<ֿ~? ?NB2k>0;Ο?l??I1p?0B$@P ?z?|]`{?E|?bv>B]@-[<8?7.? QV>f?AmK =b B$@>>j?Cl?F>)a;MQ?%1>?a|ra{=PJB @,>ڸ?O?o˿kZ?+?f*>AմB*@sR>p?*V?@˩ e!=^n>>_ul>)B7@RK? !=^h_t>9#>ǣ1?V=x&F>BA;@+^(?Mn ^m ??+Q>&>?2>rnBJ{?*>?Y_N"p}?},?8 {>GZ=Sɽ>.BK.]?@M>?]/:?]>?>B>>c>BBLn?^){,?m\D\R@ ->u>+>?2?8"^BL^?\Ҿ9? suK3u'@ ?>s&>t?7"S?NUоj\BS= HQ, >~? 3?FKɽBP >n;1>=?M yBK?US>@#^LITW?Ӿz>? c? BK? Nn?M@6S`TNF(?EBN.?"?$ ?ZBK!=R?k@G`U=!8?kp???Fz?6XTBMhJ?n@cNXc"iY4-?%?yIr?"j#?#BC9>QT?%@>~n.g G?ב|??>?aDqB?>c?[@>%`?qjN?KG>x?AT]އB9O> ?׺@MY_0e[?z?e*>2e?.W/PB0+?K?%[@>nּk@?e!x?p>=V8?'FBu?*H?1@nC.la?6>7=>0LA㩰@}@}AG]#c>0ƾy(A<@@Rn@ώ̿e;"D>0w2=P>->^MA@@=@ٿف)񵿷п`*.Af>^<=|Aҙe@@t)@خ|D^gVB @gmS@O6@'ِHX[ !?xE&<[>sB)1@?@?ZHB>ެ=W?z oB9B+?O?[@:mtj?k?Xal?ooᾜB?Zw?8l?;@h\&?qR?=d?MɾBCja?@},Q ;!?fF?:Y6?N ]!BA*x@"@}3z|w7m>n?D*9?>?_bXBA۾`b@K'@dʎlbC0NP?->:I?z ? ?CQ'hBB$@A@_XLG6?Bj?^w>ܷ?]inBCw쾕?@:@^]DnX{(?h?>Օ?L¿BF^@ @xN%O`?vE ?>qr?lBDFѿS@\?@~LdIM?]?0=?/ pBD{z@,|@bCTi~Wݿ!?7п?n>-[|?! ynBF{zG@w9@7:L,X\?x p?p? C@BFiĿ7-@/_\@6HU5>>柿b?н?BEE:n@W@`5d聿gc>p"?a~>BC+@j@.7^x}=C#@:?uxl8>?=B>ếs@5@AC}(>1J?>>#=B8꿛<@@<=7SCp=O?X/>*=/B.԰(@N@Oy?%===eEyB [=L@@m@BC? %|>e=>A02@@c'@ܾi˿y^=N}=) ?8A*@A@K?uTH seHH"تtdĿ(A8@LI@@@>^g%oǿRnlW1Ҿ A2?wW@߽@1\@,Xi)>ȟ4?=ğľ> |e@o?@j@hv@> r>^O?6٫4W&4;;}3Z1@">K @|w@AF?x=>?Q̽ԩ>Z/+*;-@p.k@@ ?˛?d?7?Bc>?De[vJ?$ @ V@ce?H(?v?Yn8>+>7>Y>-iϽ\? @Q2@p>? ? Z>7t(=>?!43ki@ng}]@ =IeC?h?5 >޻=99>jK=!=oA7NB7ٿ6PȄž}$YMۢSA>رI>Uj(i`=AX%!Tf?)?|Szr8?F?ߢ>I>V?'LA+߉@&X?rn>}>䁤?`>?ΡM?E0xAY@̦3?@"?,Ycm?>?f>y>w)&A/@@,@pE?I8?===nY<𾾘umA@@g@r$I?l.!a?>j>=FɄʿ\PAԔru9A A@"@ =@Cb?x{=5^4ȚA B % GAe@Luc>|s<:h=˯? XY&B [@|@{V܃I7C"pV=!<{ >ZfBB*E@@ZmG.?0V]ο?g!==]pB)h]`@]@C$AݿدI9>gIU?hU#>B1D>Sz@R@#0R f: kgI?f>4AB5Q?Ÿ@ @1ֿ|>p۾6?T5{>3B:W?a?{@(&ӿ4>Z"YK?v3BBl @=@Y~ (?(p=掾|g?:BBR@:hqv@26=B?>o17B?O (BCnO@X#-@"*>LBP1 l?3z>S4lH)?쐿wBBY@t }?s? 󁿵b?ʀ>nྍ߾?S:'BA@q? ? _BР?E{?!kIM?%BB@=6?09?'S??7u`?GBB8@7XE@?]?*]ڿ"Á ? >tF=#8?7DZ BB@*Rr?lB>s῭O6?>>P>Ȕྴ?:BB @s@=#C9?ec3g?b=ZՉ?.QvtBC4 @ox@ Q˿v?5qN?|:?#Cf]ZBCRa@Mc;n@|6B>i98?Nj`>qI(BC'@s@&s@ amٳ2]?V*C>ߧ@"BDK@j1?stV}愿$}@+˝>S7`XBE#@2Kx=?ud1fۿ{A@ f.ue=`BDݙ@[>X?P ÿŶYS}2@/D+ýa>mBB-@%?J?3/.@Qkn@#XS~>@BAD0?I?[?avBYYD&A'L@ =g>RB>Fp?;??~[P h_?,7+u@c$d:<̾?rB:=@ !M??f3tֳ2FFF qFJ@ u&+?-B3~@m@ ?/M`>wT30@yыNZ?CB*>@#|@!K@[S>ts @&b"bo@ H?nBb@@pH@ ˿_M7>y o@GH?}@ =y?fIB?@L?=x>EN]0nU<3)@tk%>?;MyBܾs@(?W\?Ka?ּ_h?X?pP˾>5!A8;9CAB@2|?b? uL>>N?N7?o}jAHADA$x@[Þ?>C!vN>k󽉵==S+>\L?9AAKv@d$E@ &?0Zt[̾ӒVk?¿@^?>A۽TA@w_>7?ܽ,>Mο072Y>E?1FA3 HA6;@?7><?YN"~>K'??vA:A c@Dlڿ-/#(?*<>o/?BjV@U@a$yо/d< ?C-$?<@`R@޿`%vcV)>v$?\B p>g ?x5B6)>m&> @0líkŵ'>8O>g˿y>H?]֐B<?40@A I^ȾN=\c>`v[>?F)B@? F@菿o]H>5>8B>ӑ>KBBS?w @SRbFu>h=U>Y?>YBB?) @_ޚ?>OMI>po?9'>\I7B@?@C @l2O?ށ>~%"?0uHTB<@Y.Q:@GQ3?T+>T=tei?kB<_@`(p.^x@ve΄{?tU>$$j4?B=:@o)@T >P/KGm?E?R{J"1?(B<*@ξA%@1p?=:QaF>?wuʀR?!kARB7@vlVxg@?rl-G>*? {?Pf B6f@yoX@ 4?;6O;U>?Û)KG?gB2z@)9f\?G?n`Tr>0?M~?MhB2@g ??IR01h>~<,?,\? \kB2@̚Bx3?W ?(ڿ-4q>-?v$<%s4?dש5B5q@8y?Kd>fA>=z,?B%>ӿKK?MLAB3@F?I[jR?>?!ߣ>bj(J>q>hD?-8KIBFVB0M@ x^`X?{|Wd>mt>?ܛ\eY p]B4T@yϳ=EUiHn?S> `z B0k@|DUg%9GC!wl?PQ>=4d7B)@E9Hٳʡ.~`>X@?p!#Ӎ*4;)?w ?68ЊB#\@"uwQ>?Cؼ]?޹?Y~+ſ,BG@BǾZ$Ad[9?T?=u>}??:m޿9Bp@?=A\cO> ?h&>ㅾ? 7XBSMA~>NMMj-?,?s<2.sz?ҿBڎ@+?; M#<;َ?W?g{2Q&q ?$&cA^eAL>86GM1 Ne.9H>mj>I?o>=)k8羨}CA݁@k=]?1:#[?;?˾>Q0нE! Ŀ?mUNyA@ޠT@:?A X?]=>?Oj>u75A@yT? ?H?Æ?Ѕ?]?C!5>=*PJ= @vA@"t?6?*>*#??;?B= G>YiA80@-%~>?$?e;?;?]q?>hܿ\>h:AI@@C\һ>FJ@1>n?QA>cоXԕ>5WA<@ =XgvF8?@?8S>?/߾^,:l1A7@ J9"׿ԯ>? n>3AsQE?-V%覾ަ>ᾈ:n>+Їh`>]eAq+rnV:*'-?V\|epz SӾ+@p>nA?5&1t5dտπS>x]A09ȿkҽ1ԭ>ߘAk(Z.@y@?tTbMQ>DPrAX[Zoy3N@0>>`>IL==#'AP6?-濒+ɝ0AO俶aX) ?axF>Jh>tP>?%b+=!AR?bK??a??<1FfF>Ac<H|@A?(:%晾>=]3Q/¾XAPYplpaE@6z?XH ?FnTZRֿU>\i0>LAiٶ>m ,@?p@~;&.=JYfD6[ܿoZ?iAg vك?]۾]?IQƾÒ?> >AVPClE@d?&>V q?tſ7;g <A>-_@m?rOge3Pt?ge0UmԿ;:LA8^[I-?́=:必]ؿmnl=>ra6{z>{sAEQZTs@?n2ֿхo#?$wF ; ܃^A$>F>>C?@v!ZiٺP>VA j=2?4?#C,Qu<9@-TؿEBNw>6>02 A,w4>??ֿaֿ~NI<>4yͿfFY'IC>ݝeA). =;?~? JO9x&4K/ѿ-=8?JAA3?aw3>]>0R*!=2h=>/AGꛢ`?1?5ȤQN\eֿl+;p]7em= @6L{??w>W=w?E>F\ڿ~W$>Pr?4A,#K_? >qJؿ 7>j>{ztVFfj?S@-:S>fb>u>s1>M?Xgr>W?BA2?.=k[/C'—>pqA !Iإ?#?69?1Fr*̼z?Y Jm# >A 1??&ksOq> >Q=ֿ?, pocketsphinx-5prealpha/test/data/tidigits/man.ah.9b.mfc0000664000175000017500000001236012504317076020260 00000000000000;@Yf?>t6?# ǀ?" ?+&Oju?XfVq@8&?ݾ8NZ[?e=gl & F>sa@XaU? F?$E=8/PξW>#>=͍@3?$zZ=ۍ>?΄C>C>X=@NAh u ?M9@`?M87?/*u@%2(7?͑?HZ>>8e9''?Q_NI8TGd? @vgd>vLpg\">p?>>.>ǜ>AHԿ2?ĻͿ?E. ?0U?뿂6Ӗ 绂?_"?c`j?[A p&οα>o?Z>*fC??c?g@@lQ{>Z>Z??"45 /]????rr?T =@?L'?H|0=G?? WUy6=?r@(O@->t:>>8???>>7?iG@}>^UZ?=?X>.>FxSb= ?J??(:>> @U7>V GK?`*?]>=?n?n>Msn??P,?Bf@F$ ??>;ŸBs待t>@>??>È0@w k?z-?lk>i辚={=?u'?v?> "=&W>8@HKw?>*>޿5>͓>??H8a?G?DJ?wl?4q@k?/@⸾<䍿>Gm?=?6P?!=<>Y@}6Ev?L>Ɲ?5),bS=4<\?_?c?2i?<'>lg@9$>_??[?q,? c?=s??tcMi>e=RA@w>x:?E?⩪?>y>V%0KT>۾cw >c@<?K L?O?Rc?.Ⱦ`>K?տ5054D@ཿ@?%@8 U?.s=Q>|=G?Oܾ)(>R.A RS#@YJ@ O?/Y?3?]Jo)+$>hA뾱MC@t)w@}@y?>s?wWU;6?H?AG@ c@q@dB?>U?gG`>LO|<>XwAHK@ԗ@@}C?[DBa>_蚿޿B=2= >RA@¦3?}@?C4rn|08:?KzF?i[B[@@E2?+?n26-6W61;L?VyB@@\?ُ?is"`W~ľ=ᅴLpUf?R^Bg@8@@ W??mU޿t)º)=KGsj\?B@Ԗ@cF>1?X> UG?~B+@e?ImX+޿Zd#@<?|wi=) +y'B/@o"??2s񿬎tR7'@u@ > _4tXB/@`!?̫h{aW< D@ۻ?KѿjwqM\+B3 {@ cMB-`@ln>2%K>z}?a?V ~% ‹0B. @ ҥTJ?^| ?<@/cBoAf4 B+f@vK: tqpY?+?Z?ǧ?Ԍ*)7-B,K@_ʉ>U?կi>]{كLB1+(@ ?\ DRŘ>࿝:?*?̺>AeA B2u@d?)濹 >6A~?8K?ѩ玾\8q |B6@p ¾DK >?-?r@KAſC64~`B7W@^! پOQ1I .?a?ϑ@eL AB@{'@XR]x>P>Fۻ?~?s2D$BGU@|2TJH$W@@m?&`VBIlm?֨( ә- @$? Yk,ʿ BB\g?m?J>+rU@!{?¿Ma_9GB`j?i#8}@1'>ЀQ[K<95jB7`&??/mD?{kJš@3>*Q B]a>IPeB1۠@,~?%Ac? ,KU@$}>'r}V?g{eeB3W??c?)TeHǿX@Dx'=?C:iֱB0?@?+?9bxP"P@ONVj>HA? Xr B*4@ Zj?Si@q/@?Ͽ,$>i(>链,B@X?!&@#?v<%?C2{I>%0Z?B.@i?٣@aP6?%-V~>k=:?FLB#@1?8AW@N?8 ?y@s(?|^E%"h ?OAs=@??O@XO?N>Ԟ?j>p?dA @>?^@n?zH{jʇ?%FE>vb?i1pAL@v?o`@'?RxT?ӻ*E>I?\AU@C?&@[y?G4FPϿ e?f >>=6?>bA%@$y@**??ƖPCVkǣ,?,r>k=JI=>փAA7@@O ?񿓰]eƒ?w?Y`= 9AuA;@@@$@ oa ȅ?? >ZT>AJA3g@0@xsp@]> ?&#>G@D񾛖Aw@[@J@u?[3ĿS9?9>3߾6O>AAG@P@u@3?E>k>jӏ,O?*A&9@|@@@\?|?G7ڗ>%>>UA@@u;v@v@w@?G>+ &S?༇a1`>FD>A >^@U D@N@F?Sm4?5}>%^?G=2*Ci޿i`%>TT/ᾯ<&ɲ=!@˦Z??}?D>R? ;,=g>]@3 ?̵?T?uI>rٿ ;?> =o,@Y{?R0??H>}xU:z?4Ga}yy@dd?@L?~>}=3@?JxxҿNH?8H@>BO??0=G!ۅl>J?F>>p@ǿ@ ??N5<Џ>ե+9Ѿj?&aa>X&@ѱbN;?˹? þݿ:M<>=ػ5> a{_Ad@?i>E> ⿌w?Mk?#>H>þ@J[@?Kv)Zǿ5 ?vԭ>*_>S>->*P>d-@(A@@B?SI=`s(?9*?>ҿGڿ=j@FG3?~?+=i/> >R?7Ǽ,hd۾(!>J@kZ>M%xfZ >@^o 羬~1#m}=J@6R>uZ?";*?1lA4Yd w>L[?Z ?{?m? ].?f>#>R:Pտ{oTu@}zt/?H?x=-u>>&>A?0>El_>? )@O(z?Δ=WG>͚nw5G?_=,u@ym>D?9>3w>Vsྔ@7>.>Mo?b>#pocketsphinx-5prealpha/test/data/tidigits/woman.ak.75a.mfc0000664000175000017500000002263012504317076020714 00000000000000 e>^3>??tn>1z??N??6p??}E>?1>9qkW@Z?Y?f龛 4? ?a"?>(??E m?{irN >H?,??)ZA෿<=>M$]>M$??A~?N=Hÿoí>?L6?L'>x;?/>0?g0i`T?=(>+ •>h2=Kb?Y?ۤ?#>Ϳ`a!@7?W?m??>3?ӧ(?e:}>>8J?!d^:a?n8?"?(,?$p>$(漧޳@ _?PЛ>ϻr)/h?X9> 4`?D{?C(? >3>rQy?_>=1}8@h?^ȼ/=e}???$ ?mF.rV>n?{ Z??6>XZ=>Z??uH=PZ ?;p?$؊=>?">84>V_;8? ?V??׌?#? ?I7?&>|?YU?Ko>7jqh/q@?tY?=O ?.w??a?NK?>m?s>i%>vE=_`=V?ZF?}SV<3?y>@?ja?9>i>>ȋ>SY?2C? ޟ?@X@ 1??`u?pu?b?ah???kG?!>>x@0C??V?K>|.?C'?\?7*??hSh>=CQ֝?龚>?ꮼ~><\??*?[eĤ_Еr?}?c=дM2 ?C?Dxܾ>a7>TjE( ?qN?h(?>*">C?<?Wj>,?f>Č ?N!`#@C ?(\+f&? !?W@?)`?wrn>{Ŀ ??sr?02?`+>:rZ=Nrs?t ?>@> >`5?/9R>g?/>f>?C(?U?d?7?*E?<^>^8cV >ݦi?y>_^=^?4_?E?ʏ?-`<S>6L>^ >v?LԽgUnD?>==1?IM=!>N;t L>w?? ?QS?T?/T->3i>oiAj'e>{l?>&sT==ӆ>g=>AZOw> ?̳>U6ɾrm4:/_>Aw&vf?ǤWH;-!<6= ʿk?KT> >SA9+@A8?/yZoTn(l>_B>mg?0A:^=@ u>DM ._T-?o?i[>O?-+AaQ>@Us)=oIuED>? ?^>9??f?J?n>+3???E?y?N?\)?%xN=z?ݍ@(mC?XS?.3x?? ?p??Kl0>'X7>?BF?˅>HF>> >>eQ?BY?Ͼh<>T@!4>R?ȿ?=I]?ݻ?ltf?E?5K>V)t>g/9?f,?)o¿%%r?X?!?:???>ǦC>Ȋ-?Y?1QO?e>I? *?_+? B=8?9>O>>>]>-pU?>??h ??kV?D; ?0=?w?T۽Bv.&Az=͋߁<4? i@IՅ?> vM@y?(f}?}jl?ڿ]Q>"gAY;@6{-?yD` ?_俥y>W19H? |AFZ|G@(>v{/uW?gU'?=9E K A˿ۢ9 )tnU;M8m=ٜcX>fkBOro#aӾ 7u&H=>>nA ? P rpf=IG,ze(?C_v>2Ao=?۽J8=28*ȿ!g|jfuzXp/ 0ZX4\?2m?apu> A͘u?R\< Vʲ?=/>rt?t?4?d*A]0 cx>>ѿP_S=%xS>)!?+6AN???F> N> u?Q?;ՄAp !)>^?>g@>uE?c7 ?>t?t{ٻ?B &Aܞ-::[#B>?9?:EW?9J9Q>ښBRA |<.u&?4D=[?M?[iX >>'?rB<0<[ p*&76ހ>J>%6>?n>n?vB/Q뾻?޿a@y>N/M=c?=]|I=̩Bgԫ,*~ܯnʾϿR 8>EXr+7BtO!Sȿ:]c>sKMANJ^16zPBFAN58t1YBnZ 6_6 >|>Έ®,=~vtuP^B m:jY>>۽ =凿t0B T%> >5pǭX P dVB=!=o?g>$HԽTR-_:nB&=le Y9f>C>nXG0BgWwBt؇?āV}pY >C+c` k9oBPE@sA?y CgByz>V +>lbB;U@@%?9!~^M8iR?n]B4h@<ڿ.>?ƣ߾j]/66ɿJ$?$:B1o@"&?T꒍ZN K-hӃ>aZ= B4?~@̾yBlпɿvnX?B=?ؿߦ@BsjŇ2KܿWM>#[F^BMp?&?jEE!K" z>̂?Nп 'B_+?Ӎa?Bw{Q5%>OX`}ʿCqBh?VSM%>>iOm?IZʿ4Ͼ7#7` 9.bBd\?էK?Qk9ۊ_-ʄY8xvֿ`4+ٿ rB4,@ջ("N-@Vk S1?q 9 >u %jJB3N@Pj@J<EJkw*?-J1>v:lCOB4!Q@ɦ`@AqQ=ozO?! [r?+\0;tgB2lp@/!@K <|f?WF`?"I$%(B1.@Pv? *h@[!<#_Ppu?'XEwJ=x㺠B,%@?v@f89Oxh?Y;H>!B&VAo?7@RW叀EL~?4 L >T꿩yBAZ@@ @0x%7KIk@\d*ÿB{A0@Z\o@?9)vqyLhl?ƥ|P 4Pa<#6BNA%[@F@P(i9IaF3>^&Az"B `@Үs@1c@Y2454#VzEB}XaR A(@)@V3@9?`ۿR(տa3>=4տgpAR@/@` ?{ʺA g@ᾛ6p>eA7/n?mGK%AfuV<?g=f-=О(ӱ4<{u6?9c N0AƁ(-{[=7n> q>_cA Ћ?7V% ,>,>ҟ FuWB'+@L ?MH=<Э? (>7G>R&>x B \m>*$>A>ɗt(= <=> ҽB34@: JDֿ?(Pn ɿИLW>k"//!>oBBvr= Gy]Կx4>ʱ>mO:=pkBzu~]P<.?>leQBq0;F.Q1|>k?90KK̸>Bm8$4+Vn#=t$i?%tNA)>vyBJT&ܭ7BoΙJm>c4NEBz70H & ]>Ű=¾ l'B8:vD)>@ T =>̿9ȾuBIK_7>kf/r!>п˭ =EhBA/>? c>GB0? ' >_ B} qS=!?]o??HC?JwBV* n^R?`>4ki?Mu7g?-mBy ?H>A .?]Ɖϝ?.BSyAS?Q?=ȼy?Žx&K ?C3B~3So?b>ڕiȡ?8lk4.?h2BJD#x ?$?Ր(`F?,L<6 ?i>{B??HÍʿR9?B Hם?|߿jsB'TCi,D?? w݊A?( 4?^1d}B+كժ?θ?+&Ӿ^P?4Kݾb?a\AB#m)!??Z?'y4?VTFs?BV)#?a?4!4?NH o>@?c~78BHdN%F6v??(Eリ(ٿI?W)A m=[r4?B?miϿfOB~[[?x>n=FP!> ->??!mIB{ZzՆf&?Y>>ؿȁ>->,6?gDw\Bu Z>mD?`=>==>?0+xMBum bPC?*>L?㜿X;?M-'e?d?wƃBrp敌 M[<+w?6[(4?$)?.W*0BsN9$ἾǥQ\BsiNa3LS?տUz.F%\?G:>MBsX"`蒿4Q(@ }v`%,>k?~>*wl,Bp=Q XOٿaE@RJ19ʁ1>…2Bn7#2%@`$mA>~+[Bjݕ$twf->U[@ ڽP_> LʾBcοAtlڿp?zE w+>ý.ԯBU[?7(=KJ*\?wh}_>ݡ">+վ B9@jn ?Hʺ3:?}ɿ  >ܿ =%=%Bm@c@p=̢v27L$">8vvᾳ?]Ͽ!A@v@)?$? 2˧# W<{Hޮ A˫@@@/ ?]Ahmr5L /KA?g@J@Kwq?HB~,2*_)VMl !CAPZi{M@/b?T׿{³}=r\nA48䠣/[0>bTe>Cܿ!AIw=>d)ɄA ˌ@?j G`־_hm_T>+dUAZ2_جCn㽓XPcK>S EA  }:?"'bο)^羯]'ͧ*?w?y7>r3b%AC9`,94EeokXTdUw?-x3FAݎ_-nMLȿtn;o˾ŴAݿ 8?j>>=mAwTq>guN^6?[Be5p_6/,>>%tA}~^?<ߞ!?s9?ўis> ?Ul?Op?x15AizWeisO=W o:>gjQ}z> VS?6h??A1'/LG>0=:PA>y?Jzs\??P)?*@z{?3>>?> FA'E̾@=}?3-Crľ3ߠ 9>?&&b@?2u@B?<3悪&C)@A 12W>L>`@J<@*?N'm>ME>7>":<\?"@@k+?=0>%h+gW>ొ>\ [׾H##>V?7+yY?n\>(?,I>=jrwȃ>D4q~l?̇Z9?/>_?{߾ŋ?Xyx>]>с]y?>Ȥ@Z<-?yǶN?3>>o@?}(>_Hգ&? ?*@s?>=?X@I@8>8y1Ǿ?)?@ks=@t?xH?Gq忁$`\w!O?f0Q@"[ax?3??AE׿+n>2q'ZYq3f?\ ?ч3?O?޾q?U@4J>s ???%L? ˀ?ȃ?.)K<?M?3S>Y>3%.=hvl? X3? =<?x2l,>B"#QA>; ??y?9V>B_>;?eN>a? ?A<#L 4<@$¶>>3>f>9R==mj >'0?{׽?VR}^@$A?(T=>+&?M p=QH>=?LH??'?@>|z?>>]??>3>8B==E"*|?uA? >Ux)>>҅? `=.?l>,K>S=|=Gz? 徫{ȿ澾>㾠>F>&H:Z=O?HFI?oU>b='ֶ>ݫϽp>2?Xj?UQ%?K0?UQi?.'?y>C>?}l-*?MbP?y:?,{?Ч?%p> =J{T ?>?,?,>ھԖU;h=@k?VK?lپh^?_m=??C@>r_)?0Zv?/?`?->O?mQO>!>})?1RJ>>?7>ӿ `>>03?)i?Re4g>wI>˫?ͥG?>>Ė>s>wa@ >E6p>9H?`_?Ix?`? ?F?N?#>i?aW?12>_7lv>I?Y">vi>3? ><>^?=ױw>5>P0L)?Ph>N='UB>0Qpocketsphinx-5prealpha/test/data/tidigits/tidigits.ctl0000664000175000017500000000064012504317076020440 00000000000000man.ah.111a man.ah.1b man.ah.2934za man.ah.35oa man.ah.3oa man.ah.4625a man.ah.588zza man.ah.63a man.ah.6o838a man.ah.75913a man.ah.844o1a man.ah.8b man.ah.9b man.ah.o789a man.ah.z4548a man.ah.zb woman.ak.1b woman.ak.276317oa woman.ak.334a woman.ak.3z3z9a woman.ak.48z66zza woman.ak.532a woman.ak.5z874a woman.ak.6728za woman.ak.75a woman.ak.84983a woman.ak.8a woman.ak.99731a woman.ak.o69a woman.ak.ooa woman.ak.za pocketsphinx-5prealpha/test/data/tidigits/woman.ak.48z66zza.mfc0000664000175000017500000005276012504317076021655 00000000000000{?h Zd=*/RH_]C???+1?fu?L>v$@z+v?7Žrrt?,?(6?>0@;?ÿ7r}M?l ?P+?F?f@G<>J>X\̿JT> t>⽹ܼ&>$@D> ?ٿ?$fO?f?C>=?V\?_^w> >|>>AH? t? >;&TW???SF>$=í 26?/M=7>?)8?L?R?Gֽ鸩>ğ="&N>K?>e5H?'1*?T??ξc=6_=d?N ?׽;{?H?>t.>S?e ?/i?o9?,.?9` A`M.7?\Ko>7ND[?y|>?pڙ?t?Q?9 .>Vs= >-=K?82>`I??Jֺ>>g־8R?'?5 ?$x?G ?پ2 ,/5HF(538ad>?=Q!-žQ@Mu=B8lX?,?ID T@!)?1?m?U[,5WJ?}F>t{?#˘=/Ǽ8?|H^>=+>?8?v4>5?Sb$>,>˾ХQ `>KXO@7a>qk???f?>?>Đg?i=?)=W>K|> h?>D $%>JB}?;HZ?>iNo=vy>=1? SREx?r(>*S+?SbA1?5?r ?l޿GON]?&Z>'hM>]&=+̩?Oss@!?3+$⿴ep&>J?U?= >SI=2?BlǢ?*n>ƽ`>L ?JP=/>NA@lj?%??8u:)>$UxDY=n#u>@G>;,?@?<eA?$?;$?&/=R ?o3^>5W]?"R?lXAE*5h>໿u1" =lk'>׶fm=$AQ25?~h\?T>.z0#TO?Wxྵb=v> @Zx@Z?!H=[G=F<>zyǿ X>c>u(?#?*@п.O>zزpp$? mA%Zx={[ͿFw9vV7=`[">@OW>[?\?աT>C>?]P1Ϳ2j,>°A:{`a0d3 ȹ*㲿xZ>[>u5A?77]#E{;M8?0I?w,)y/0LA@WWˌvyMYvi> x@'@M5?w5fvAp"s2ɀ;.P4M?[??'j~zMDA hֿC'??MY>NdB46`@@T@YпS g*=)=9=Ԩ׾<뾆1 BY@ >A;}տ${unƿr QĔB?kjCA;þ?;{hG)BSr@ֿױU{g>H/"ܿjm9*Jh'f)yq >Iؒ)BPA `"EAr~?E?}㢿! 5η;6=%U. BKG A'af v^gL?F }NA,{ BHwAV^ÝԤ;?l&-ǿ@gpb:;BK6AYj?t14#>BF=A-˿׾CԾ?H]Rj-IC~ NEip !BJ5A {ƛ4\q?]?ѿ%쿬Zȷ>7 BIA8Ӿx3 5?-;?NHĿ̿~>t9BIAe[GoY>ž?s9>tAD06BLYAW39?`#?i,D$AmBǿz>XmBKS@ٞF~P+">6e{hZ BLBP@-eE1Ȩ+ӾFiZ[Ri#BX @,F^x>'>]Ŀt?˿ҽVA B_r@zk&woG?%iB"?;5 DBdA@9 aMV-8޿p/CڿH? p4G(NlBe@(@;{PL>_ݾi4=!t@$RBe/@4evt(S:F$Ǣ%sW|qF}Bj?@-HmpPE羿؉D|V>l,($GOV[䳿$Bm;@3e0^>EI|?ةqt#ƾ0Bj?K2^O?F87Ċo.kdh]Bk ?|&PcB?N;R);`Bk?+ƪj" ,?iӱT߿J pKeBXO¾;9 &L@!X}̼mB2k?xJZ@R?uh>#>{$iYA@ eٺoawظ@@H Ϳ??^AN@ `\/X>@@'I=܂?ν?WA0D?i`VNj}? ˮ@"@Z?'4%>c?z}?{@}F(ZB_M%?>xPQ?!?L@V=&D>^#)¿D?]@ ?X]?F?hm>2"?;?,(&XB?q;?ya=>8A+=нp>}?U>'?t3?q1\ ?>=9J<ΰr?e>??{I?pz?}v:g%=m!?Ay>9x>ҋ=*@++?*?3?z#?@>C?#X??Oṳi;9b?ξ宿ޢ/\>ˇB$>OED>1T@OLj7㐿}Nk# ?l B4߾'>H쾸hiܿes0>mN ^z23B>k -#tؿ^?{V #)_q?oC?,>BKӎ'EN6K@*'N' /ҿ_o+?R}B<ȠJw_\\?¾)/$_ſ*>,B ,<4h?ƿ5ѾٺS.཰B/*%?/<hw5=\P=Bj0 LM1Α?u=kAk Sb<.BŅj?ݿ_ȩO?>'m>Cٿ4Tay>.BVƓBғ,2Q?!@:Y+SB~[NiԢ̿=iܿ$1 ޕ־mBzmo:@я;ʿ.Yӿq,};슿CMBv7a4KOj߿W2Ì~E\߮BvH8ZI9%~~qv4<d޿s(4l?BtGћy|RD=zkdhڋsⒾ|٭BpQ0FI0- }UG3徿]տ&Blz8>R{< ? @Jhנ= +&wz?BiN7.?ψ>ʟc6@ >MAk)ʿJBdS@ &>^^V e>޹ȿaom; Bb} N@a>?ҋ rU?:msVѩd:HBd0% 0@c?@ݧ.bB ?^ECqzRl}M{B`@l6隲#!U P;5EB]*_\#@>È_Ӝoӯ"j~!>mNʫ%GBVWlj@]?$A{F/?4`>=NGBFq@?Xfe" |?:x> >޿^?^B)CSګ@`?NCʇ71LJ? s6?c7uLrBw?+p@@;)8>?h_q?ܕ<@B.?Z@sgY@r-v쿐L2L!?3:?E!?!-7>B N[>@['@Cs)dpKV>K @!#7cHAԪ@:ZG@FvH7[N b ;b>m-eCAYKDz@E@UӿM|=vnBX k>?<ǚ@?g@g }> ҉ �e!!>>9?UF?)@0?~>x@0.m??[7sToI뛿;y> %>V?L?Mg??"GZ?b/>!:ׁ0{Mg>?(X>[?K>?9%s*?{{?U\;TU?KS?;>7v>{?@&>=f3=N*G>#>?"Ax@? >Kr+@dó=l>+= ׿{#JlA^@>?MLN? h𔿨L?g>#?w oN㧿ǐAxAV?x@?8cG>nt>Myӿ#(jA޺A%?@}G_?4c+=?T>Ljw`dAA*%?A!@X꿩Zk>?P9=}>) 8AOA/ @GTa@/ܮ3>ݼT,*+~>bֿjB J@r1@"H??2if࿦*'pҨmӿ񼫿`BND?/`?> ?lZs̝Nw`o7XOA?m}@@-,G>XDϿی &?ɾ pҿ8AP?@k@EZ`0dgi#/]s,VL/BѾS`@@b>{ao B*:C_<ѿ1bB Or@@j͡>Mֿq՗u<ьԿX`6mB-m@F@H?+-9A6T,ZBô0 @4@&?+b ,2VB%힭@n?₪dB?@ڿlccL]\*B#>3@r?_ſΨQ6ӿ3ɨ wB+1+@{@ 辜-,==!oB3x?D@{b8?(Nj+ܿV烖= ^D,kB@o?J@76?P FJ[pa@\ƿMοiKBI?Q@?Ix"p <{7a ;<ɷmBR\? ?T'?\؋/fAԪ>  =YOĿVwBWJ>q?nar?>بj;o@ L">/zSM{BZg>+q?U?H/-L:dD--4F^D4~;aB]/?J=V D`eOZqg6 ~IB_6]z?>,6] UIy徥Ͽ]GPBa´ͥ?́?ŦS9!Pb3;?~uiSG/^Bc]ƤfQ ǾөBd>ͦ]?ăizDE`:˱󫿄k,E3Bf.sx>^@C61T>)du??Nо>Ro{lLBd{ >*%I3@]r? ֿ@#f?heB> Z>`cMB_p?`u>6@bz,))wM*{>u!=9uMB`@4M.@ *UW>nFA'?>1@gK?BSB`=@qe??3 Uֿ7lA?Q{?:apBaa@@?>)d$ѧ{9L+?BJ]BfkS@D:*>ɿ+;޿hkڼ߿|4*?+GyBj \@* =Υfuܿ=NK=k-ҿ?ql +Bld??^ݙ%44HO ʴv>BpY>qOa >j1BvQ?ӗ/?*^ G8?P>ϾI0ȯ? /=mBx?^J5>Ln&,E`?޻x}:R=Au&QBz[Djq޿ET΋.?~cC ?N|.B~3DOGb?CB$``%B a`MOpoң?wZuIlB*"X[pvIHK?s*vy5ӋaBu \Y}0_n?dh ҡWk( >B}6 -vG]hb?\?=Mqҿ-.q:$B)b꿖L?sDEῸ|BZOMoῪ,P?ZnrxBB-S)i[?ɪ< ޾92G!oB~6:JRh@n[s(z?y潹zc}3d/^By1S"^Ib`0JT?=YśW\0yBu`?ΝBQzD?aÿ?,ÿ hCurBrlp<`WN6>?[T[ֿF~wVBnu]z!=~> gb"? C jѿeMܽQ?:BjH/4绿r>0Bjjc>\-pK81>G;޾Bby>\U&>r6@(DѾ(#[࿩%o>꿒nsXBY?龖{b2> D=6=俬BN:@~?|H+kK]b$>1 >BC@4[#@:0C4Ϳ A T3vbB=K?q@>ChL? ƑNCS[B)=?7@*si\va36*-kwO!mBmox@>m>'gс?R)ދC}CǽMT@=k?ٿZg%;xEO>A= r? >t|?=?r>v?N:\?~At5v>֮6?1o)> X>W?T?(>U7?3A&:Uk=X?07%@KtG>oL>!?>=Aܮ8|JA+JsU>#z@zZC)龱Y?"|?=D]?CA!W;0@5?O>?c?9X?]AS&%yT`MП?~;Γ=>śh?J9`t>m|A{5G8?~c>K;?S?U3?lQ9?[]u?>>A?<dZ?s>jD?s_3>?ht|?D>5>2A3d%0X O=D2>EO4Ah?JE>5?´l?>޴ W=&? ak>UBf~I?ؿ_B!𑾆E.?V5T%?뱿8=BFa?ɑ>:=u?= O>Ls,?B+ H@_۾ŒRtzfzQ uȿrҽ޿&=4BK(>=?.LGu(dY!oͿͿ4 c.žB\+ jjŒ 3H\9fῃBc0z濜'p kǢhiQ t#[nMBk ^>u?#w*G(?ul?/6Yyu0O7BnA$>h> t <]>,c?)4U̹tN_Bn\N?G{>%^? f?gZ &AFA8Bi.?¶?DL#?O 4?lЭ!tNEBb$ߕ?p?+gM?U(P-?̠$:bƿr)iBPI'v?0?DpuF=ku7?]8޿tڿLB2!se@-@SN 3?odqJ?Nul,V.Ak?K @W@hĚ?dž?M> ƿD!H־˗Abd@m@@?"|DʳѺh俠-4_S>Ň@@C@}?v7 [9 Tc"̿e@=?J>@Qv>܋;v rο,y`$?} >Ӱ@"QҊ@LN$@OzH>I.?Qp>MN'>)a?XN?"fJup?"ֿ6?|t#?"t?]?n6|?ݙ-ly@:@?t?tle?;?d{?>6? @>R<.A?>\o;?;?W52>5,HͦB(HhFL>~En-?hyF ?>~R>3B@f ̴;>T5r?ʓ9;?"@FG>>钏B$72@y ?i?Fa.?jE?=?sj> @ н%??g Կ /?Ⱦ^Aah@? 15?>/>D ?i):yA<!>?I3=r?m} ?$nĿ )AÂKk?̀>??_^?x$>>OG3?|w q}1A96@>aY?>)" @-q":Bվ%z Aӳ/?>ƶJ?C5?k]ڌ=qï>-W>aAb ?ݦ q=H?"|Ok?(H?0j>w (?b@A ?1LƾPI?>3,[?s?+eo?Z>,?>AN?KFQ>*ޜ?|2=/#=6=؀;>< =V>5uA%v?'Wֽ-Y>qW;?/[|җ?.?->YN[?4YA?8W>`?E=E>3 >^>? 3? Avs?־V?K(D=%>H~s? AD.?ɻ5~BG?D)>>ky>~>h0ľha5?7MAٞ@9/=Gpl>Z>4BTSc=?w?eE.T?{ta>k??GBk q?=X>2?W=kV>>8 )?🿪0w>PB"@?V>@ + $̽|?DB??I?o>EZNv`hhO)2BRPk??_->G+Ft pԓ8*HCB\?:?<̾na,=%؆1L+vg^%B`=Ӻ\35/<3y迿`вr: ZBb>/g<IU쿯hǹh:iGfBeЌ?yu=:I*| fO[?kRS>Sz 92BlNۿe&÷Eo>|{^n&eBpq(-C#pƞbY=, v>#M>һn1+=Boa8hd>YWF?_?>w6F(@#i=6Bjh>D(žMs6?ArB>c.ҿhh;Bbk5I# ?Do՜e?#0;>r߿d%,+)BSl⿂a?7fC??ŭ?`Ӟ8 > {ľBKM7W>"4?ЅA?oM4>L|hXCB;?39@!1?G5d@? f>jRaοA??3@.DD>y+?/X?M?l'c= *|SA#<>9?X>Gyc `?oS?36?_̟?ݱ@>@ 5 > &@??+@?Z?@jS p?@>ocL{#!c:|z?R@%?{w?^,@Gr?*?́5~Oș=?i?;B?`-'>@ As9?y6?gEVHL>]$?3G??{? 6>?ټ-?A憎1˿A[>}?0[?]?C? xI?~_?I?Ү#S>4o>WZw?4\?o?e>Y>z2=@ ?*?kQ3,?Ej?=[?|>"uG=*?`>E??e>@?;?3>Fy>kZ#n>?/+>?WB[y w?A?l> ǽJ$?,#?9': B)_&>rKv@0c? ?C% ??-:BM ;俣@~@K>?G??ߍ?> ]~A".h>'>F}?~4? >迱:>>A< | 6>ǿjE:?L?u?2P>y9D?A0t>㢸? QQSA?):>IM=NNHb=DAO >?'JϿ9o?@o>=QMFT>ĝ#>SA$Wy+)\2N?^R>A>6 4>~6?2C>x?hJ?q/>@QAefaSeoi>Yj9?m\> ޾|>i?ƻ$ A$ >UD;V?w|>P?q?S+?o<뙾WAh , ;>Eܳ=}{?2NjD>oii}?7-N&A[^>frL#Iw>8E?%88=ʑy[P=#k/A5g ā> ܛ<`K??٤??N~>HE?݇>NC\RA~==E>S?*:?0 ?߿Z@A%|L?5*>n??.> ?-@?J .?ƍ?rGyA@kkʿX^?x?"NZ=@?N214t$KAk/y?P> T~ >@?JH?9> ?Mv>RXDuA|?#~9 )>*?W'^2??A)?R>+ `A%u?z_ҽ*-X$?6G?Y>=Z|P>DA`?_ܰ? ~@+|ྥp#pX.{Adt@}E?>1qd32}R N2#B??5@"&>ĿDtae!ؿv@|Mp4Զ{@@BU>{?\7P?,Zu =9r"8=o }v7%B[>?]s|#/-,3̾:guiKBaۿz?FZ>`%qukGX>0x7`5=#%;c]BbV?d|Z>ףgտ"pʾ䚿wix3Klҿ#;+wVㆿHriBe+Vn8?9?z{Hc.鿢)x6?̿4Bd Q?K?ጶWtof= a P:BerF?L?&f"sݾG8qvףBb<5>`?@CH]8Oζ^~˿^Bd+ZW@&kPj>IXp9ZFKdCPbBb?9w@C v?g 7LA? \!(qأB]+@31yA@<^V>?j/[r>a) XגBX@{Z9?z=Ϳm>@Fp9>Ǿ1z.BZE[@_V?]!vϜ!Rtvcr? Qo8?9:, B[*@bw?BKU&9 G?FFԿ?$B\+@?/;Ɇ=+ `{??鹿DuBd\@M:?]á-ғLS> bE?IBg@_N>>=3>}d#ǿbvm?R;YZBkt@-wl>s4 >Oy6ϰ>L~+Bp@:M?uM9F? ,oۿn>bULABtj?F>k?D.=.& By^ =j s%p?U22+@@B{Q}=ľ:/x?IK7G*Q#q?Q_cBz0S4e_?EzB{]ΉͿBw %V=a{QZf?aؿgpGK(BtaĿs{!JSh>Xο5m^-*oޝ3Bq\6 U&%%].>5?8?󿹿Bp >-3osJk=CPBf?':G qy)s>"៿i>kѿM>׏^BNiB_ ??\Ǿkɿ<>OrTBWU@!?%Qd(ӿuۋJ?)a;BOB>@"?7{#,=ޡl5W?=;񖈿 BD@D~@ ?z/ye(W!?4v "B4@U@J>8V $Z;YN"NEt ⿱UuB'@@ ?2``tN进64>x}%x>o*zBE@P @=?gќ<*/S|e>mr6B@(@#@ZVX5=.vTv>Ͽ*tB'b@؞@ŧd@ Cls#??v/<?Br?@@rZ˾؂@վO@zk?C8#ɘB?ľ@.@Cx 5i>JI2|IP 9Y⿫l{A?[@^q@)?Ftu8wӺO :{B?>@׃@+>[e{2)E#~dhw B?@;?[\/?ܿCIel # jB(v?ݑ@N?wg>Z2_%38>!bB><@<'@;vʧABM}@S @$@_P>Г ο w>hɋB]a=@L;PpZC0{R0׿F=>ngB^?%@Zl]>> "> Z>q?K4B[L?q@0ͼ7l4Y\ gQ G- B]ak?/? ?DGK˿c'>/z/ Կ?6ɾ^𒽮C()UHB[3??D?6z>%>t߽#]whF}B\@->D(?j ?,*#>Xe>J"SE=$&\B[@:D??'?H,tH >/|<6B+B]@ڿ?_/? !4?28u=ѣ[B^`U@ '?-?ˁ>a(>b3B^kE@4X[?,f<Ϣ=ɿ@AH>l\B_@H>?>ti*>O X&aV>vX QBa,@Wb?M>톾} '%w>-`Bd@HqA?p.w?%٦@v>3pBhS@q)u?+2=.H?HF2FF6rc>Z3?Bk@_uȮu>= 3G?P =rIy׿x >t=Bo@}>*9?#?;^ܿu?>9Br?О7< /5{?>螿/uf=H+ŀ>Bu?6<Ѩ?DV?>Igȿr.L=:(HBwS>ϩ־Q5=?>SO{V|A fBxz<&ʘEa0;(H?"P)qľeBx#o뤿"y ?8IȿY.آBzߗƒ`%s Q?ʍA[5"+֌-EB|u}ӿ^.iڇ?ľ!0N:پI|ƤҲ)B|D':qC j2g*?閾̊C\eyB}:_ߨYÿ`?ʱ-˿C,QSw/sB|ꖿL=wLR?؈X"[CS}YB{̓X"ۿ?CTzs .[)Bz㿿3f%EQB'ƿ^N+DVh?aW;:x/ɿkk+9鼀BXe?-o5{;"Sw?wC8K|]@UIĿBQ ?h$n%[/?>XQI";j-/BE\@-T'=q¿߼N-?crƿkTz'ʿ $B:@]qu[c7?Ee#Izh,B,@N__ iba9 >+ɿ flɿ`E$Br@e? >G=JٗɅwԿa%LaBN@N?ݐ@"ʿ+v4/y Up}e AM@?%K\@Wuޡ~!v u[PzK-Ah@lѿ5@SΔ?f腿 e5aQ*W[rA!?VOƿ֌@w?6vkq F>^ AbA Ii5k޿7.W#>*fA>5@$8@ ?vuֿ?쾵Vw캤ł=ϵAR3d@I?ã>¿b,0xF3,l۾?Ϭ?A)jD F@{>O>Nr=xN?!>JAZ໿qh$5@:?4φ~{L4"P4|?2?.> A.z]>ch@V> '>8տ.}?EV>AV 3>RAnd>-?n f1b޿;z ?V7X?M@r?f?n "?Z ?L?{+?:>=lBH?I?O@L?+Hb?MX??A=?$ֽXjOjwVۼ>>?Ы3@S?M}j>, |k;Ʒ?0>>?\f@B?Ûj?>?c>_J&?91?s>H?G}?@\1ʿ@A Q?g?G?UsH?==>/8@&?:*d?h?؀?_?kK\ؿTkb4@@Ѩh}W@?Qt??9?-0>6>A. iFQ>ȁD@p~Ԁ@S??F?%|?`a?~?L|@ @D??*?Wn=?A?S ?a??w>t*?@9@/5?Z?~H?kW?ζ?An> >W@ྻwh?%k@L@M]] 1?J?i3?n>W\>Z[e?p?7k>?ړ>k?\?G?e?T ?>T?'}->Ɲ?l{?H?p?? ?2ȘE+0>+>Wf9>Zk? ?sJ0<׼!hux=?)j??  GfN???Ap5>t?w'*>@]?y2<>#>S>w?*n>3P`?>^??>?f?J>8?8q?@>Gj?-??G?/žҏcX?6?dL??&?2r>G?p7># ?S?I;?6?J?0b">`#>4>=c'=åVQ?Ǵv?i?^B>>_%F<%^k7gȥk Yݿ+j?_oc\===?"?ݾ\2>>?{>ښ?9N=В+=I@>_?cO45<=>p>>{?n6@(JK? ?2,'=$O> =J>?/7zc@ c?"k>l4v?p>< >A1)>s-B?v?{n9c?h{?.辇|N?x>>xGܿ@,F??܁?taN<>?>x?G =>v?"> ~{?)>>?^Y6>UJ8P?-aվc~=yb?NP?b>y=?zvf"?ʁ<=?c?? |Q>!(> ^>pocketsphinx-5prealpha/test/data/tidigits/man.ah.z4548a.mfc0000664000175000017500000003155012504317076020707 00000000000000 @!no@;C>=þ. >>م@4?l?qd=(>'q@nP& ?4E;5|$9 Ͼ{=?ds?3? t>5@@@hl-5p>H%;kc<"= w>*@WJ@f]S0:>3_;?)?;-?R?(@NDsG]>G,!FlX>{0>@;>ǿ ?[ǿ->?A ?q}1ɾl@f?g IEC>ƾb:u ?>>W >-[?Uc@w)q >q~>~?h?o`B?1 >7@8]?1=ϽO>?H?9*?"?%?81p@1N?֣?1oV> N?CF>Hާ?p??zX1?C>@x?Z>>S?C?I4j} ??>/?@VED?kL$A+v=Y=xސ?;4>C??>@p*Q >ľ ?'tξrb4g?)ޝ?1 ?B>>`@H=L?#myMUES=+:N?*?b™?/?>@:A?3m?` ?|=/L>>j?so >} ;…?+>(@p4l:>Jh>\^?$lP>="=ѭ??\z>޷>6Y>~-@Ǿ<{{?XJٿ4<|<[>+%??i(?,0=ʕK@`ē;e?;h?>uy>K_qr>u??=iv> ?H`_@Ƹ@Y?(}S>Ywn ?HX?<?(?Q"?" N=@d@2??|`cb=G?x?Qq?@H^.s@v?^<]˻<ĝ7|?uŒ=6vΓ?}@<(@JM>Mb=?vi>,=R&?>B~A*@?Û4? 34N??$dſ~ek>w?Ay=2E@h7??>ݿp]A̿,??O;?dþ,?8>|Ao@@I?;?¼>|?t?9Eb?!@cA 93A4@|?i6@6F>?r-:п<*AinoA u@?5@$7?VV >,Aјף5A%b@y@G?vH꿗P?Ga8ЉZ>%AwA.u@EC?t?&c=ZJWQ=>7q?zmAaA@>cłAXU=>V;,?=AgA@?j,< 23?B?Կ >H=A s@@~ޖ>V jĿU >?:Bl@䩚@5>QsH#>#>Ȋ$Y=X?|B uq!@Ɓ@?0`_Q>MV{K>?a>B%}@@z6>$hzWEEIH?H3?,Bn@B@S?.|S<оWJwI%gc?pD>bBNH@|W@[Mȿܰ!ix@Q ?3 ?=:B"ؿJ@cQ[@<5:"%-`L1,(+>%?jB*J7@N7@,.2DL9b =%e%^?>dB,h?d@ E11@8>nGk?G>B2>%h?@{dK<,'=(d@?_J>SB6?1$s @& G=S > -*U?D>rB9A?ƿ @d/B3>^9 ?D>NB; @3@Y[w>aվ*S oN?hB?@S?2@ܿJICRCY>0cITR?P?mRjBC8@WS6@ -ɩM#f>$}>7ퟨ7?EBBb@P݊@K=ֿo>F?-oo}=?ue"B@@sz@P>Ei°>j?H=q:y;.>3?Mj*ȏ^NJ?߿T|MB?V@W@2? j6\?t3+?)wB@@S$@ L>5G=Ȅ?js!-?Ҍ9KBBA@ۛD?0|>)ʿD2 ?G6<|V?*BAW@2p?@>`2* _?,\>i>8?AikǾ>??EP>~?8~B@I@vW?{C6&;>FE?$s>ϛ?d*BA2@5~>&c>auB??K~?-ǿeBA@x>Fd9=^?aWQ?ъ?o>lĿ̍qBAV6@KGb>pԿ|?`.@?Q>ۃDBBs@S*Q4#>M>aП@? =5I㿩PBC3@{[lr2C%= K(o`$@!? >I|w[~BC@d#j~}K/Vپ eě%W@=j?">B2叿Nx;;"w@tD??YT}rB>Q@?y'Q-jbb6#?[?+'>eNB8V@B?VUslj5'N??;^?l(=B5@E@?qo뽿_/r 4ڿR5u >Ӝ>GB0T@] ?2b}<)>`q>W.P?!y=?/n?3jB/:@~r@{! (j>ej{,lsϿ>1? ?9B@@@{s[ LK>;ؿ&dNzi=Z$!Y>i?.qBaAf@]C03QǾ>&L>܉rL>ѳj>,A@@a? VT>it=5M~>]o?p>E> A>c@0f@? ?-M?>a >=n>=Aw? @oE>}>$>G?fG,<= *vDAA?P,7?C Q>n?֔+>FXC >?E.AԳJ-q ۿba>$?DuGDAxZpVf*#kW&U0 ľE9$h> $<>YZ>R)c gA]o#>~66^< >;)E>s>6/4A^,=l>(?OX=%御F=IB$79 QA-(=w>m?r/kQa>N>14=+LAGcAap>H,t>Q ?B ? ;I'!m>ߋ?vJN=AQ# t@KbP >?6 Ĕ1{LA "%ֿ!?:>1?%&|>!<'l0AH@?C\m,=?x?4?L?h ޽>uA@X@?p濴h?b>Hֿ5Wn0=M k?rCWBc@z>@?k9P?r齣W>X b>6>EB@kN@龓ݭп> ^=b?J߱>>Hp>ABa@2@Ul >I&aaా'ˣ=/<^9>s>`m>B]@ե@Tba/3Zk<Ҿg~>I cp7>rB'@@tҙ a(.>2!? O?(=&B.c@@>Hm={>;? ?pnn>G>_sB7@0-@Uj[X >>`r?OR9 >`? uB<.@?֌*.>m>jL?5AP>ߙ>B?@>9^d\ɱ?/ ?dƿA>ת(? >.>BA5@L .8g>ص?<{f1n#??Y.]BD@5yYjkR>BR?W!˿~?g?Ͽ3+BD@<ȴiY!SϽX?/ªqvv?ф?fBC=@׿'DȾb?*DQf ??tYB>j@h9|bhP/a:?L]P8M? a@S)B>Y@|/01>d?N]T4J??u@d=B:~@33>9k?L\cfc>f@1 ۴B.AԶ)δ-Z? ^?t!$)(H%?y@ ȈBoAt]"?|_/0?=h)pa>c@V&BAl7?@T?1ܿ?H*>8ܵ?B1/@A?@#@2@Gvf@HE><]><=*&ܾ.[?bYAD&@0ې@y>?,?i?<.߾]2VAi>@߽񣠽3vya>Nl=Z2A$`I&?j>hg?`j>b,>,K?">ʜ?+A3V)"??JV_=G*~>=N1ϼ|=8>eAW^?W?aU?_J?&?={;E@CCa?!,AH7I2?n~&>{=?"R?> 0>>>]AJUp`_?^ zx*>r?d?>þ2ƿ3?j5A)v@@: N?'11?O?.'>O8> J\/AoV@+.> >>=J>ӽ`z?4A4k ?0?hF?b>_=M8?> [sq>pXAK$R>˥??a?H<}>tL?My?Pt+KmB=@םE>xҿO{=z4͆iP'SCg?DlC$gBO@[{+>cN>mR{? N?"sjBX[@%>(m|>%- ?O?p eھ\CB^ם?5Wjbs:k? D>J''??#yB^?[-l0BU>J>29??z%콻B^P?%]-f 7?G>V?^??c6&Ҽ}1B^)?N">̾? q2??6 nѽH.B^?s4,G=$* ?Bd?xo?ņ׼B^?S M + ?*/=7?QD?!7`T=D*8B]? 2fȽΔUl?sU=?1?*;=XB^?.ҿ"?z0%=?M>. =qB^߼?ަ㠿QE}'?q>]?$T>* =bOB]?Г!}eWMJE1?>?d>-\mʱB[E? ܿ8kBD ?ri'?E?l?+v?L^?BYk?qZggw_'?S??(G?%`Y,BUJ@F9Az-[Z񿴕u-@ ? ?z?!?wBQK@!,W4U˿7[͈(F>?p!>D?D뿱}BK@E rFP[? _濤ƽB?V@k௿Z>>I̿N 3`-?_??TOGѽ4#B$l@@^>k>\ǽB\&>>O*?lMRB~:@Jُl?[_?|>G,(e>N? 4 "A@|<@4b>?2> 6ƿ5>JvؽL?kX>?ҿIPA@h@Zv@%@[o/@BO(&t=-?Kտ19AM@!@@E?>W{Dɾڱ$4+>Ik>AK?F@P9?X?s>?$=[:gҥ<-=<,:AqK @bV?¾&>T8?5?2?:A[? >m2A) ?zm>E?iRk???*@ j7%ETھpAd[) O뿄I񏾊d>@A2QD?-?S=PR=MA~.>[?3aAG%u{:?  OD&?<>ℶ>>';A/cLF6ZJT:?= HB=W?;BG? .AD$oɾ~{?McϿ ? ?_? ?AgݿJrnpϻ;6j>y?tCd? Jֽ6AP`u?\f⾿ο]򾘺?9>?_=?MTAwչ<,>XN.ɿVϟߩ|.>?>EAcg=]>{16x ii =޹>>;W>nAx\)@C@V?bs@?2>\,#=LU>Zh?>WB&gA Dm@j;X/>v=GeN?= 5>#rB,u@Ϯ@ӿhD^Z?>IB.@Š@(+F}*.;,>C>p%m >>6bB/@P@m1:j<҂>8Y_L> >9\>B.;@@ 徭᪄d(;b=>^>ɓg>>cB.3@@D|Aw׫K>9>Im? +>p> B(g@Α/@Xrt?>$j">7X"P>?oIB&ۖ@@i>jfQm~

u?J?пTBk?y ?B)f@ݣ@ >Ƥۧ d ;(|60?1Zx/-?1?[B,@@ ͽ$rF?vKԬ?< i?aH>gB.@Y?Q>!SѿɄ>O>R k?+,9?P&rB2 4@S߾L.?k>zL^?c!~@oBB5=Au>묿U? n?;?/e9@ zIzB4A>]Vѿ ?n?+Cv@)ʃB2zZA-- ~"d09,@D])Z@r'3B2A.2֎ ip>dM>N>ȿI@$:N2@fB5A%Q^~>/n>ek]: S@/$@ JB:]A.mz.?rNRGv2>Mˠ@?O@ sQ'BɛN>|սг@$X2]?ڽ=B@@,=~~Bb|=>q@V㿆l>^N?+BD@@sȭ\?>pJ)O (>>@Ɵ>x%u>4BH @"gx?~0`3n?Mâ?2=$wBL@M@ ⿿ t1?=->X+#?=U>>i6BO@`tI@äsa?<>G?Pၾ7I>E:BP-@ yp@ҿאYYaH?{?q? 3=V@BQK?ľ<ܽ 6 @]_'b0?ՂU?o>YR>NBN>K<4@F]d*4I3;%??>=>ݽVBO*Bhhdt\@H9*53?Е:Sd>ʾHevBK=uP@-'27?7=>d> @>5¾jBB]?_e@M_,96,%?oXJb? <#?6B<9C[V@]$4?; >dz?>*(OB?@Cy5ǿ? @U~>K?5>5 ;/B=Ʃ>@KU$aJ%ft?(' V>A? ]F>JXLwB/. -?L@xv!r E? fY>w?KF>gj>oB&y`?՛@̲Sw7 ?T:? X?X?Y#>/TB#Z> Y?@YRiy2jK?+C>%>ڟ%>AZ!?X@3I@ 'KI>5?9>pY?;e>[A @vK@nAǿ Bf? D-*xK>> >m?Z`Ao@|@i@Jf?fd{wf#ݿ"%۾jʨ>9|;@s AEE@qM@(@@w?.'cBZ1Vv ACd@Bk@ @.@13ھ>{?#K?=FX멾#7l@i#?s?f@!?6坿>}%>\->KS@F@)2>¿4!Mn ?GH>yp>v?>H>Ѧ\l@!+m@J?#w:d>q?'=} >>.Z@}Bk??G'ƿ/3@ !>:!2?=i2~6!@:T@.ݙ?i ~_UѾ8?q?-f ?̀>LBD&A&lZ?(:t<Ϳ#>1< c <>%TԽׅ4BDcp?.쾦+>KidM2=>?>4BJ'rR3 "?K2Y? p?q?ɧ4cB 7v?ä@ İ|!?d)qN>"߂/?J>AI!h =@a>RE{ ?>5]$߈fjAZٍA@пE7P?Ѳ9=``߿b?*M?BA}<@MqE,?'J(Q\?a4'>A[~Z?TL4M?jk?sk٘a>ßA?A)?9 -+؊}?+?@>_Կ-VĽS(>3.AC IA>L ??G0>+?67?lB x4=/\?P&A_?!u_@&><}rW> @7=+ oA?߿Q??Z' ?Ok> ?[,f>Ѥ;*ƶA4@x.8a??z?d?`5'@t}@: /ք|A@Ox R?@*> ?_=?o𿯅,GS6:A@ٱ;?џ@A?CLH?g>Y?`#?&x->-eAw?\OY@-@Eܟ?:>ĽK;>Wgc!-7cƒ6Aa8?F^?@??t?5k>q1ӿ<AT ? =??1?-?{?vk=QO?SC=he[[>A.K>[*n=@R??5z>F>K>MFPBA!|R?,[? h?#H?Qn>=+&. EAپpM?Dj?=!?RlF>>`-->#$A[:MlHAAo> >,?S8t?,=-?l6N:W$\mrپAY?nBU>~?ˋ?X=>HA?&?e"g}Ծ/TZwA ۡ)>5? >&>>6?'x>3Š6-D-\?\?Yľ׹>m>(>?C 6@[ѿ?{?Ɣ>F,?;G>>A"1OI迍i?8@Pg}>*d=1>8i?=*D@0@š^{TWʊ>Vmk#?1-=l=;5z@Zڿp?QO?Y;>5t!oHP?F>?g@ g??.>t>6t"6=?r(k H5A} Ͻe뾃>t#?2ř?E 647u> \Ap@nf2MKG􆷿9k@rݿ?V@r?Y׿#=cĊBH?wJy>AY=@(!a\==E?rğ?2Z>4E߿ ZW >!@%!?q?No>05$6?&[,?!R> Y>$@5οC!@oʿP?p=lDfE'1>I>ꕼ@Jп?"s==˿\7=8>u:&_R<Ӎ"jc@L$?>==>/6?p?f>fKrvt;@??_y?>c>>Ѱ?6eh$Epocketsphinx-5prealpha/test/data/tidigits/man.ah.844o1a.mfc0000664000175000017500000002611412504317076020670 00000000000000 A~BN( @Dtf@#@4V )*i>FPWAoXVi? m@ >@~O>.ɿP>l?.tAq2?h9Kÿ?L@Vx?%r@;뾜>gⱾoAe-kď*ˤ@<l?.!@&Gm>?441rHAt/(@L"[?K<@Y¾҉?tGxAsSP3s?9+,>?>m%пm:7&A"0~?x3?$@V4X/K?/ܿh濎@YG?%>5 >?Q>u-?]>'c{30p@)4A=!?a(#gN>G}>1|Ⱦi@y>Tɿ1dX>튾>_A>@$o/#>CK;'"_=3忬+b>Y?Eb?b{= !@L;E?^=<>IL>5t=ޡ>??5?$_U@$(̞? {IF.>SĿ(ۿ y?m%8?~m=T<>UY@C:?Oݾ|[9徰TC8+>Pf@Vgu>m?td7?)9}6?5l>0>WĠ@3v̫?ʿS3FG>=X?T p=$p>j>Pl@P@,;WZ?ĿJ;o*?!h?TQ@a4@u>u> Y?Q<{>Q??a{,.>Ċ@ W>@f?Mʍ?(e>?$>sl5?3|o@Ȇxҝ?]]?_n?h&=W*?>|?W.}@kiG?OJ>rU ?"Gb?W?rv3??aEgC? F@*?@?K =+??_߽~\R?v@?Cr?㞿A#G&?? NK!:)?8+?"2?6 ?OJ=ț ?f%=jAF6"@C>iQ2/?չm(?P{>ѫο 5R?;"ؕA\j@ @\V;?X?G?I[n>&o=AK@-"@^- >':?bN+9 )$w>ج"23B-PĿD[?}$R@-c-V?ܢԾ?9>g>?4tB8Y@Y@um*?XTR>!?v` L$k BJb;@< @p ʲ%D^>lsϿ2?zd?Qʰ=ÿ;JBQ\E@@pz$Y!>#'uY?V?>м BBP@y@[~M J?=(y+1?u>4M>?B3 >>w@U@u՛:>b?؜m!96Q?]D=p;O=6RB6ݾl@@}t?s5paj? t B8C^@@'(ndSؾ׃>V6C?4>MǮB?8A@@%r?ɿ`tjw>f%>{=":BC)@.s@biv^I "!?/1(G>)Q>BTBD?aw@q@U g|48D2S8T?0=s>Kn3B;Md@B@'JPZt>iU?:2> >u(fB)v)@b#@o/ٿpf+?13=?|,~>8A^@)h@!@z̿qֿ2=(<",= C?]6!A@ @&%4@WA>_c=O35駟>As1@WO@\@̾& M>e{i>28< ¿Q>ޭA=SL? d@@u?(?Цr|P}]3BAW@V@W-ͽ⻽_D= ?;R"¿pY AE1UL'@R3=@j+ ypB>?>ʿ0Nu>hA:)jH?==O7>S%>=hJɾAppH?#㿹h>-."}Vg ?/x虁AڪR~@mv?Qyӿ?{M.>d> {=rlAW\1@?<$߾wh?r?>f9.lhAOlV/gE?Zv9űӿ38(I=>t?8^ƁAGm^AkHgN?{ǿ" nLr>%,{?4& A~ K ?7F|r T-?LtAʙkA3`k_6 >?ƓI=Rͽ쾥5A3*˿8XhVMpA.Bc!wỈL)?@,`>@8AOJ/u>ʜ>:=ԿZc穾 e><`>?%2RAusY K>o׿Bc? "=>^Ă>)xA?4yu b%h>4xo?i.>>y?cA̳O>Ͽ+͑=QmR{Ox{5>?U+>SBu#=C @ ]׾&)Nq@ɎA׫{zt ;f38&!cv?!g0>^s>gag$>A1zcеi?pûi8h?7~?T>Mf>OIPA9v?Q!x Zl Ge?ȣ?;>Pj=gZMAi?5C>6>f>>MȄ?O'?l?M_=WAnA8@dH=SzUE0ӽ>#$>tEO>n=pB"#@@. p=?n ?Uˎ3?B,xS@3?ǿ#-{? ]6?~(b?f?BB-@!@R>Ν ?|?VQ?zț<=B/J0@J@uO+k>?t-?f?yWJT0B/@H(? ja>?/?ġ?MoB0u@ڿ9?\~\O??f??eZŗB/@?I34%?%?p LI?|l?x\Yf7?h9MNB19@2?ƪ>??:>q?NفB1j@?  VD>c?7(>Qi.?c+-8YB1Q@ c?naQT>?I?<@=:}=B?0bHB29:@=??"5[ȿaV>?z8/ >ԝ?߿iB3EAʧ?puYC쿸 ]6@ IxMI?Ia?促B2A >pY׾˶@#x =SŴ?\?^bB1͑Ai&WuP!4@!}+?u?7 B0KA0!ІdC8@=??S>B)APri`zڅοIym?￘IX?S?&HBsAqs=EGe2kϿ9U?>9x0șg@x?}PBB:RAK`?t>u%xFb'?C5"/?->/MA>e@Co@(V@"?|=?_e?&v>״]F*P*&A>l(>e@G? ?\?8Q?ت>aHj?%9<ཋI=/8A8l:?پdQ"ѿYſcE>?L#rAoKc_q>Kqp '>*;:A?^?vͣܝtsSG ?"r?#E?qA7<]y;?)g?>>?՛>AcA| L;Cs +쿵`?]?A=5>D =JI>9Ag5ʍN?!K"B>l]?/?4?^ԕ鱽NA `ꁿڇ;?7鿜*Z-1>>:;?=`i>AFSdw?d 裿l`;X_~=ć?;>"ArP\>1İ?v=óx>t=QAq,>5ݚ?HD?i+(|B(?|<?#;?<,A3p=:#?c?=>S=)Ǣ?# i>E3I?fAX骾势[3ʿU>g^?>ݿ0;???$A:?v@>!&???=C?9 0FܰfA^KvK'BA;N@HFUC0m?p߿?I=~D? 5B(@N^@/ Z#xJm?2+?F#Z9?eCa B+@m@7 k9vz=ӌ?/ݿ?>hd?0=+B-@Ǜ@=; TѽQz?hϜ?:WU?7`nB/N@X@)ptn.h0??Tu?=wB/J@d@B#V=.?C4?D?@\$tB2 @6@ۿپ <?_g?v?km7B2@?+̾$> Rq? ?kKz[?8ԕB13@?2h>l ##@d?n.?> ?\1TyB4@7?k) />Z?Y|o>ǚ?I?+dB6@֥=97r"Q)6?u?ȫ^?#qۛB6@A<$K5ol,",XF?-Kÿ??6?( B6@B`ދs4?l޿U>v?<@ÇB7A j)!w=,E{?wZ>x&?H*@4eB7WA'fL4q8>h@k"?g? >JL@.=)B5}A9޿$KW? K?{ܽń?0ǘ=lxv@&+迸B3*A R߿i?ܿC?c|X(?*`/?ؼ4?YB3*$A ; Fq5a?\??? ?NJ Cg`?fxB4;A ztj? xQ?N# 3;?ځx?뿐B6A ޿-x?n?ʦ^?ډ{>?ӿB=:@wQ/p&Hq?n-U?ϨIJ|?d*?zA?1UZ?#? >~ƨFBE7~@Q ~>=@5?ٿs 5?Sc?<ڿsBG@3b`$P>J 0?ȿ>??`SBFK@h:i?g?a˚@0?P>!D)BH"N@߿> -j>LG0&=VE?Z?G Z BE@w8?*> mhRuLì@ ?€BD@i)?Q4b=r#@?d`@BC@B8Ky>) Kc@?7,蝩ŮBB@EнL*a|~煿/@?¾~ڿʺB@,@Ul?I.<é+@?>zAB>]d@]?L3>=g oMs?~?}ֺB:@C?0Z >|̽u???m? 5B8@I?af?K8 d>6..?5?0N?tOʿB4s@X?c⿹Ɨ?W-&`>J0c@t?F#WB2@@Fwdt?(Կ)>t9)y?OJ?=9@B0@v@3vοňc>Ób>! =?g?q>|B+dG@@nf >>n&W?I1?>Դ|B'@&@6㿳r>k">8?qJw?ZX>HB%=@b@[$=%:xq>D'_?:X(?>B!]@n@ޮc"ь0IaH>bӿˠW??{>Xq?B*@@l'þ9tX>l?W>먄>"BY*@p@(h,[Q(>k?p@/;>>& B@|@IV>88L#p_B+?T>)-/B I@@?4ˎ$K޺"@?"E-?7žB*iA @Q?HH#^zY?B -P>uXBhZA)Z@Z?uo@R:$1:? ]-U?DOBbAL@?==[=-U0gp>J N?.7=B3@@ɨ?tI>2K꾶 !,H>"A΋>Wk>ٴB e9@@U=G=ܿS}\Df¿ ?>fB @`@:RZznſwN ;?1?-,_B@h@U4 ?ˉz >Z.t?Q?_@B@T@tEM?Sm&MLEu?1?&B"C@u@GDN?^E='nM?`rh?gy-B$S@Н@yɰ&a?3>=tl󾼵>F? O?B$sN@*:@EE1C=v@?y:߃\?VgDA(H=G?Hv9B*4@w@3]8@_i ?3J~O> >@&|B/@@w@^%q?沾F3h?`eB3u@ |@a@Lm ?CĤOe?4 ࿿gB7>@?h*@T >Ҿ_Ń?p77B:C@p>`xC8@R!4> Ἕ=l?BAeB;@*o=ˬN(`@O3; ?H8=u?v1B:c@ÿ w[(@Czq?., `d>?]$pOB9@v]0m@&BT#>?p>bT>?~?ě&!B4# @ en @=?>?'j0?wտ|˹B3@a(g=G{;$cv?L 21??p?9aB1x@o+(ISҿ:ބ?!>?(?a>ݿĿB*&@uZ6?05F?G͛=ů/?d=쿞>B@S!>9b:X%=Å>?U>õѿͿlB @>bJ v?R? r?beTBb@??B?X|;½ݩT8>2`s=)>$ >z0BXA@q?j @P?_.,Ѿ;?, '? !8Qv=LsdA@z?P@7?ȿÀu08x?pP#>Q̦-I;>@Ag@=$j? <@O ?cp=8d?b>=/BB@>O@_٩?]A6Ug]%>̛?8Z=)B{@?@:U?܁ Ⱦ},?xF>TE_>XwA@?ls@Y?;<=# ?z @=n^<_A5@cV?@h_?). ,?A>/I7q0|6eAE@ěC@@C?o=>5&G?u{ L忑S>0>GAfJ@@!@S@ma?˿>..V>SE=AV@?1@@@2*=g=Jk p?Ja{q>;>Mk9A@3@J1.@?㤨Q1 ?X3\A@{@$@@@" Y@;XN?X 9?-AxZ?\@di@m@ 1Qn>WcY?X ?.>Y>y0>S AEZs@-@wWq@>b eJu~?å?F O>AYu?@(?H־V\"$h?׼J{3K>9?Az6/a@n@ȾGJ?V>B>6]Aw8 @G^>Ԃڿi;m ?? s/Q>vCA,X=]0?L0OYcA?-xf?#>L>eAM?5 @KIe3`^-\?Z?5O#J?z=AAx?K*?J HLA> xOADRZ?)@:?N*9H]P>`U}S־K>=Ao־(&?[ 0ɸ;>?i,0$R?{,@0 3 )?E ͜ſz? a t%{?4(A bBv?o$?Ѷ,&F#'>MFؿK2IA W?/Q?ȵ9ї򿋧Zg5+꾃]>?3{@x%?L?LH's@>6M5|WH3w s/0xt@?=,>(J a$^8V8(VV{N@ϻX>P???Tҿc>8DX(U>O{a֓B2=>M=ԍ>>M̵@?e%?+>N>A???y=%88#A6~=h>y0׾`翓3qzE>zAT !?K>8? lOe{,j>?~>TZ@@#?I>-ǾL"(>ݴ>-C>~a>-!H@x@o@)> 2>U#?4쾕sZq={y=@r˚?)?T>.𾤙S>6z9n2aU@{-M0?8$E?tO$>о =zv⾾AY@x??B? Ͼ۾>؉aw8 ?> 8 澘#A_!?Pz>_r?1=((cDT?@*V?:1>v=ݿW>=@%Ji?~>?c\UY?>my?\=¥>|=n@m@?,"pwp<>"n>b?彩mk @G6>?Y= >Ԍ3?]?C>l??J>C?Y83?ō>¾OEC?>Z6?my@G>WQ?Q?p?J-b>?]? u8??!ێ>٨`@g???f,?$;N=;5??o]?H>lO>|t?@6I@? o?4?<@@?J?ѫ?&w[>C>p ?L?ܓ?g>>;@?ik<?S?voh>Ϳ7)@:5?ՓcO= \?1~> >F^>=A_T;AJKڔVd k tgjo=ш˼@Ɔ%??!ᤳ߽?s=I_zEq?? TN@ןw@֮~s?!7:B@ǁ4=zf_L <5>H>я?@6@ "? v?u>=!V'n?$i@ ('^,@ ??o X>8g>g>M5>?\xR? ``пxeR[@>9Q?M5f+>+?@(>?e<.?-?J@?gOp??4O>9?os?hs>2??W="-H>@^?^l??ߏ??q ?d)p>MR?p{?Oľx?3>?N>?g>?> I_?-̿zc?㠽NH>Rv@>1C¿_>メm>{-?!% QF>\k>^V??QzUL?t|?)>W?׾m]? A>ƾ|?![C!c;?d5_N>y?j.4>l-?#?jx?X@T>), [?p>*=N">>ܿ;rP?f$?f?0"T>Ԝ=F?'W=7?>??7kb?"?𾙐0j>Ba ?dm?|1e>:>>f?0i>Ǹ? >k>S|> >#e@y龻.?M4>f>??&>=#>H?)?·?.U鲽>]?>Ā??72?d9?=1=>׾?7>(>-?]?Z>۽fAs$B>?9??`?l\??> >KܼqkA*G}?@A91.% [(?{<2l-Aܿ?@D@MͿA5 =>n?#З-GſA*@ne@_x@IVzp)ٿ?O?? [ԃ1BQ@2@?rPI %>h?{⥠d>c >)M̿0B @{@C?= Z#Զ>>laIBN@@ʜ?TοˆjHԿ˾T5%:_ ˿B@̸@̤4?ܹN;]/%yA?I??eT迈~B @;@@w>LB)z/.R9zf>0B44@O+@@Oy>=qԿ1y#=o߆Bd?@;@QB 1xm9ÿ-~>T8o%B 8i?%b@@!IU$V2`%a>,񪿿9cB?= @pO@&E#~ ʬ31hV?4O}BB&> @@8;sK.-]=_ň=[ܿB8c@e=M@W#FfЇeȸˌQ>s6o-BK)Y@1@mp|:&?.+(\=, $dBU&?UA@SCDKK*#>k̾LB[e@e;?;<؛5-#RE⿱שG B^0@Ų?+K@+) ̈́ V{BBaȄ;@jN??&/Ӻ+kc O^ٿ*ݿ8MBe?G@Vz?Y'%  >q7/y>vf+ᄄ=Bgm@5@I~ u>9Qp6^uL你Y ޭB`j?T@C<]72҅翆Cо>y@!aB[F@,Gõ@A:c -H_ܿDdPG;BY@m@O?)~>MJۄ_Q$|~0PrAB_Ϊ@-W?KԿLs#~m'>[-Bbgp@yZ?ŏ$=lZR^͌Xֽv ?H TBg@+m!?.y0Z 毿Nݿݓˋ ?%AyBl@C<*W2i3<7Nu>T¿"Bp@T&?F?2RU>S>I꯿@­y?1_Bq`?j&urN43Q>ˍȿYy ꩾ}L8%Bu?&㐾&QX ?q_r5v0zʻ<BzfO>:.ln9?u mQ ,@jB}]kO_}&gf?'yɿUտJ:Bჿ ׿{TѢ%W? .=g%&9M0KQ}GBYB;Ԁ:u!?A4؜s<ՅoɸBv "ɭCDeQ׷?TV=ʭTB?l`EW1?g>mDd侻ʟ1[I>B°6}R;i_?/i뉐˖!LB9u ~?i o:.?=BTa[ "B0q^7#SS?8:O־⿤IBtU2}u.?'|7gP пK % B Tr*ٲg?i(!abQ, &Q;{BDzB;vV?(ؾѪ+N;!5,S;VB_Nڿht労?~g.YslrF&T)B<5?Tڿȃ}?'+c?~p!|6BX :H%Ϳ&?-xFJjc=gBZ%hzf?ҌLiIRGB(Fahrph? C v'jB~JcS࿰{ L?bƹO5,Ͽ0'']ᅬB{M|ݦi TzO ;v?7)( 0mrQBv~bbm8c?`?S|p ̄O9BsK`H Gy1~6?$vCV4Fg LhۇBm+$Ys9;C_>ݰq,ZT`JBj=kM`Ft~c>qBJs'ieT8{Bg1?Qܸ6>׬sysxaT?/(tH3\ o⿴B`M?Ul>Ccͼ{<]ʾ.BR?%BZB2@VtH>ԋqQe&aN>1VAC} `pB@@0k>b1,`Ʒ>MN7gSNHȿY\B5@F?!ˀ C}?G濫Dh Ҽhf" B*Wm@.>uxff>࿌rz 8R$/B@?M?q*j?8A;@sY>Khzwzup$CtnAu@Xv@`?g'Y1tͼẼAE[?󑎾{?}?v`>}WO() ȿm=n\KUoAοD]J2?x@,/?^`ح>,,= AB_su>E@ F)𿉸IۿaM@?)cA`}2"'P?Ϳ>¿9(v9HEQA>E3?>$H)=`J?d:[wF?>Ê ASz:@ ?Jÿƞ?t8to>urzξ0I>=>CA? z/D?J?뿀lLr>fo &>Aa=7WAmL[?+I@}s4 ^m >i-At%XnHB@8z?𮿥(o0 %?] ؊Va AY)m?ޖ?Pe>\>=Ŀ|??|AYÿ:"@ ?G?,1vvh,>8󔿉!?U>D4A3F(K@l@)xs@`\>ӒBd1>K\{?KAg:?4@-`&dCaFN..> (=-TA(?y@b濙r>%>cJ$?7<6>:A5ܿ?f3@.!*BC&Y4Av?*$;Ψawj>@フdk@m_?\@ ? >}Hڿ㩿ͿL?1@J]@]^V@G@ ?>{>B>\.Ͼ\T>Ȇ￉?ܿ@Lˎ@?>/4?ժ ?3u4@?j=>4翎Y@&Rv@.s?e@?`?z^?N?"H?9>]Rֿ?~'[@mp?x?7???V3?>'+Tz2煉@"*Cߒ@A@@?jg??yǾ?1O>D>D>e@.'V ?P}?9?(>8? 쿲>'>?1d>*@*?ͳ?ߪ?~?L<&s>>vE?HB?"R@=Q=y?d?"e_>O|?t4> > >@I?L?L^?[? >݄?>=?p^a? ?Z>\>u??|z?Q9??Qw>?M?)?M2?2t>f?,>\?X2?o{ >1?Cd?0G>ꠙ??^*>?(s?-?u?t¿Yܕb>m?$e>EX#%gYn;?uIvKb>q=t^>2dD,{L?!r! bb_?gPc=?>5%?GF?kC?>>=ROC=g!lӣ? t?AB?ف??-??II= |ؾE4>g_?n?@_?d=?l?iK?"?8b>U<|H?c??̏F?X0 ?$?q3?澽+;j>H1?4GP?&?>"w?[j3=*=fz&?^]?iVU===>K>XW,?|>(??Q?&R?'?*?z?!Lf>Eg?ߡ_?[?H>i>ɪ??4V>?3)?AZ>4kpocketsphinx-5prealpha/test/data/tidigits/lm/0000775000175000017500000000000012560377662016615 500000000000000pocketsphinx-5prealpha/test/data/tidigits/lm/tidigits.lm.bin0000664000175000017500000100045112546074702021450 00000000000000Trie Language Model@* (# *# fffffffffffttDohzeroonetwothreefourfivesixseveneightninepocketsphinx-5prealpha/test/data/tidigits/lm/tidigits.dic0000664000175000017500000000045312505034521021017 00000000000000eight EY_eight T_eight five F_five AY_five V_five four F_four OW_four R_four nine N_nine AY_nine N_nine_2 oh OW_oh one W_one AX_one N_one seven S_seven EH_seven V_seven E_seven N_seven six S_six I_six K_six S_six_2 three TH_three R_three II_three two T_two OO_two zero Z_zero II_zero R_zero OW_zero pocketsphinx-5prealpha/test/data/tidigits/lm/tidigits.fsg0000664000175000017500000000156712505034521021046 00000000000000FSG_BEGIN digits NUM_STATES 24 START_STATE 0 FINAL_STATE 23 # Transitions TRANSITION 0 1 0.0909 TRANSITION 0 2 0.0909 TRANSITION 0 3 0.0909 TRANSITION 0 4 0.0909 TRANSITION 0 5 0.0909 TRANSITION 0 6 0.0909 TRANSITION 0 7 0.0909 TRANSITION 0 8 0.0909 TRANSITION 0 9 0.0909 TRANSITION 0 10 0.0909 TRANSITION 0 11 0.0909 TRANSITION 1 12 1.0 one TRANSITION 2 13 1.0 two TRANSITION 3 14 1.0 three TRANSITION 4 15 1.0 four TRANSITION 5 16 1.0 five TRANSITION 6 17 1.0 six TRANSITION 7 18 1.0 seven TRANSITION 8 19 1.0 eight TRANSITION 9 20 1.0 nine TRANSITION 10 21 1.0 oh TRANSITION 11 22 1.0 zero TRANSITION 12 23 0.0909 TRANSITION 13 23 0.0909 TRANSITION 14 23 0.0909 TRANSITION 15 23 0.0909 TRANSITION 16 23 0.0909 TRANSITION 17 23 0.0909 TRANSITION 18 23 0.0909 TRANSITION 19 23 0.0909 TRANSITION 20 23 0.0909 TRANSITION 21 23 0.0909 TRANSITION 22 23 0.0909 TRANSITION 23 0 1.0 FSG_END pocketsphinx-5prealpha/test/data/tidigits/woman.ak.8a.mfc0000664000175000017500000001532412504317076020632 00000000000000?ܙf??oo?se?=#?:>o ?DA>J?T?9;}J0?DuL>֋? />W]>F>4?>35D5x>6>A?zcRu?]?+龗2;A>=?il~@|?Xل>).>]??ͺ?U>=IJ?)>į??I?c灻i? ;֌"MÔ)?|k}?>,v>"ݨF>i?6>l?'?[ϼX>o?O 0a'_(?q?J Z>nϽ5ל?8?t?/T>dž<2~>\n?7?ZJm? ?'>v@>?&z`g?(Կ >A8mJ :?d,?9?9[?1|3-?'?R>>gQs?>^ >hs?g9p>?#?0?Ux@??=>l|X=$W>Q? gF>> c? >*?[PVF? ~? >?8_Y~о7F҇M>{>-?րWe? :?E)X?.>r>8Z>ξZ>C={> >~D>z@k>u?}>>k?>Cb>['λF0o=?d??M*߾C>>2)U?j.?>VO1>f>?m=(q? >@c>n6q=X?u?i=kN>>_I>@-?$?<>F徼?#F?{oR?T}??!>׽ A?@?+*?>>P=-e?`?:>U>k?K;m4?6ҿ\r>?cy? >Vv?}?8>#>Y @3%?dǾ=lȾ>?2NO?&;>-ؾ5ό>6>[nb?$?~u?h?-?>Ŀ?iAD?!>c`X=:gf?A?d`?ʾ7!ydQ?A.'=>?9.? d9@`r?(:=\{>:1m>7Q_>HH?z@I`ݾ蛾~?6?#+>.>Ze>3h>W?x ?5˿#t>=#;Ⱦ稾;UOe?Q$Z5q?1s>M1 `0 ]W>ؠ?@>H=ߕ?x,@=t?\??5۽l58>{>tp =%?4L 7@Vah?'?*ɽ~ʿ&D>L?'?F5? E ?Q/ ?ϻF;:?De>jQ9ؾ=N> CA@3?fO?v>0j=[}>n82?PHr>d>We?ѫJX;@=E?>4M'P?Z:>?r2>Z>g>okf@5?li?B>R?cR>>Ӽ?J >l='@ޫ@!?N>{?X2??%s7=3Z"o@ֵ_j?i>x#Ž>/]>?6>̷='y>VBj>t=?+?@?s(>?mxӤ?$"ܻ??iJ?h;?m@ ?;l>?:SM?cQ>&2>0? ?# >n=&?up>Ѽ=>oZ?>˒>"1XX>=)ἥ?6s>ˤ>.X/?-<5%o>gyVi>Vɖ>:=.> _;Zy>?h?^lE4e3ɿ>~?A>w?F(Y<۽>>79F?>IzC ?#? m/=d>l<=@9 @ ?A[=>?K?޲?,>7('&v@kf?M6> w~Cq0A}4>̚C, s50LR?.?7p>-~?\8R?p=~>#>? =:$j?KW? >?:Z@@Y ?(]>Z?GG>տ>_f> pX'Q?#vAAM?ؾvT+;? ?qN>_??@Ծ?:R>_@Y1@Y?)A?(>\89??N??i9>R?3BD>c/?=t?9=΀a0Y| ?J?) :(??ЪؿG=gW>_? > շQ|Ov?T[@Ī@ ;Qg Ia)?,}G?ţM":>=4?!A@H?ݕɿv}?D?/>G@O>}fJt.{/?1A*P7?\"qm?`?z@t=[4r)?N@$рȽW(ӿy?6$?X@ ?E_d>@C=@{o5iha>c#?)+4@)qn??ɓb?zA~9?`>^?Ml?wXG~^?tm?Z>ʹ?܈>?2#>IP>k??͒==l,?Ǧ??Ջ,:?C?>?N?c8;>,u?M]>4@Dƒ?,??u%>>T?Cd?6!D??=KB$8^ؿ|?N?*1B y3|ii?|@L>Y>)$/"* H>ϤiBvܮ?C~ r?5.?2E*u0c?'E4>:?aϿ6t3 ͳYS Bzt"kſ~?>YLdXs\ypBzgNfv>ɐ>>¾sӾYR IBz_x׿l俼r =&>)RYZkZRkB{"3?.S(>eeyt]迈;Bz{Q#|+җ͑*G?Ӿ>nlrve\ W6ݿ4 NBx_(>8vA}k-Ox~:XȿZ?2KBuk.)>0 bMfVI=0kT 'oeBr.h=?lZBFiF!h%ۿ~u#PBs2[?b9dυ!l7_Ez-]ɿNjÿAtJ5BrG?z;ڿh⿧rǽp \пT뽄Il0BslUf@GW iĜ#HZ=;V>kBr U@GT8xLʹоF ̾ =lfBq@BUݿ;)s <C> \_BoF¸@OqBá3H;D}>P/?|K׮Bm`*/@hyھD2x  %S۪>?$6V2Biy|@CC)Q&5] `= > e? 5?k_[rBf>uY@,%9ڵ>7Rn#>>?B?|ErB`fffa@+NeX{w=\J?F?@:<{ /j>袽P4u> ? _roB[Dz@]R 3jh]<@>d4WBY)@]r27^"=k>Wo>i.DBVi@!Z}>MFQ_BQLw@|yX_O:~|U6Y!ٚjBMl^@劆WN𓿬PRſBxp|T -BF j@~s>IWvYr͗@ˎ>0+mN !B97Ӛ@ >S=b}J`u9пq=&YB%@?ki@eɺvܾ2.1>RʄB29p@?l:pf;lxr=.>HB zA?q(*~yrmIOF2?)(>B?$J@߼@,qþјqC`k?s<>w=Aw@{U@3@%34>@V)?+2>li?'/@U?;@J?1  !%A] rϾNVeP @Q>tL@G=?n*+)ŏƿ11s=@jQQWx?6?X?׿-6`@\I >3G&n>>>zؼ?J!?g O?3q?PK5x7.>뗽ρj>7>?^T=|%4??VܽGzվZz>V˩??g*Z =xbT?؋>{,?;%?`48?E>>qj?GF4x>r?dD?F?ZY@6,D*?Ʊ?>.>%;3>>?3?^Ң? >g'Al?5־"(ݾ =y?HӼb>>ŧQ)?.C?\P=B>K$!=ͫ>2"A yl?( >sN>꾡6 6`k> ?7?~~?/~|=GL>y*<=>՛A%5Կ,@;>!;8Y'r'K>ďAL+^?u@Lp? +)E~:K鄿u@-x }x@?V>M5 gzƇpֿ?B6Q^1x@Gz@9@8?i<RCcF9?&$>5[%Ad@9@=?*﹠.HrjLK˿G?ɒ྄V@[C ?t>R#pf87ep9?Ni@ZX)>ch?0?u}ۿb'?,޾?V>0ː@P옠??b)?v^쿨g?uh\]m?{?(m@zQ>R??Jܛ/:B=7]p?:->֫`@b@h>=7A??v<>2?%$@ @P@?c=A:ſ`1Ϳ+v=_D>F>8Ce>Uۭ@4@;6@?`70xjِ=M9== @~(@F2C@)l?8=w}g _v?GFwI>Ǵ>? W@@,> ~sB@[f9 ?e/? ?tr2*?h< m,==o?'d?y85>!? c?&_?B>ց>x~4żH_H8>U>cm@Zoqxu?ϼS??(ÿF ?{p>~J?0Q=x 2k@qPI'?e (@ ߾f}?yt?:ġ, >o'A=??>}=b>؅o=0?J?6B+>f;>:>>?w??܃?0r>hڂ?h=>>O+վD/?2?)>"P>:>e?Tξ'$}b;% X?ܵ'?;?&|e?z>?M?;>t>C3=?MG/?>e.?*=k1 !?o>6.u8h;sV?ԩZV?>n?>>>(`>[?3vX>@?.(]?1z(>W=A?zϾ=~>a?-?r?"[Kpocketsphinx-5prealpha/test/data/tidigits/test-tidigits-fsg.match0000664000175000017500000000231012505034521022470 00000000000000one one one (man.ah.111a -23836) one (man.ah.1b -16020) two nine three four zero (man.ah.2934za -29903) three five oh (man.ah.35oa -21384) three oh (man.ah.3oa -15858) four six two five (man.ah.4625a -27355) five eight eight zero zero (man.ah.588zza -28085) six three (man.ah.63a -19220) six oh one three eight (man.ah.6o838a -29624) seven five nine one three (man.ah.75913a -37448) eight four four oh one (man.ah.844o1a -29307) eight (man.ah.8b -18143) nine (man.ah.9b -14690) oh seven eight nine (man.ah.o789a -24922) zero four five four eight (man.ah.z4548a -32667) zero (man.ah.zb -16776) one (woman.ak.1b -17828) two seven six three one seven oh (woman.ak.276317oa -48411) three three four (woman.ak.334a -27875) three zero three zero nine (woman.ak.3z3z9a -36785) four eight zero six six zero zero (woman.ak.48z66zza -49491) five three two (woman.ak.532a -28221) five zero eight seven four (woman.ak.5z874a -41182) six seven two eight zero (woman.ak.6728za -38245) seven five (woman.ak.75a -22517) eight four nine eight three (woman.ak.84983a -39414) eight (woman.ak.8a -17320) nine nine seven three one (woman.ak.99731a -34736) oh six nine (woman.ak.o69a -31297) oh oh (woman.ak.ooa -20626) zero (woman.ak.za -17055) pocketsphinx-5prealpha/test/data/tidigits/man.ah.6o838a.mfc0000664000175000017500000002441412504317076020701 00000000000000 B@63N>TI?ٿ¾JHG?d?m8aV>x?x@ yg?^>i?V>ᾅ?B?f?4 n>><@1-?辆^?L^˾~ZI=+>HZD??3?8> Z@fC-|?JzĿedû{z=T>'r?*KI>p>@?X=gr>䂿>ڢ???*\?-a.jS<@6C@3>Q=A>hq>>vr>dKO&>? @Js?GFL?jE9?2vWl>;62= Eh?1 @S5<5?P"w@?!>i&烾z5q>yU=o}vA?VF%@+8ER?zȿ{~?>5?>=?{@ܓ?'.+[/h >=\?ƾO?!>yp@4i-8@1>Uqr>[ >3!?Wk >7@:I^:?dD X.d⿒+z>Cd>>ת?=21@ k8d?a!нD߾ ?!6(E=J̾/H3@>pf?靿+ ?3ѿ1¾Ba?&>s?>L? F?C;@ ?s>w>ܾ)>?z?>W*Z?yP@x7?+꥿ȃU>>^?u?o=p=p>v@HUM??JtM=oI??=/? >֣m/|@<^?w>ny%' R@H{lJ>BVC@"dw>!{?p¾Eʪots?Q6?&L>sE=K=~>*@U?Kx>*ƿsaed??_ ?g>.Ҿ@E@.F>C??`8>*=Fe?e>)B>e!>z8?qg>̽r6"? o?>->Ϗ@eW ???Mž$cEC(/A,Q-?⯌?>'1&L?!V?-Y>IW>!1>f{Aw%[@ @!A?ZY>ޫ7#?l"4?ߔ?1?M> AaYu@)@CX?#%{?>º?m>?/">A?*?\WA@6Y@܋@?`q ?FJA5?p5>Zf?okA@@;r>?sGD> =?=[oG6D=*MA±q@r<@RD[??26??>Hr>A;Ḁ?Z@I}@>&">ԯ+q?3d>ܾݿU=V4A`'m4@?jH?Lο?>Q?Iʿ@QAjH@>@??;Vb?Z5>W4㾝hAAІ'R3@~-C? Ss)?DZ>>ȥ)>C߰~A@7e@oz\/{=<-%*(]?n2j Oƙ&GAC@l9_ZN (W?=E;񷿥?޾{գA:BϘ@r"먾I= =q~W^ t>^A;@1=}S13ꊎ>L ?7%s> >4\A>y@v=@1fy 4? }+3(QYs?%>WiA!=@aa̾b=+홿տ09 mߘ@RLAO“@2!㺿錾g:վS=kx<wApBp@\#[niuV?7?A?qZGJAN@vw:;|>?ʒ(?2͕?{Ao<˼@^辒οѬ%z>ͭ?tAb[=Bx =%V @]@ݿ3&;Ŀp>mK?uȅd?+R>N!BB:?T?B?a L2?~̣?鿪?pK?Q-B[]d??>gB?\ܘ X?՞Z?R?kBYn,]!\?H#?RS̿4I?\]t?ſ)>??BY*iz Z??Ŀ-;G@ 뗿7?j8L>h?E)dBS=9c?:J@"l$,@-T?u·>8G?""BC"6?4@q>#>LTB@L'7?[F~l>m06B#@\?@W?!zt@@1&>pp>>R澺AD@l>H@?·k;.@&hH?{FEA;d@BJ@(@@ ֈnF ?iG?(A>[4A9]@e@ ?ݠժ?F>7? øABN>K@*fZ?$տGo޿Υk>ƻ>6? >}@?>c>5Aq[#DA'#vo7?m"[g/"~?T-?Ͽ2<>QBH?# 菿#Gv ?oy= ?љ}>h>ɒBU|,?Bm?ě, ?4t??U2.W>?.B ]?N̾8R?FC Y>[B4O@I?v>Jyֿo?׾]ޘ.s>X.B`HY$??K?)} go-?$o1Pӿ?\.x?^BlK$@H0?rL?;&?zI>}x?$vf>2BMI@ezW?h4= ?i#=V G?1G?p\B0g?{@?>&hx>m?A ?@{"?ZԾ_Bu[Z@Q >-b}$ #ALv?{GYj>Rd8B&mL@.?!?egj?fpkO?^? TB?$?˃*֬v@?{#;K>׿s'>:?OMB ?|@Y?˶>~v\OP?޾a? ) >? BDn?Q??&b_L?mp5?ѾeJD?BY>]P>'II;?厾(@Y=CT?BZ>&?XRY??>t@ ῜_n>(nB?BX=.>1k$>uk Yǿޤ}?a?}H?#蘽Qn/?#BW?վFFg`3FD?HX?A? U(?BUr?EꝿEl!J>x N?K?Q;?A=1!>-BS?Ϙt8T1C? ls>Cx?eu?Q@P=OlBRml@T?׈e'?\V׿j?1@ 3؎ =ZUBN8/@6HC>W 7?P{?[?&>]UݾfBJ(W@Om{?dH>֍RΦr??l _ BG}@t?$%>`2aI?ۭ?2WVBCp@K?v *>xIg4?seɿMCU?H?>x/.dB;K@ð?ʷ7) _;$>ucz'%O??T>ɇ|B7 8@ @k&=~ٹ>ڷ6係 I??>#>)B6G@@U>ED9ԿuÿJ??;6>kI> B7@@u.1>gٿm=??H0N>S>v,tB;N@??ˆ }>H2P ???N3=4BAt@-?.0SVX?>AZ1?o?_i-ʔBF:@Ĥ> +S> (P@ s?ֻ8is2-BT?+ܿ\O;> Z$q_?l*?8N?1> ''?WBU?>?kڿS'x?)>؈>/.>i>$??XfBR?*=S:@ҿю3H @"ؾ_<>hb??ھ\-BP9=mS> @+ j9mlaX@ Rp<> >P)hnBP>@@^'rWi@:?㳿 >O>>q@£BOͻ|>@pX4w?;)>&">P>j?*BMPо?@+K@eD?%>d>bh>k۾BK. j?ܳ@+' =R?Q7|>>->C>=B;q@?92@cgGnwb>2=Ϋ>>0>B$o b@U@d&2V]5FZ#;<(|?%>^?.GAp@0M@ClJ@ر: 쿙=zg?T0~=*9SdA_@^n@R>@?VgM^>0xP>*hp{>={耾LA @W@;@ls5@ .~l)i龉޾x{#,;LN3侒4@s?U@n?c!?}?w>䃮/km/G)7K@>#@&%V?Os? &SsD]/;>h>S ?'r@]V19@5J??bݿ3Et݄>>LUj@&?1Z? ]l?RQ0e>+5?>,{>vYDž&58>@J??e?H?NӾ~tB?~?g[̾=W>A5Ƹ,PF>_kkp=ِ=>QтI=U=kѽ (A'WFqNֿ#:=s־d!!#1ALw@&)@˿óvn ?A9qv"??"6+^A7d@@?ml^?KĿLr?>c?7̤?5[>Hq AR@@7?V+'?E~>nQ<1?EA*8@U?hrݽA ?AHV?~@>|S>(A@Iw@OlY=U=ҿ>x???A!@LC?54?Im?\+z?Ao&JȺ@N oI?socs>.>l?W1>H)]?rBI@AbIG?MՔ/do>7+?BDBh@1>|U#_>?p^⹿!?55Ac?&@?"Pి"??A@ AP)Y*Oc?BcU?8c?)οݽgAP#=̾͘"?@?Bѿ pp>Z?3'? >4SοV$;BAhK@a_@R :F*>S>$GȾr>Oj=h_B!A ȯ7u@d?9"-FaZu?*>tS?^2=-B)CJA N@q?#J= =2?^!u*?S'B/@F\F@R?lB>߮ W s?d_>-B4@:V֬@E?=P't>PoK>g:5?8:>"PB7@6J@HS [ >;XCy?grB;W@'5[@UJ1*a+?zTS>>=axB>z@G('r@ՈzW1%?(?e-)i>c>X>B>@f=@V)H#@=V|?>dPAMB@?y&-x@0RYF@)Uȿ@>>r>KB>Q??@p|?sU'cZ=)>5I1>B>=?@]C1?MBؽ->z>IB?O@ S@R<"𢡄?·I4~/=>B=u@U6@fD`q[?ނj<>Ƶ>m6*|BAW@7[9@Vߟ ESό?3Z>D <> &l>ptBB~i@(@ɢNƒfc?I> jv>2>BD¿?@'Nm@»w++K=Z?T>R/>/>/{u>/>=alBF~4C?@Fh3h/=4?4>,>I>BJ=?@;te$>*?tE @?<>>`Y>y/BLFy?N*@XCg[u1l??YS>p>FlBP:XF+>G@QShgXϽ> ?ſ?4> j>҂z[BRҟ$OU>@y]Bt.|5A@?ӿ?to?>7}BV:^>@FN8`?牿> ?M?J>=BWO44@= =-mF?@?Jv?>],ޏBUǾ3`J@TM=9<a@ʎ?T?>{NQBStXs\Y@[g%Tk*@'ǩ ?4ii>8>o}BSM|f@\E|+ &e\`?R%&?lqa=>fiXmBUNmlxu@P&YgV ?y><Ӂ=݅p`BS4 F|@G1v8FF?辳 ~>z=>䭽ǞJnBKLmb@SwG(1{?É_?%y>u>^iEBH:uO*&{@x(YL?ԝ?)O>Y>|BKBThS@BE?ouH5?F >9$>BBDg@8>s@@61wzg9?b>B?3<gjuB5wvZ9?R@:l cN/c=+ٿ>eT?R> =B8a*?i@D@u`q >DqH>0>ȵ+>>mBB7b?Q@ϴx]LUb?/H'+?S=?Zk=pB 9@@d_;*:', y8 >u?a[?=?VA.p@j ^@&+숿g:8>ά?:w?j?|AMD.@C@@?5a5U*m/g? T>׫=R<=: AHb+@ٿ2@]>$?=ҾLp=@>:_"8`ZD.5@PN7T- ?[85޿AT>7?c?5C|G> =ħ@׿]@@L?Z?d?Sv?U4?,?O?ss ο>0[)@ 8?$ȁ̾ dtfo? ?^>=:>A@FοUqJkj?1P&HRay.>A͇@Ȁu>Rꟿo;V? ׿xw+Ϳ ڿ?14Acn@/ ?O?mj>i h@yM6c-tޤ+X?A+5?e?[>_,I=x?P-&p3C>S@,J[?T[>N?K}?'v=#48|@>?)󀾳?3X=f?@(08j?s=)=>Q?;D?e5>?/>>='@yB?!A|տA'> F? >C?'Y0ٿpb@!۽g/#ܽ˖6zR=>䎌?? E2A>Ճox@ @?븊nNLm D?H>uh  A￶`??>g3='o<,?Xz !2=RA*?r8?d=^>ǃ\b{9=ߩlc 3 A=]\??( ?5Kuݽ=y$+=dA} #?^u?Bƍ?-a0r?$d >Aiѿ61L??}x>wT-C>)P?<3D=CA@? ?%>oXH?' ?%f>NAK>(:J>%Ӿ俷>](>~:"wz A?d>h?T/ۿEzS^Kqֿ)LA'??2?&>n0rem@ɿ@0O>U2žݖA(B>ν˶>reF7\ hz? ?ͮ?pL?>;A##s~>d¿}5?K%?IbrY>A-Grr]>o>㹽>=t*[U'/?f ?A]'3OY?g>T">->=8x|JB\<@X)?bAM\?W) )=?8u]e?f79?=A=IWOv> hAuyF&> ?nDЀL?&iC_f@ՐYl/Ai#ޢ6 ?}Jդ?:ڟ@>)*V֪fAX⿹ 6e>)+>UeVNu+>U'>NUrAskܾϿŇ?f?ikU +]t?>7-%ow!忝-Aq76 !?j?J'ξϢc86?5F'>pocketsphinx-5prealpha/test/data/tidigits/woman.ak.532a.mfc0000664000175000017500000002635012504317076020775 00000000000000 9>9Sů>|??_?2;?1 S>Gϭ- :>/1?>>0O?lD?L=g|>A.?_>}t_??|? >Xp >z>K#>ڜ9?I>=-+z>f"R>>Ҿ` = >=@Md?`?ꑿ'm$>|>@?kŜF_п J׻S>^.==?ye?Fl@ ?&Y-7?3O?w̔>1[>0/uW=Dͽ\l>whW??w#^?Ez?? >&>I?W}?w?RQ1gEn?& >]?>Hľ@>>ϥ?1?P>?ژ3?)?c?׈?he>% >2T?=K?Cc>>T? (>(þDx@??2;>Ե%9Ҿ??i)?\?Z 0>h? >n:d">@3"?x@P?M3>_w?ˊ?^˾>?ߴAnǢ9}@8[ 6E> Sޔ>?a> d@%Y >>@$1>Ϋ@w D_t=<"04 >!?ZB'@=??=??JTg>^0@>>@aeD?S?9?/*x='w>йK> Y?ɽe-@:4H?If?yVaDRԾտҿ=` >X2.@@ٿ&7@ZŦ ^꿜1T?40HƎAk\@xG?[FCO͖=֩uiO?^"{@݋x>J @mvֹ=QE?bt?WhC?Ӿ ?|@,?w>r>,N?- $?U>϶rj>m>;4>jr >\Ҿc<?;Tp?j_?΀">[]?Ҭv>=b[O?X*?93/?ʹ>[>RG=c@?l@~?sJ>7Ҿ] ۺV>qG?;g>*%?JC4?C`@G=0BfoJD޿p^>xA_ͭa~9N6k$=w/6>b!==AtnA$;Oӿ\=zqۿE-νL@I?x}?࿄@@u,Vo ^x3")@:OY?qV?"X?&|>P濞8$>C>е?>"@kR:;@:?$?i?+IVB9?=~= ?@>A|W;3 .yc.Md!e(Zݾ=AVs9A Z?XֽK&㝿h QuT{8=^'К?*8{@ (?R|>ɵ>'8]iLпXX>+.0=o?{@"??F۾&N? g ?m}?2c?Z>{?31??ؾ4b>?` O?w?FzFd>7?;>Spvu>S?eͲ?? N?Ζ?O ?%u?ukv@+qt ?} ?e?e?n> (>/?]?>?C &>ep>v?}с??=*c;=?<>?-Q? 9?]оN9xo=Hu?L?++1>H 9^?I>U?m=͛= >L4`??T >J?5?>Va?zD?0ZJ@"0>܆>yK?pu?H2?T?Q>Ҁz?lw?A?Zd@`o? "? &>e=*>c`?w?JdZS^9A?6 ?"?y \?_%>>O#>hz>g?M?1?=>5?X n1?Y=j_?z~v>{?&6?`I?E~??J w迂>T֞x?bdƯhph۽x?cV?8?zE>?ϝ>3/>e#e ? ?1?,>?>4?ga??e~r{->{>ʿ^%>">h@&>>~A#xv!P?`X&:Կϓ,> b1/mg(>hl@mW?y?|?\j>,.?9b?@e?}$m iA=2t=??A;_[.7*L}澫_;1e=B$5B*E}0_UX̄Կοq ݽ0Gtip>@F/TνɪB3 3nC:Ὶ}G>K z<:`&|oBA0@pX`^4">*0ؘG>G_5=(`Bbh5@ͭƱrXa.M?By$=^G0><■pBk?E[ٶomꢿIοB?^RZ>3Bp/>m/37 >K_?Xօ=a>"M=>g|Br)#5KC=S;S7X> Ԫ kxs=m%Bt;أ )T޿>ҽ$s>e׿sn=U3؉RBu+s ӿ喨.>r t>Un`=I _.BsܫX [ +>űV1>>:SտaLh4!BuCb { ǿƾ)>s]JYQ> 氿K'Bu ,">Q=3@'c8 GqBw5~u &=ߛq A쁿v/ QB{-ݿS> ?3L>̈́ȿ(> ʲ%ByJ`8?vaZ>!ԾpQm,V֎?RXBzl62zەc<rwOr?Bzܒ2/ EzZ\+z;߅A^ vݾ&B}҉Cq9TTпa>'(}Ϳ.ZSTM@vBŪ^b?9彉VxYؿxEb=LՓB|@`9^sCTTOc7?"C]mܿBǧ3lH=.>]~*. SB>xiN.>2 ad>T΋˿ mB*%?@WT-_J?vn˿Qik=u0`B|om̉? 3*@(I3IFmT=ꤾ8VYBxG༻݂[N92#`@u0Ͽ/ǿ^;퇿5gyBt5ޓ_$ɮ@ ׿WX+y ܿ𾿛Q/Bno ju%?"=۴`=]~)Ba)?PA/?=O Կކ~n;ؿj6BHR@@5?E^{? H/,*u7jiJB'x@Aq?@F Tdia,+=!m" RPA>@@t?(ٿ2ſɌ*t:A4^@,@Sk?m *+TB(p?ăEWAӗo>Bh@VAx->hݿVh(񶦾΍QF]Y7TAliJ?`=˿aJ9D\l皉={1>ԼA}o[> ;>yLM>ӕ>[2I2<>A,LN=[`p>/>??d>NԿ"þdAgm?~ ?ӵ??jS?o|l?mf*>2:A>A -r?+rX?A׾)?? ݢ?%!h?Iƽ슿vo?#ax@, ?I+"z>?(s=^ ?&n?7?/>{F>?xaP?&Ⱦ48rD7ko2o>*< O=1@gX2YX>{ƒĹ,geɿ`Bx?As??u?SL ( S>B(Bc 껛-qb?+?^?4@?i>eB/@Q?(Q MG3"?@޿?+ȿG⿫B]8KUIޅS;пiR8:s=-K;#tWB^QpOo GTDJM*uYWc(>IBV=$CH#?8q+2|">q? rh0>-1?:Z&|B+=֮c @Gf;l̿c >3gMCNhB34>3a@097ۿo3f0kv/N9u>BN(@WP~?)F"S1lx:=vi TBW6b@3< >܎KQn=1@LX=tо{BWF@k1Jőey#5|6|BW'Z@rn~>&lW ş?-㿋~omm ^FBWq@,Լ=1~el>=X汿L]P^yBYe@I\V">[gzu"4>¡G#}+6TkBZ@?CXz"uk,7>Dfe<8>ڽQB\~?H@s?e: G'=T'Sb}b ?:.;#-*B\>~-? :Žj[ym?'!X~ a} B[VJ)]@2IM5L>ڰfRv)>t>=ozBYbP?@ iBȣ/5AM?%S=p>_P+BV7?w@Y QiJ#⺷?'ܭ?>#D7kBS^@z@v\ TEi >Þ?^> PeBNR@7?T^GV+HO>?KA{>_![BGGP9@?y>-0 @ݿS&>)T?3?>iB>)@6? k0uN{>>8?lſmB8f@B@*S\.|n?RLXB44@@ 6%)l']&2j>3?C ٿB1V^A Ȇ@#e/!|t;7?? 9YOzB(2A`A@ ӿn3B($r׾d?>>x, Bc.WA5?ij6ABX>[.(mc>+v0Oo,A3>8Aӭ@ 4 f=*=ѿҽJͿ,KAJ?]A3@,?zƼc%Ro>>[># iJA@+3@m@a> q/l IH?=>|>柘@Nϑ@*~hu ۜf`sD>P^?<> ?@ݿ|@:>e(<:;6@?G>m?%=$m 5@,<@n?޽uzx],;?zT?>>>6x>y}v?8nYU[_?o>?#j>ȗ%?Fse, >,B@?xJ>h^= >o?LBq?0>c>)ԾE̟?@'?y???w>[i>%e$6?ɾ K=>n?y?TX?;>/>/oD=$Q>ؾ1_?k%>wB + z3vUP敾Nྃzr> K":=Bx?E*:oO=&غ>(4>i[0>o΍B_r?&] ?ݿw @[d? wuC<5>QzݾkBB'Aաt@uR,?q> HU?%U<(>া'>zQ?}g{?&Ջψ#B˛+]2@X?M>=<{?|̾*ao-BcZ:+@, I?۾և>}&̴%7"?#C>jB4@Y ^s<,?N=\b[=΂5b:#>UoBy @ueOݾ=4EnzQ>eB&_.AHJ>MTXſ9 G1b濯Û'Fސ̾A ~B;F|S@?0F? 6',Tcglڿ[$Wd@BT>Y@zy?u^> <>k B>BJBU9cw@@ @?J¿?>->|j PBTb @~?$c e$W=\|-gc!ȝ4TBS᭿@@u ZV~s>\6>D> ;1BQ @؇?*Qvw$;?S'_9YBOb{@@! hu݉: >K>d<(FkBNsb@m@'Ö@A<~C?|GR1,BL\k?T@t¦@)~.=/z~:? ؼfR>BBH@|g%@Ƭ.t9 ~?$XxL%QPJ\BB?CJ@OsvruQb"=5mM)B8y@@&r@Zƴ*+=l{ eB45@@r@8 @3v|#ѿؾj+>Jׄ0B-6@f ??gyA& rNxl翛HB*"@Ii@ d?sF)b7j?dN쿙Ϳߛ+B,+@ @0[?N\E֬,72!8NB*?d@H?Ia4O.]b螿T= )B'=$?S@NX?zKտKum% t8 #B#k?^U@Yp?D_^lb%,!,&!)E;uBs?@}?uJg[ɿҠ iIU߭EW M{B@ `@l?K),  ܿlN~"qSқPm2BrL@Td@G?ƅJIe<4MPS8B @t@?4/;wA`.*jΖ1p,BMK@Ǻ?:R? `޿i S3οn5)AM>@ᔗ@"(?ܿ?mT'2 dA7@켨@is?S?_5_u?.aAOA@š? B? ?I?oX(>^!L YxA'@qhzp=@Mɂ@ ܿq:>5~+ʾ8j.Jq#AX@=Ǯ@\?=6klp?|9?n~+lf悽UB \?h4֕@|s︿pdؾ ?@^¿,?ZH AeI@?@Y>uw@YZ뿊֗?㽼"{?S¿*ӟA?@v@+S@i7zӗ-?ZT;?- ſQξ[?mƿAt=??Z@PE??Z>u敿"{?ƿ6%IT9$6?[V?xH?xAPGx>?k@(??篾eKeՌ?E9&@XϾ̿A,F&q@?@a?܇MLtϿHӈ?tA5#ȿ}@Ɩ+?I$>G.,?]$< @h"f AZr^t>@b?۽>->*@ƲB?M=?E UA ˿@w?J?!=*LSi=B|H[!>icC?~A[Vv>bnt@(l eb0Ǿr* Kt?RfAJF߾5@?>p澿mIn>VupR?S?̿JhA>/ @-p? `2>i<ɨ?#}+U\=?ѿ!qA𦿬r.@Qp>~ K#F?@?!*"C?QqjAH H7`@y?>v3>@:ĿM%>ϋA.#E@ׄ?>ސ??k⾚?9Ũ@?ξ@q)?Y6>:E?>|u>O XUws?w=L@>YYi@崿o#n<׭>JOᏼ5?ȿq BAA?@/??=Zcdm` 8iP?ԇr@DP?|@u'?Bف?X?5 ?F]Ht?F{'V@H(>.@@|?+ U?TǾ?~?@:]@/B? : Z$xw@><@T > @nsA?JEL?B~?JMz$B6=:R?ꔛ1@)>@gq?TR0W M=( t^qt?ijtH@6q@0!@(?cY>>85vgT @?u@0t?Z@0fb?#Q_2xվ?;@j0q?@>ˇCB]>yx[>s=(N`=mџ>&u@8?@?B]>}>J>u|= Ͽ0[?e@V]\?@t1@ -?4?k.>bY=?Lq='@]q|@pO@)IQ@*?n->ی?0R> ?Qc>n=h6@}?)g@;%>ky>:myّ0>YA51=@d@z? ?'[Q=> ¾qNR̫?B޿GK@Ahz>|P@*?VX(?&>b)|O.t?V+-@Fn`:@ ?E?R?w Ŝ=U}x8s?NT@&'I?I~@F?}?3?-^?BzR=q>T=?(p?)>A`> 3ǾZ?=>5>ʾ>*T>Ҍ[>@]o.? @5l3;>Ѹg@%>r*j>!I>Mc@??>xo?Hnd?mf =>>=B0pocketsphinx-5prealpha/test/data/tidigits/hmm/0000775000175000017500000000000012560377662016766 500000000000000pocketsphinx-5prealpha/test/data/tidigits/hmm/means0000664000175000017500000014611212504317076017730 00000000000000s3 version 1.0 chksum0 yes endhdr D3"  3?1?@W{?60?Ij2Z(wSM=Lf>>t>_>-`>@>?Ƀ?a$P5;>HJ> [ut@fg#@n^@@p??y?#s?B?^ ?I_U>u &=(ASS@Fkꗧ{?`?>>"ܩ"0V>ϟ>e/)?F?B?[?X??$"?A陿?ҿ(M(?]3)<5Psgݵ? r@!?W~;>]>=0=:aR=>->@}b?6E@K@'|?>tw>A>l+>?P>@q|Ǡ:"C-YZ?=V7;Cֵε&9Ac?! /R9 ?zK;>RN?稾KF~!|%Q??6?1?p?]>6>;M,>l(? @a>iƈ>&+h0?̠?*W]P@ ?=a)$=?uC?_"?;>$߽ @фO־3d?R쿗(?'>cܾp4y=-NE1c@1Bz?,F?+?G?{ ?>2+.G Hǝ?xe%?W?R?N@b`>}M?t>FA)@=.ѐ?A>:ٞ=bǾX"@,žw>?f>?;>Z>==>(A(@{O=D u>?@};*]֒@?d0@\>5-п MpI?J?k?f?T@$ؿ6@RK$>i>;)!T=@O).J~f=NM*?!7?Ŀby,S7@>%j{@PC>?ܘD?:׾>??v>*8@f{?I^?|ֿ\䠙70 Y`<}zA4T@2^>X?MR>ҿp5",>hGN&Sr>@>q/@?~yЭM'S?>+j>Iuн b# p=܂^/'_r8!4ъZ$+> >"?~?!2?E)5>ZI׽/>s=޿j >]_CO"{@Ŗ@g;m??!=²>_<,H>#:>A]WuT@gd u̡E?'-/Ɓ?Gn>h ƾ>}8d1>l:@9'fLz%G": ߾Ԓ6?Е? D0?X'@OٌO"*P@{?Nu?!Q(u?տ&-0]>V!Ay>a60e4n@^ >W>]Z?hG>X>$6?,?{d[>/I>.b?MпZ F4+ ?<˲=0?>ߟ 8@c@(@8??5?g>h<_0?ϣ@)2& FFu?H=_|?Z!?jM>ēVr?tEf @U>Z??>m? j?>V? ?y{?>>@A=俸>F[?ZWo>V>|>~<>jx﴿o_KE?9+p"f5& c7}l@F;?h@ 9W>>E UF?_DWB_>MqǾy 9bXdj?}~ ?'>=r0Xyń@%??U?L>̍>x >?r{>S!aQ?H?T>S߾?A&<7>t]c?Em?s?@? ??9/?e>ۨ>&B>_>ت>>m>rD"_=:2?NV  >9Ѿ?u[6q1@=\#@@( ?讠?aFO>h?{I>>r>>@ f?^J9i|?ă(4?<wT' > A$q@@@ CzQ=LΑ=QRH헼@q>p 8?п04x?./g9?է ?9@Æ1@bM5':/Op潆3?Yi>7 >$C־@ԏ5j>r?z> > >g;`|?o@6?+@/ϲCDu6>)JS[y=S0C@?{-@Ckytӿi,?E\ӾǾ~?va)V?> @u!y?jǿS>Y:>i[yoPo}?, <|!]d1?dv?ZǾ72Q>N0b7b?m@@*fh?ވÿ]?y0 LǍ l@c28D?6 |u>,[>gX3n?ˏI7B> EI|os?`ܠ?1>?!=7";?=;>y=>r@C>]>?>DZT-;{>JD@5y> TZK?O>?O>&TÓʾ>h ?=Oi%>[:k>0F>>.,@(?? hF:/AlI1Ln@ȃSS*=:se>k6ڿAZ>)?cs?/mbfA ?c) A@^'@&?˾דѼ>H=|@H ;K޿8b>>Uad_Ѿ&l~??^?I۹Qɡ%οo?YEÿe=ƿ5#Wkf@FPnMsX ?ƾ)LU>Tv&=@':|[>@j@֗?/?g ?Z ?`>Yz>U>`q>@U?A:POس?CW ?ou?_mȹ=_Zf>*-Adl?N>TQ>;?3bc?JI @?>V)'=t>CX|M]Жvӽ(_<X?Q?u>9=U>c?y!?R?=ӧ>xH>?l?f_7p.fF9ҾOٿ<6}J @Bmb3>PœA8B?5,?S¿؏?ˡ%=kɸ?w>=`q?㭈>߾>2 krP@ADpg>1$6G4򴿌߽RN?#f?ni>//ϴaо]~?V9!@5@پ㚿!x?k0@20@Vh6G}?@0>rIY)>ը>ix@S:{J@K3t(v>k-KC?5,9fU@N\?[˾3>E+r?e>/>U>;?H@"A^1k*n4@H>@d>DCT?>P2>὾C;!? |\B?;>' >G'x>jAVI4[ _ߟ>?o @@k; {@SпՂH9V?r>>2?>ʋvh??0I(>?#>>$?H>|>y@@Y8-s?<`W##?Hƾoƥi(> j띿д;J@$B¿ȈT>/r$\>'?kվsHԾP;!¾Y?yz?yIC⻿f.汾 7fοҾSuTտi˹.|^UU>~>›?Ņ>`X@0?_>u8P=?Ʋ*?›>!ԗ@M?n?@?>/;S&Wݾ5A(5_d񩎾"''?H3+~>?#/WɿX@٪@JJ"Mkᾮz{}?#.@ K}KC~T<7 @h|yz!K`> @_???`hH?7??׈?lk?W`.[? {>/ @P?2L?04=?MD?!?4.1? ?O+?:@>@j?)>=,?h1@=>yz5[{{?3 &b;8b?0=Cog>x??3?\у?t o>S?~e*?ByH? A2V@dإ<|?UEN!ֿ :D>>?>NAq2D^@E;YE?WyT>xǾeG@??4n?欿% 5=`N>7k]?.f?>w?Q?9g>"dnƾ[t-5<ѿTVNo>~ '?+`?k>#={ʽv ?>x> @m?0x@2^bB#?sL? ?M߽N=T@&W?+:P?$N64r1v?I@0oܾ??R?m|-?>d>DqK =7M+f?~@p.9>k,> H U>S1>Y={| Ё솿An :??҈?̬>$m?e[d˿v H?|G?7F;cW\?X?a?]=?>Oӡ><}>??|i>??)b@*>@卿Ֆd?F羆jD=<ń#ɿ-P^??=Pj>LKP?u>Mi>>'>i? ed֚b?uP?> >C68XR=s>'7@ /?yW?4[?>(}>>-<=}&>ց:CP>cg>'e=ۀ><>*r<]0>l\˿֙^>?~"G?o?=]?lO??v>@??:M>Y.3(Y?Ɂ>ܻg>zW ?A󾋮TCf ?*?4?a?K~;?C>o(A(}/?:Ǿki>=//@ ?ct?ܾ<@b@ ROd>A% >=?ͮ?R.i8AAL+@dRA$Q¾#?h4t%}+mFݾ-?,=%3}?`*!1?uA?]B>1F>>|>>å>c8T@9@DͲRrN[0?}3>3:׼JdB @? ?U5?,a?O\?؆?/X?L?8?<>B3@$_{ o!? x?k>잉"x>~k@?^?u970ijοHͿeU3D:?K6'O?QoUf?,8>=z8OQ᤾=@Æ46@'Eؿ70o>R>?+ >?O 5@rZ?ᾝ?G\1> ?+~g|?e?+F+44j??,2 >o=3>>u ?%?Co??%{V?c>l?~dW>|z?mdZ`@@%@U?])[~%}Lmܓ:60 AQ[?ȿ+FQ.+ZI.˖i^n &@gA>Zl>e[?Ƥ?FW~ep콚ħ9w_@mHĜ E?(?gG*Xr}JoAAs%܌?>q*?`l)ˮ(I=D}&z{;y=:>>L >>z]%@U?>D`?*7wY?p?$?H>ܴ?ҵ?o%H̿,2Yw? &2@R?֌п*vE>ub@>p@?B_z-վ>wdҦ=?@桶b|ǿ ?B ?mC!>۱A+J*?FԾ̿U?_?%?rd=s=msY>D'<>%;=?e}uj>>p^> B ?IK>@0@r'@1͝?Q> $~N[\!8=@B6I?*@@?d>k^m>oby2 jK>?mM@͵?9=)4߿.lIkt0> >'1>@岞˦fͿ#>C?7&>:6vצ"a>|bE@42ϝ{>>L2ؽngؿL)d;9UA8QV@egXĶ]>s> ?N>oSX} >?>^>7?ٴ?B@S>{}>\R= >\t/@<7azV? OOr[-=-%Ӿߧ#C@աx@{@eI?f?Y_#?j??te$?a'?4>T@^aY?@Lпy>(eS?vIV[7@?ª>gujӾϖ/eXg%>#ܿLYg@BG@yfR+(]"־z"E?8S }?;t3 K%@|>+/@ϩ>?ew9R2\ý8F @*>:n՟?~J?h?P~?-m;i??qKҿc?9S@i?U(?\^?08?o?? p@t?žƀĿ6KʿC:?=?>2>f V@v;i.Oj?ߚ?"( ? >)hb`uǰ@C';V6? }o?H@?5=l(*j @_R(??ϝ`!>xoо%~>7@a?G@6^8uNyկHK`m@1nix?>%=S?>*9>K>i5?C>> P@t:ǃ/@[W>,y2=Hq@KZ4>vcWZ >>>{m>ēe>=?@@r:\[?#A'L (7ܲi?@6y-@ Q?t"<ն?>*Ͽyu?X ½YjYſN??&}>P)?X##Am@Uȿ((z1UPq΂'ZF[{V< Aӎ?b0>qq?ߟɳKȾ J=xV0$??hיA߿ @>?Ƥ?yY¾!S%>?<=x{j=$Oy̼Sҽ{/>!Ջ0->?ۜ<>ֿw? ?)БP=yGоH=7$Z>G>k @?_@ m??K>v >3C .*ݏLY+W|S?I?f?]>p?b>uy>=r>>>k>y>Io?WA^B컓K툽?Kg?V ڿAUO?5N>nКJ!4ɿSԢ.Q.@q @jLx:%?ޓoT-ýo(>cf?<- @{@3@o$ YU;W+V?q Aql@?à*Hd"ОԪ̾?߃oW~@&;،>k?Ԇ&#T?vg?"v= <{L?]@g>h=%@>J>#`?>=mJ?GW>=+ZX>`MǾIX?5?Vs?7?w`q>c>8-=jS/>fq?h ?"Cp??Q=>ȗ? r\> e@2Ŀ66d2?R۾^2NV=?&'Ss4j@0п >Έ?mkMlCt| ?+?5\ܾPݢzgq=>lAٯW2C?MaY>9Z2+D3* ?@,?dS?>n?4?[?H>+>?҇s?BL?> ?h_C?-^!??-J>s>n>j>L@"!'M#?ѳj@;A"?^Q |cmqdG}u5k?`3?A=H?I>gyԽSߙ?浅>>>ɥkow?>`?ct?":?Q?в?? ?z~?!`?:F$@@s>>=?m.f댿0־S&$>&f@;?U?])?.P=>QJ>H=>|>ArF?\g92?ZϿ]X=Fk>~=Q8@!n>\@P?9VͿZ̾Hu>=K5'%s*?z?u#>Kl>>L~>E>\|>>$ٿ4J]=@BC=W+?Ϙ>{B "j>b> @ =z?'N ~\0A=gc>!s);4u@wD¾)bΑ*V=ufn27UN;k>D??N6?+ü$f=$=о=@jD,?'?~)YK?^>1ۿ+wV=>*?&C?ؠf?2g?i_?o0?#4?12?T`?h?"ڽT?Sf>䤆=q>>ET@X*AM@GyB@c?? <#?Chcӽ>)@C.@Ծ?UD>'><#m?a>i>&@o=cߐna5 ֿ(ڹ>Ab>/ҋ{>@8i@O+&Ay>Al(G;=@#2@n]@W@A#?n%=,qS13m@~? q:@9?4T[?HԿFG٫?dq ?;뾐K@|@?y=(| ԿR܄N-M?(?K+@?C?? GV?>ټ:?>2rJ>'@_@}B@I@!J_׿盳@($⪷?@?=~#%>?cw?dֿ"̏)?k~>bU?zE @'p@?yp?_Q?_=W>k1>;{C?Ѿ>h>Ǧ-??K1@-@Ξ?l??j?J?ڦn?KA?n%V@|ߠ ?>2>V2<6y6=)AU4wῈ1?*t̾>XU?7";刺R? ,?TI;8ZĽP;F!?XQɾ!9ұ 69S? ?7?9>+!?A)??+"?H?]?A? _Jo^=f?dIm?F?!8-A[{ʽINLSw#=үe?7wWP_4#k;)e>3O>?)"?{iq? ?-4?>i?Q>>R?$A@#ԿB'׾>ݱtPMK#ɿH@t/@&R@A@T%>}dN1ƿ5s! @u[?SE#=wS9w3">>@w? .V?i-p?k>=nW>>Ȣ>@5@_@YHU;?/& g)>eF#"Ӿ d ?R%@>KzX?@?" ^l{"+n⪾~$V@W5?> Ӹ? ]?KX>>=$A1?t?DmhUF#K@) 7@վ=?.=t?*?a?3?hOy@^㜿O>4@ ¿:眾V?od?ï>-=?Li@Mҿ]o@(yoSH?,ؚx>`ɽ!p>~$@E:D͜?n?=?ȾEZ<>r=<4qWµ@Or<' I>\? ?ƽ:d.="$?*?b=mžcm`D?&n>?9s=Hh=7쿃l?zp;?=THu;Ս?̓?!2>i@":$1 q@=|~!?M?@~I>@%Ǡ'`"}@Qÿ?m ?b3R"<$|>ע$nBZ>q"<.#<> T>ċy?WT$QS<>>Gb ÿqWw>?j?``eԿ85Q? ?6]%t~>n?i?y&VMu? #?#ҳ_Y@ps>@U8ވO&@>b_d=@>L>=g3A>v@|)쿫`>Ѿ=ʉ>\r9<AoOmSّs> QLś<޿kb*AڒٲyIl͂?ZDYPQ7˿Ħ7[vG)/b?P`P=9l?NX?o?y??X?h?XtwnVKa?:b?4??#l?Ct,)|,?`Ƭ?1bQd?)=>mǪ7|c?}}>f>^7>P>&>">(>uj- @tz=,|z?q>;{J>=m>W?c??{?T!l`ŕ>g?ʿ@Ђs8uf&?x.??lQ@ПP@ b 奿Dd4?կ?UO() i?/ ^?R.@f?@?6zB 5?}>D=WGv5@9STI@Ç@TޣszN!{?%=6>p(i*uՊ?ڑ6Q?=v >q!H=>ȼ;=<=7C=?B@n5?TB k>0>SF>>h=,>^GFܾ5X/5,NZ=R\>~>C;>$H> >ʉ?;_?yWp?.^?4>(T>/s^>QԽጽ?@@}@@T.!42!XEҀ>;;>zl=磡F:=@a@"7@(4-SսB>>=>q?w4X?rH|?/V%&)> _? sv:!?3 S@,YZտ?w[?}W8k >}?ĵ[ƽ|3?*{?L@8<@/>>6=fGzhQ?/~<@@L>?p==d8ږ?'wZ;E5C{Ho4K?r?[h>+>Jĭ>`?HH =Y (1?g?mG> /?Ysv ?_? \?|8NKј?I>#Pz>@1>&ľH=>tOQX>%Ѿ@^u>ac}>R> 3T|=l5>JQ,${>l-юfxs?#݈?O?rS"&=Z?>@FExg@CѢ?g?>q>㽎{?w珠=J>= @?Oп2??yJƾ:9`?V=6z>>g.y>F$ ?KB?V?{$?=ؾ>iFe>.#>8V@.rڿv?pH?I~Cv?hq B~K?a >9>? N?@/?->մ16>?k?ʯ?t +?@f3?@?$ӾC?.AaZ?/?t?\]?qo??vDMc®=Z>Wo>'9?>д=Nѽ[,m=r@W77۾7.>=?>Bn\#:%< =k=^3zƿsP->Ii?~? T%߽O=8+=6n?пeMG?ѿm1ɿ>CvJ?ֽ0>5E>gA.Yi9@ &涿5)P9i?7Z=>RYp='P>b l>t?HC>H) >俾!㾊 1Frt>:g_K>k?>]>6Qx@׿ST: ޷˿Y?[sP>8M*A-'7e޿ >|?&> Hq5b~=u+=9߻=~}=εSY˽M5u#Ӳ=.3]GH7=>m=1&qv'ƽE:ܽR`@:H?a>E*H|d?s[?|Bw㕾'>{c@WU]<@>X!??ۿ}#= ?0>s?]>y<7>k fp$Y>OS|^@H۲y %&_4o>~0/AN*Y@ԙI͝@=>8,?.??󀢿N>z `A?,@\o7~$(D?s?O7"?Nt迈)=U( 9@?@@*@>iIE_>;s?.> T?ʁѽwm@V@ H@gV@>:G>B?@,n+s?/.7>?}>=-=HY<6>{?d=?S?\S?GK?>H>u=B= ?[@gʢ>x,G>v6_־% No\i 2>"X>էn?>1ξ^\;GA( v@C@+%9Y4@!W?'O'?A>V@1@f{.|e@g?+;!?䀾?։I???ܮ?D=?#@ ?@Dw?s!b맽޾<9??W\@*w@?9YJ!?tgr57wư= $fme$O9";že cxlj="sAWٿf9yz8;imquS+39{=6A>x ?ex5;Ѭ= >Z.>=[ETA>>Aھ@ڢN[ɉ=dK>nUT׹Tf=>7.v?-?>C 郿9W-?*~=2BW=^ȵ=a]@?DI5n?3=*Uc?g">`X =?>8@ď_Ki Z<J805_4ts\ X{@~=ϾphտX{15s?0"Q,f!uk@Sҽ5=ʨk>Z>Xk>,W$#!޾P.f%:z=[8>+f>JE>VX?uI?>>}DYlk=>ԙn8@I?" ?3??C7 \Xp SJU>?,d !2]пW?,@j[?ޞ=\TVM>0>ԷdjƑi/\?\<@Qry?|>|⃿$vھh>b;fj+",?=Z?a)?M?=K0p>1>2>D%>4W?-@(?[?*4>"α<־,J=Cw#= p@k|?. @l`?Lwt=<,> ?}@@+}T o7V1)=%?8P>oj?G 1?U@cݻF2E%xGMQ~?,>C?ҺRJ5BR!@խ?Q7+>?_d̾>|V=pi<Ѹ,@@J~>!@z? ?B=&>=Ծ???_?7NؽHo>s8=x^@oǽQ>f?q@?7Mŵ=>=rYҾ Ž>r9T@7?&?AzeV?#IqAbZP?oD"=>ҟ*->ϕ@}Z@o"@z֞@CiSqCBH?+3>W>FNWc>:\?Kő͌e\<kV㐿3o? ??1?(l?{>+?K ?.=?hۭ?_?*@?y?p?B@F@-?ȬTvpX?W?xĻܚ3,DD>@0@(6@hiR*E>}?OYn.jG fvས%(=́<->0>H>:m>7=4@LRk(a:Z뿣sN$r&o^BgXL5llk @dH@P?C?bվ]S<r?!F>HU>7@@eB@ @?:p?>={>_;,>@fGP@;Џ}>^w>`Thy?!d==nuǶ@N%L%?>Ǔ?^O-{\?o @%? ?,؟>`/tL9<#"VJ?@@?dz+?Ve%оܡP=>=L9̀$h>%Q?T5=z?3Bdo>K-ѽM\>N>ؿk~mV?ý2@D|>4X?~91U?E7??+%s> X>>m_@sYX@"7c@A>Iv>k; ? 48H@֧a=O&fAοgT ־w>z?_?b/>iŻS@!:[>48Z 3&6 ?6G??>0s(u<:hx>N=]>C>[>#l->/42|忈)̵9li=O>Io>J4?2J3w@Mw60nq;zs>Hu=>W>=滷=ٷȷ/mj;cx=9?>W>e?!>%|==FH㿱P)?=?Bվh ?[?^\";)^9@n?Lpb4?1/?Oپ6.mEhr#? ??a?0?!΢D5$(OpEd?ۿ?@޺?qva? *=ݟr ZR@0>КQ2=p>&C65"S3:gR(AG?FZ;<{fb7Z=O ;$ľnk| l"]y>ūn?Pѿ:@Nb>.㠾$>V\ xUb\_?Ca@;:># ^,`>.>7,?|򊾗A=2?~VE>=D?,%>gQ?|$?k:Q=?Ä9'??p>&G њ?n-,A,&-?Ԓ>XCAjHn]Ah?Cm@ɼ~+)ѾB>Nx=!g,?K3Ƀ 2rսJe\6ڽ/WY;ɿ/rG?Vwԍx]),\^㽊7[ݿu1~7mPF۳ ξϾ3fX+ Q DA׵Nd h?<>Zjh?8s}N>\>388 >H"<l@?lcCRܿO?HNsUVn?>:Ui=6T@BՐ?M?b?0?~T?:? >`?i@o@?@?z=>uſ?(P?C&^CY?ʈⴿ<=W?j@??ρР 63 >IQ;R?A @L@?>R%HKV=^"@@t#?1w>z?3K?=vpb?dФ@d?|^>j?BִDm?1'Y%?󿯟>@8=1X?2m>pW>=gaI==Zn@>fTo?zi>Xih(%=b*E> @5>??uLg=>P< M?5@s>2N?+@5=Iʲ&0>b ?w= J=<_.ʿEoI:(;=?k>G?M.?F>:܆ӿ5ڿAҪi(=>]W?i???'?C?F>{L!>r>'VPkU ]E>K><>??f?Y>tmؾP>U~>υdW4;a>=>_F>>_>Qq>gǼBC, rD;۞??Ǜ-?Jg?,>>[yq%!bh+:Ҩ@!D3@A!?tQ-?Z^Nl >5ؾN?ɩWu@͟@֎?663҅?¿;d?bu>'?Ā9C?g@|O?%?@>1?U(>?4&>xZF@ol?fT@]?ל?o|r;M?z>kÊ??6dj5'?Ym?Ee8D\s2=?D<(b(@ @_Lvֿ5{?k?jva=0?␰Kp#@O@=`G1icb?<6>r>49d H"7k@@J?- =!P=Y?#E㈡??G=;컾r{>>|}˫)F!>7?s@l1@ u.>IsN#>&?徰Ċ>;?Hu?o=Y?zy>X =>A݁H@>H== ?>e,7 m>^@v\?7'>0Pv<>>l?1(?x%i@|w?T=ZO?i꾴;<> rȾ@=XA{?v?pZtJ> \;J?ź>l=@\?3?ҽѾm]> H^R=8U=^?c?>X?]p_?~&O>>!>J~K '!@K>K3e?U=㋿6B*?9Y>3~准@(>9Vþ2l@笿,#2x?#M>J>>&l=uʴ>š?^GƝT?/H>E C?,B=Cϖ==!=fPX?^CJ?a?>MDpW$i>g4Ah?'sw@=}A>.s?cDN<+a>?e$"'Y@%;ѿ1h@\>Q8>5?t4T򣾑o?-k1@۲n@Hf?ɟ8ei+?S¾R>@r6V>@n>d@@;?b׶p°>{5^mb,Ѿe=\?"@@H^He{?y 4>&T?j>8@{@'a@e/x*e+[@D+>Ͽ?U>ؾ`qAI;@xOj⠾_#gi% 5AP5@MwkVm<`0 Uh._wN~ W>ӄ>m>b<>wo>j>,>k==LSbEzP> q?$?(0?۪?L!?_>?.*?z?1ry%?ڪ~=IX:@>zξ\̺@d7G@LHӿ{A>4׾?{"(B`?1k@0AN?z?/===]Ct><@p@8{ .K@??X㿮>>+=Q>m2A (V@d豾m5hsGA>Oc'↾|>@Apٿ@EGO>B;\=w >KU,?r?a&`?ŻY?'3@?b?Z>&>,Ͼ>H8>d>$i>x=ɥK>9?aK>P>g> s>A>qR>m_>C!;>ڛ=j=`?J<>a?~?۾$?Pž>޽$u= >H @ld@T@. $xw?35cİ>sX%>_av=G?]<حc?;rlO>c6?;jUQ8@k?t>(=3@0>+ֲ?Zw> ?(?X+ov?2v1?2H??}?y8?.<#?D>>2IF`tR@Ւs?6?#,@,=?MN#?kU?D>"Y??0 hin??ꃾК̾>M>^CAV>ʤ>5:?hɾo?ѾN7?>>J>#?E-̢?>@ l>6Qm,BlEЍOK2gMo{h@P??sMV44<߿9h}:j6 %Wݜd=U > >H?>%>= D]=^H<>s晽 =o)>{>6? ?> I>=_!0bD?a*? >JAw@qjS\!U?v>6>?[v?P?$徃К^Ek1>-J@=!9? #Z?9S >2=݅Aѡ+?^+@7>u7G@S>=={=%@8@K?>^@K?=Hg?eo->? =;$@3@@G>4jB?8 ?x>O?S3ɰ@z @?"ՇY}WbSEɈdØ)A5 ?S[?1R [^nA3Z%\P.Q? ?|? ?@>&辣tw#,Q0tk?\G @A?Ѓ?>Xc57E@!ȾR%ܐ#@пb4??Lꆭ=K3&?I뽼T>+iB>C_@tÿؾH?@ܾC>*?X6>o> _NAOJ="?6?H$5?p?; ?>+DMfvᄑ%H>c?8??0PW?F?#h-?zU@@ >!?ťN>#1h>e‘J@֬k@l3?;5s?o}Ҳrt>pa>WKS??T ;b7?P+=jIp>2?}Ҿ5߿* @@ZC,?c>ƶ?tԾ$d?xQ-L?%Y?P?K> >A> n;[@8.N>? S~?z?58BW?L}3G?'n4 .^=?>99=//[4=_G= G hW4=#h>~>*n> r>e=Rs8f;ʿNf1?]?=f-e J?e7?ѾC%:O'84?A@=!x?Kf?[ap0@@5>%^>;=>Kٽ0=#=MN)='>b=;@!&?>>A?, RSt@<*}'?F>E@eLUa@v,àz(p?̤仟>z@fQ@H??*u̾b~˅*|k6l 0|AL@#0?*՗Ez\ƿdL姿ٍE>csu?? E? >V"OǾh>A&?}}m?>)'?L.?ĺ?;w>y3,ܾt?*z?)հ?h?f>Tڽ/vXp=Y¬s;t<8=n7;JA+>\;Ͻ(<ɼjU=뾒/;?8u>= /=e{=4j>bԿ{oĿ h=??f>4y=4>'R=E|>ෛѥC?">T?@V?W=>EN{?+Yl?!q> 5݉AS@L?i?6DJ?FY?c6??dGG?zdxa:CK>Cy>TS?)Q?/Oq q[1ژX?3jԞmd`?F=+9??[bqJ¾z w$?i o>ڒ?p?W?(gHNҔ?<|G$?|3@rοT?!/5nvC?wC$AAz]? >𿱗Ϳk߿sϿs¿Ŀ;;pRDy1A0?n/S9B&ֿDҿcܿoȿR, A_>p== }ͽ+r+9_pǽ|F=;e*P\̽vni3??/ o=V?'Λ(5ym>A;?21 1>(@?:k> @~?NL >v%?h4qi>Q@?;?r.?%3v?Pɦ[xO>?Qi>@\@@py? ^?i̕c ƦZ>0Z?\r ?_ #0@s?fVw(ӝ>?Y `>g>ьcc@f?ݿ+>wұ?G˿E?f>y`͔L[M7?LZe]=>w&@וI=|1"? > g)@kNP@V&c1?1>2 |:U?ؾfg1?(un?˾H͝>`ݿ9_?;bHq@9 =D(C}?$\)^/j-?;p@y;х>:I@NK??r/hD[׾쭾N|@z4R@? ?l?`?6ǝ#L`땿o ]?RC}?V?o=7U{ټs=9@zq쬱W::wUb6?h N(k {Em?>c9?V???b??m:??{>0v=Y0=轖(?Eǫ??@?ך?&}?>z>oҾu%7-?8p!?#&E>*>(os]?Fd=.mn)lB@?-?ս5XU?’>&AiD:~>gMW.uU>ʡ/ZkgE2Ao(MM; &H6>.nͿP\@޿9{wz?6@]>ƿF@>+>]?(1Ծb>H@@F?v迥O>>?ՕK?v_ged>?hgF_ ȿp>jO?L=yxʟ=> >fר?6۽@޿C?:?V%=ӚJ>">_=@Jvl9?T@,(ǿ07m?|)y?ҁ_m<\?;B">ķFCb?Nu@Q S?h?EѥÞ)It?U>Ծɿ>ȸ?R?}>lwH ؽ֫>B+?(>o>+:Rd??S??O$'^+>/K?x>u>T1x̿ݿT>F?qCpXͿz# )=?_8?yH?X>*>NI>7r%I;CԹ?Voi6?N >dic=0L=q#2/7@e @E7u޾F>Zn>'PNJX@s @O@$@~Q>f˼?W[>ns-Im?$l&@^]?Ŵɿخ>=?m Uk4^b=@qc,;?Ax@?g,>>X>I'a|Jx>S^tM}\./>+2?]:?,O?^>Y10Yr^뮿Mj7&?+i?E2?tzR?c>nok%5e?ҾaA?T.>Y?5+JB=!>F7ډ_`8?!d>G@M`a+I->|6'r]R?a> 8h/ ?O>v̌%Ɠ>,v>r??GN?{>п)B׾n?d>9H%?1/?ki>zX Mi>V>h@>w_p=V^.XI ?\@>辤v5sr>.?>Ȁ=_??-]=> C׽hq?N>$@B?@9Mhe_ >1>slm!@?pL?]R?JoL@騼X@ʬ=1J??$i?5A>bgA@J)qO@cK?W?2@W@mlK7*?F@=c1 @$9C@U@ӻ&= =Z;e)P?+_GM??Դ=\jEo*qwC2;xcT^Z־Z?(?T?ҝd>\t1hד9?0??÷?驤?w?\aZ? (,g^}U?g7?Ȩ?1?j???7?&?/ @O??X?e#?mE?>?F?{?h?p#.@v?L?@~@??=h?C??X?h@kS9?(?hq?c΃df?"셽ί}?z[do@` @@-@Ⱦ+4 |uݑ?]d(>60?@6ɾ*R3 sGGRHq5 A\8-=H.6G/8Ak]@ 9E>#=h<_991>xF=u9 >8A}aF?x7 k>۠r߿x߶=pё@MVM> C"@>}"?/Qoh=GR&'?E>>">P͏?>>D7>?lc d>?ֈ1>`d?*>޴ ?z;/>'@wф:H/@<Ӂv?2e>?(/D =Q=+@)ݿr`bU{>?^>?eG<0<1ܳ<Ϳk?l?[?3???@]v?B?d?݃P1ӆSP@H@Q@ @L??W??g?X&!yV)Q+ AOIyɾknԽň\ǾھcN奄ϊF?|pm 8=5>>?4v?>> N>oտ W'=2>P  =x==J=@>j@ -оN@> :> 5.gA z@񌉿B"Mϥ> >=? =Y=E+>s<*.;R7=M99ri<<<Ҳ>߽=ob>`=};=Iv=tG=mu@ ?僚?@ A]ٽU#ij?A._=>Ui"\>f0?ȾW"?>bt=G>P(z&??򜇿<܃?A\>-aڼVh?j}Qn?<X?;Tl> .Y> 2zX@zdUq?<%~#J?u?Sm-J?GHD@o?,8%?qUѣ<>(=> m\>֐>?me?M??]C=0/?% >+f%>L>?/? l>=-[(>2Y=Q>s]B=|ؽ??S>UG9ν+ D???n>_= #EM%>X>-?p@O8A3#=ޚ?? ^6sI';S-44[T? @2=̑1M?Rm>OW`Np!@u8@†%>?i9U?@)> f5ON5=>~D? @"?1?>>*? '"?C@-?-I?\z=P>C ?>]K@50?w?w>>T?D>^">(>J=Z=&?f@? ??>5?cs?R?Ta>8>>i=@S\G A>?gP>[ͥu< @5&Vcy>,d>#Yz3lR?ÝJ/@^A2->[#(o^@8t@l;yty?O׿@U?wz>?.|#DKD:?ɓ.iMa?&?sl|7>-W7 i?\ҏ6?'?Ha4> (*@ڢ?Dqd!7?>2о? ?_2Uͫɕ@tp@+̍@}>~ g ާ?)G?2[p8>V- h?_>t4?H}2OO>VsP\? x'>n ??b1M,熥>v An@@)ӺȿI{ ɾ+Q}8>&AB ?ģ@jE`ؾʦJ >DN$@?)% ?J#M)?Rսnx=/`>4@4@suPH?%6شu{p?t='>Fq+@Q} ZUݾ #>@]c}K#VlM@S׮[ou@q&q Ͽd묿̿?4@Y?@?kӬ?Ks=>!b[@/?{@N @#j+ΗU+z=[21>Q4?X?Y>>>>8>h=w;:=e77=t"@7?8>.?b?U,?O>[`=PZhiھք=i >ߓf?1=bXRwtt?*ÛuN߾_i6>֯`?Ğl?ugJb`?hývU>*ʷ|,!5?v+N?AR>5v><.ʽX*>c>'SH?1s?>s@>YO >==;3>}έ>FT@.l?/wr'?1,J>+W?c@TyQ7B{?5 տ? ɍ,l>?=)M._??lJ>>/??ꇂOQ>A>1]?,@`6J?_?8龝B<4?6"?1p@#;O4@K%޿E<?0x־[> G@4"oF@(9q=.?6*=+F,>=-@Mo?RBa?_e>V=H>E8=Fc+?D^nhA9@uWvI㽾c>: f"ؾN Ã~>im@oq?SNy?CW ?&J?dp2YD,?>^;製2>8ʾ2 %@N!@dwE?Ɏ]G@v?hPm/= >g>Eo(@*@?UÓ4@0oa?uVT->/?R>?# 0Md'@;?o?g? 9? ? =">{o>"|[C>r߼? \?y>?C?1?!#?>b=1-cLk5̍?`>!e> 7?w=DRuCHY"7vSUAO?S=o=0 AXir!ct:H}Q#li݂UAJUd,,AſK;(eH%J-Z[(+IjH >O"?mA?mC(?|7?$?VCRgr"-(\?s@?WI?p/?~M?[I?U @݌=}տ!?b?^ags8Yd?y>&V;OEE!?}@=/8 @t= @bZB˿i?0$?l=?eK ><(l @ @v?l>0D?ڌ?#T?u??"Ua?C?gB@qB@O@-?fb?g?i?׎?q?&?8[?>0>r>T=>>c9>0?$+?=>=?I? >N?vq>ʭ=͞>om>O?}Sd\?w1V>zeg@`7?-a?(P?~6He?cо)1'!?oXaȭMl?R9\?>ڽd >=> >%:aK;@7 e-?>>{te>>,@>?S-='UJYz?)J?P?wp?p ?G>AM=>>l U 쿆?"?}?ʃ?I?F"?>K?K?D#@Ƙ?Bx?ywf?ɉ?җ?vi?C=0Zs@e@$#@d/?n23?݊K?E志і?2>V@`?Н5k?4X?9mTs?*پl>`*>4[=@O@JvE??оlN޾T+ <==@k?SE? ?m =GPMD|&CDžoJi@4> T?K>S>> F@j l(>@?`?%K׾i?]4>%9>˾?[>.?iA) )@ac@76k?x>M+%?Ȥ?HӾ%XP*~ٿf *hP=OC=?;==\h=#o t:|'W>u>>ٶ>PW>3>@`>j~>ο =AE@@DعN>b=>Oƾ(>Ͻ\QI>~:{n]E,>s3?Pk@D? >DJ='=<.ٽ‰-f;̪,pG">W>'\Pk }2n/)'?kd@Ü@}4=6?.?BV;OW݉:?ģj?W"@|m@L>$Z?r+? Rѝ7A?*BA2@@S#E@LaqjZ_yzo2B]DHA@ @k1 >*hB?{> `<jY!Ծ !68|? r>*߾j'Z%:+[^mTP .?,?Ә&?A?N?$n>l?c3?>>e*>>QWv>J>s`>>_>yy>>=Z=GT@T?1?9?὿1>\06? ?C׾ ;?H@j`@0@v?]]G=%4>}5|?Tn?P7S AX*տ{eC?ogzсᆰT?1ez;n3AM$3C@᤽4t?ARv)#AHl?nz?ѷe5E rCknz替ÿPgA >F?zCZ* h~Ua>ԿIuh;~? ?4>}M?nP=R&??\)>G>-? r3@.?5ӿÿ?̬x=ڥ& R?L?՘H>?o u?(@E<u8?>=y\u>蔾}@}꾵Q{@y%>;?W}lL>(?I?A;>?i>V5K#?V$?3j|>ș?G ?(=Wp&?r~U>U-@#[wL5jſvWżnD\<6i5@GgݿME KR"ӿežQοIpNվG4>-F&?S꿅k۽!MLro@- ?PFdֹྦྷT ?C *?ҍG{E Ac?-b?8&HmWz=x{y׽qAT?*~?6>3+W!v6VƿgbkL`@˲??k 5U?Ӽ)>H>*j:&7@zP@?*?< >*?&zɂ@?t-@5b>ue?j?R?]q?"( @?@?J>b>@v>m=?;?8 ?s?FW>U@`?-ݼIy>#սaH?>e¹0g@+s< !@e->?Ҥw^V>=Gy?-> =2?˜>O[>Cw>Zl> ӿ񬿴Z @dm?8(>̾? e?=S>Ӫ?#*?vY??mB? 5(?>B;n h¾`.i}ҾVە? @Y?$?>mEY&yqԾ ۾b@z{9"@8>E?b@6>:$9Y>>Ψ}j Xz@6&Uk@7>Q@g5>|H1>>MP=#pEb=|@l?~A?!$>?TɈJ>P}LˊfDΜ@8w?9I?>@?V'?7&q @7@F?rݥ? I?'>I>\?Ct54@@@?r S@)0nZ>?`W?Ga;N?¿ʲ*gڿ ٚzo>dCө俿fPՐ-c٨ճi1Ai?@7*WR=uM)kؾNo=?[G>QcIv[>>~ N>W>g:埿@?g$Ң55??J >X>wC%=bH>ʿmD?v]ͨ?6"+>'7=F6>F;_*?,XBV?]EY?*m%>>p7>{$@i"D@wCT\|V?<1>s>@:R>W0ARuGd@ <L^)?ӂ?_QFC>fc0'Pyn>I?4 ??wv?F6>w>Hl|: --J?7?a S?>Io>t -?=>NL>qs@8o?@0@e?PHrR>AYwk<[5@)\L|?^@7'Jț? އ=+>=\"='P?@x?%ͭ*u8>P?>MǼ;$@@~)@К>6s!2=G?<?˜¾ 3C.]Y,M`6?;%5?b:S8'?<ϿYRnDpnZ 7g~HʿtO?/ T?۟ \>4 G>Dil>]>$;L?#?h.ƆT>^><{p">rMy@`@o-@C?cE ?T^E?s?0S@ѕ?`9@?I5?".??>^?\FAs\b@ <;Uc?dhC>8+=?ʺA@@ܿ*$)=3mJ?;>=g?sK?97on?~r?COMF>{v?4>ԉ>h?tѿ??״>[>e>s>h>f>ߍ>3MU>;>1^=h<+8 ^o^hdb#%*+C̾ vKrbk>5>f?d@㿭`"8i$?=Q?z2Pȝn?Ŀ=L@ob@\p<7T)?~鐘\e?=#>#:=Xƣ@` ̾6͚>څ 8?,fD?l6:>53Y=OR?#~>uH>::3LJr>n=%0>&:C㶽?>.1U>7(>4=5>>>,h~6>Q>^5E?m?qɽ%AŦ@a>?{$?>%88=+nB5LϿ߳gg@B$'@ Db>4&@ÿmDb_?ő7(=j`/@5@9t`D.AIwQA%n@ғeLMјAHz?q|yDmQ>ADžI"x|_#?M|y1Q>7A@{u?7vyQ>Bҏ@F?yQ>0,6 Q0ABKA\t=r=0)< AF&BzS@@i ѿ5A2:An@ O7A6L @\ѾAo@3Io EAIU@AA5A A ABS˫%{@y@N0AwAKBA ;Ap`nFuA} B@ݛ|:At=r=0)܅-B"?CQoA.!*OHTxAp-?@W2KA_@?CA"AQ?@ g;At=r=0)AΞA;"':&AA?>ICAzBUn<\<*l|@zA<\<< BEA,#9 AqxH*(/A/>%5f@A~ApxA=SA J‰4@˅$<\<<\<Ɩ 5<\<<Ahh? ?A_*(@A(*@Bs(aA*/@ؿ>@eAA<\<<B$w1BjP7B0\?ȂA}U@&,6~kM#B^a_6;Af>@ U`A@&7@A8z翻A*@3 Bʘ@x@FAA od=*eB/Կ .-NOAQ BK%Ae@AU-b@*A B#/fDy<\<<@=AAg8@>ƊAwA%޿^'BAQA0>0a!AiAX$`A̢!YA|?~5?mA:q?@Be A<BԤ>AA<\<'0>O>?QE>s>u_>mV>>>p=+@ CbjX@h,n=>5H#?;T e)=L<3ɺMu&?N?MX?RM7?W>,p$nP5@Ʈ?Ȯ >^>ͼ> U?kM=/= d<@o@[?q?7RԿ!Py<\*r^>}6?A~?!n?r >xc>Buj> buUR @GfS?c}+>@^(=իp=:y@$j@j5q5>~>Ft>,u,5癿#"88>l͔?J?sKXza *-?> meF,iy+2+[h¾ɾFJԿǿ=˿Nk<˿ fֿic^@4ڸ]Noװ?d?>=ill=Fy =S#=~p@5>\=>9зսv=ۉ(=򘼘Q=> @)@ez?l!?Z?Z?(>PRZ>>S,Ϳ?,-?N]>^'ј:=&AO>9@b]BBr=2P>>A=Ļ}?v)?;?7PN=f(܉2G"􀾱X@/?Lc?19?# >׾q>!X>Y+?X}9> 9sj?((?ZY_?KѾo#v>of ͽwR=?b+>ܳ?B?>_?`:?c ?EJ?(?Ǖ??jg@mѿV?s>%6VQ>Hɍjw?Qh؁>F=XC~ 5G5nDp?ݩS)ċ?= H=rr4>.A^@CVw` X>/?V?MI?UZ=Ģi~@㼗?uTݿԾ[?^G>?*?B>.> )??lO[>:g?p^>%W)S (J>#>>@Ң?!?ϊ?k?T?sy?n?l?Z?+F?Kj/?((?>R?ՙ}>q?q墿E>㩉?;澿]?@9?mw?8?@_l?8o8=-= K=̤>kgqbϮn˽{8?A?Z6?8>&G= ==w-P?+>5PqHM>傮>@0X->Ip:9D @fh@i@Nz7 >7+>}i=>ҁg?#]?/0?@9߿$y9Z?.@/M0 >=CA]`y=i$~@G7/Ƚ];$d.5;wb??I\?Px>Ii>3Žx!<66=L<5#?ٲw>+P>Ԉ$=z6?3g?Ծ.><;߽~5׋O& =p?#=^U=P>%*hGvݽ疿va:㭔Ԅ&sNeU6=b>n=?[ɾ 7? q3>=>̾d5=6`>ԿtJ6?Po>>վ =>u>yUh߂3>?b?=?ܟ&?>d=SŽ>L@sɷ9 ?W'>wmMl>T>S:?-@ @@>?DU휿ئ di?n>6S>T=1@R?h? =@ƨ?>?1?֩>?.{??py?ن<t?8?- '¾T?J?'dKk/Wj>3g>)@8m @Z.?\&Ey>-A?Ѹ>Ģ#> {ҷkVھ2_׿޵s׺"Wp>>/.?>+ GӬ? (@U9@??Tb?t>RwO+5ZQ@3?n?5=Ҵ0])w4Xfv8>\q$ά39%[YK"@7Os?Q%?C>R =?敼?k?XP+S(y<_ P>m>? @@s>}N>&?=Q;ޫ><<Ͼ t-0??4?<?cF4ӾԽS1">0>>+=>U*>,?>Mn>fǎ>M>u@ڌ/@%@w?#]>9A,*O1Ⱦ;Ajn׉>f?";9]' `) >*?#->e"? . o;=>rQڿe@%H7@7 Ywt~_?ha!RbY?Qv7?#]?/Gc>w>#z=V? #b?KZ=d?}?(>???ǫ>$>Y>m~@"@G??!p>#w,f?q ?`⢽}2ֳ?">mK?E=nd׽@1!9#?[Iw>xÊrh/m>'ν,_钾s=Kwp9V?Yح'=7?ȧ@.♭I@ujz?:iZ<@Ҿ2W?a=p"=6;!=&?Xt>>t=q ^C?ŵG?~ߧ>v?Du,¾?ú0fJ>|=9Y?Iz- ? j>҄>0=<[<|P=@M@tS?~>]wz9? Y?].#jQ]@>.±s>ҽ>ى=潊>{x,N)>:>W>_N?KL?z>dKdv@B>$&?ˁ>Qt?kD?>)N \S?Aa>3gB}?2->;W=#'c Vj;?AR?x>Ⱦ"5f=7OWxzמּ*>r5 ?? G?Y?>3>F= 8ԸG,??_LG?',*K?ȓq<0=qd??M?Ѳ.?g,?ݡ?5L?K>>$9>x>>}[/r5ލ>>(?]G?e>z>n=@Gx@6 @O?ISy.;u&q<<޾P>j??M>>>1>Lw>??~&@?Q_LO?_O?X*>ŲH?ϔ<ր@ž{? }2ʥ>E `U>&:>q= 'I=湾{_hK?1??xg=>,Ԉzi.|2j#P/}辩ؾپ}YA)?հ1 C"3Lx[=*O';ۇ# &Y?#p63=d©;w> <5>=юO?{ Us^?#?A?G> M&*z?_*@B@ Y?/w??Վ>ް?X?i@Zq$?><[ ]G, >s5>ӫn"o>N/LJ:f?D٤?4k.U>4>fӾ& >7¿BȽH;?[@dP?U %G x q0>>۠>KiտnV=(R,b]- ߯ @IdXg$=)>' >0=s$o z$?=FX!տp/CUjȇ8& ;A׀?B'>qR?=eYTu={>mG>=6Y>M?Y>8?H2k >ig?4Fpn?>S @cO?F?)?`o>اp\ӼY."?X>׿O8@VѾa@KM??>8r>#pO>?$)%?F€ؾ?"?<i޿Թ@?0?/?6 ,B?>[Ǽ>!C8Po>?>^|2St#W>B?@(?al?y?}G?3>?T>zj: W} ڂ*9ȡ?t?u˿?F8ޫgU>[>G=y>Wvȥ?:%?wH;=f9ͿYAҾt>B"w>y[W̻< ^ꕾ >]?w?3Λ?Ɂ>86ƾrG*@u:7?(2i[<*j[,>tk>l=O;=i<,>>}n8?yuBI?;P>ke]M(?m&~>; CɾNV w0alp}w>%#ӿ{m1߾2>OS?A> li=Y? F@|@HWn,e)Gbg|@85(<\ $A࿥ULc7 *C?A3= _[>F'?b?)i>oW,A*@8Y@TD?<1>> %^> >4==6@"@ʗ? >ξyſnQA/FJ*3C)gͩӊ*E_ҋ !0p徙#v}ʰŽe5?P+>5<)w;>OΉ=/uK2Ȭƽ>/:">LDƾ?վ>\ >Ay =@<7ڄ_@)v¾3?;0?gG,D=a+<>f>x>w? ?@s_>m sA>.>o#G=?,@MoA?]l'=@??z˾OɁHU?M> i>o*E}WpY`=a?Ӓ_>q>ފ>x=<)`< ;u>a&3DQ<\&< ?>Xb=:=<2@?,>mT@.?{!:=]>b7>>TJ*?ݲ>aa? $?o? ?!|X?>͘Z b:=퟉=(=;v>OӾջտžE#!?5? `?>=l?ʾ;?"1bT>fc>韾&=\ m{3AДg"???kR`?>lZrǾ=zR> =9?oժ7qs[L?*?K>IO/þmGF`ܿa¿2E?µ?$>իxiL/?"?k}7) Й+ ֿ'|?%<\?j 役<|^=Qļd[A@ Si,o=*ľE2ꋾ#da1<&gL0zd꿛:>d{>6~U>C:/2=?Ä>՞H@x?&YտfU>W7?20?>Ͼ~U?ew? Oο[ 1Z?6?y3~D粈=S.d?aa??BS>3O!ֽ;V=~Y?h"<'Ur?y= q?d%>S&>>?޿?8s>`羫n>kO=z e=[uGh~X.l[H= F?fM?牽Y$SW%K*2yT">?|?y?Ͷ*?Iɕu)eNC%e@Z@T@2=HhhǾsܾ7! b̈"y5?T𡍽{?~mE?PS3a=n>~)=LJ}e@dUjJ ?sB>IR1>>\e;( *=yc?X@yo> ?뢽8O1>D>V?L޼6~? >I=M?O?K?m?r>>$@f v@`CX@W @?E>۝vNʈ5Lw{<@'?< ??S?z?>/:/0J!vzr㾩弾!p`[쿽lf>6N?*#?;=R`}# ?0\j?΅96@c>P>_+>7Smc%@X nE? >L>@~tO>׆G>8_zN @ @y?2?m?x??d?Ҳ??'?썇?U?Ƅ0( +#D?-?_>x>j @6pe_>6./%s=hb{wr?>\= k:!+z3J2 ?d>&YiY0AZ>'!@'>B,ؿ5vݵ<=/^=?I\=>@ǽunk= ,?o??ѳ?|>?U@4Z=ѽ+,ik >*><>=m}r 81P?qWl?kܾ?v>dN$qP4>H=b>>V? @@> $?N?,>-;a˄w!=ێ>9M?,;*cOz渾 ?%?R?1N?I?><)?MBQ? I ?>5NM=(c??VA2DX| K !ž)39)z@2E?N?-|? v={ޙB?xI>=y>oNW>~>X>倿8!> J=bb>8<\ _|ܚ?~2Q@}&9+?D )?}f=Ps> != >`>0=OD?l=>)g>u~:>@|>/S&.鄼?> þ>!q=]ƾU{@7f@fe?Mw>}׽>X?Xdy[dC,{JrY^MF=:;9@8)^2@Yrd 6>!Y=/Ѿ=uw}}> ? xÈ @ ?tcP?r.ˬ>CAI=ߑ40?)??@?O`???yD?-?l7?Ws?8tq.?->ؾ=L sO㿱>17Z??>֧6>q*>>=64\>krU??@̡?@Ǯ׷qW?.߽|d@'S?P?mݲaN?bo?J'ƍSa?? L 즿Fѿx } ;\׺}#X4E(z7?¿CB@J2=<&=>?t?¿e#ƾwcAz=k>L?ߠ?mC?g?J>moy?\?;??U?FU>"M]><>ԯR=?g%o%XDKa/? g?>oa>x>Ԇcl=Hg yI>G? &P>?wgU>c^>^=G??zs??ȨX>l?4?Do"?x ?ς/>")w=,?=羣?P?*$>zҾq>ɨ>4 ?cL-:?[>[T8?"' ?&=i涿j = |ҾNk^5=(N:vl9@IA,P^=>N>?+#?"A2Tk>6ĽQ;>NuXEۘ5 0.޾aUmpu>Bb\"?-'?0ܿE)ch_==;&(l>@W@@}Se<ڇ?C?7<=_{=;xT>RQ>@[5ʿ;in7򼘧>kUj>!ZHK`[K>E>?V?>?>E^">yP>Az?@3?H:c@9k?XO:>^]>sNn d}@@6?>n>#>v> }?O|?">>>mAC5s G>11m9Zy:dvRbƾ_GH7z(V~??.?XQ?9I?<{?{????á>E]),?ĝ?z8?>R~>h=vn@g@M@X:>g$??B?v3??uFz {gG`[D=>7n={t^<6 mZ??y?'?B#??? *\?@ ɸ?딿6dǽ[)]1r(cxM'>>>@"'@ -e\?>{'cjsc=-h@<l@G&>՘i?@n @cY u>>xP(=ƾ>>\6>'9@@?.? x?GF?k?y6g?"?7?@c@1?#_??i@Y?> I>eĽᒾπO>`፾>a9>* >Tn>d9=Wi m ?Sfsq=.?U ? >p`:x>Ϝ==d> >?n-, T??/R>W/ +5C=Bȁ?J>4?`@?ǘ8B=`n=j\=ff2pA?!.?t7>y>`ʿ!:q?M?;G>>>?(%@,@>U?]?(>8=??GP?^e>o@!?=^>Q> t~rھc>>Rk@ @>R>@24DY=v>d=g>m=⪾/S??B?S^n?>K:>>`0?ja?Y?ݿ6þR ?WO?cr?!t\>!A61 ?)<~ᅧF$Z8:)ؿdjO>?rZ.?m2?T]?a:~@{*?"_)9ɧ>IT=A=9 ggpoBEc?o>=}͛v;+?,>͇>fҽY^Z=;w*>o q60t?w?).?g-?|Y)T)<}>ʡy>7M>Sv 5@g 0{?/?տey?dss=35><>AG~=Gd`@?"?hEdI 07z>=*;=<;?ӵzL,KG>by?N??x9,?1>a, j9T@ew>#>+=>Z c>=׷8 @C@Aڢ>ť\\ĞC?3~>So >ݰTg? Nj?n4@縝>j~  CB=!P>E: >1`-v>u>y??S? ?-(?'?;?>T7 ~q?SI@^| ? ?Yͽ>A\лL3="[hm?rq{>E>=V>`j~>Z#>g=LMA?b}?#.կDKz`,]1OcXS @I?M>ַڢ?>h>ns &L&>{Ai(!W ji?!u+[fiw>CXľao@V?Dm@l=2T=Py$0F?+">qw#oٿ")6<͈'?*?:>> >E?t@+|?%fR?74>q>->e䘼3#,>uM@ȱ?/ pT&yՕɫW$ u>a9ewgIJt>`hejS<"=u??kCQ8k?>iրX=F? >N1X?oK`@꾿<:?4??iD [Z>rKDzd?ۿm@d&b>ֽP<=~?=GٽߩP;?6@?<|ż`g15>֢1>NNãp@r?'VYf>R>>a;¾*5cpocketsphinx-5prealpha/test/data/tidigits/hmm/transition_matrices0000664000175000017500000001005212504317076022677 00000000000000s3 version 1.0 chksum0 yes endhdr D3""& 'FkEr?.F5(E1DAF>DKDJEn>kDR FbD*FR9DDF8C.D٩FB%E@ F(vCDVF6EmF8KSEnCetF|AE͑Cf2FVEA!@p'FwE9D FdE@EәjEX@IEЙjE P5:EjE'<6dEjEx=o`EjE/F6gEQDE!dERNE>8F9D}DenF-U1DDR FE F/bEջB0EJbE?ţ@pdE[EqoC"E*DE3EDȳFX^hEF=VET^hEM n:+E_hE*8쉏E_hEd+9E_hEpjF*1Ef#fD?)}F1E63<EkE):φEjE@z!EjERFؘiE/gAaE^"E`tDPgE>DDZlEDH%En%FnDEhE겾<>EEODTF4E@xFeEʀTB^F^eEE_jE;9JÌEOjE?EiD!E FNA!\D3֒FE\F@iE@^FhESȉARFaLiE-; EJEږCHE*JE)!FYDDED̸C"FHKEB<FhE7&EhE&FgEA|EFb5EFD]E4EcBE DD[%FEF[,E~DFE6.ChFNEӤ C!FDnEɘF"5DEbENeC_|E D$EClEC3C4D_EBrEEDFmE%D!-F,Dw}hC,*FPVEB=,GAlE"F!dEɑBeEEDN,E#E"PD"9DVE DIxEFroD׮IFiE"AV FxD!EE!FBՇDE*|CEZFFtDOFUEACEUEl<5 FiEOLA*FCD"DVFAD^?F9EDJF D'D^;FQУBpEEZADl@F$EDG>F`LFG5DޣEuGP5Fs E!FHE`uFkHrFs̕E,DsEGEKCUD mwEdDLDE:DAC^FGLE%EH D]ZE1ED7A!OE&PD@Ex*FBD~F E hFٍdEEB~bEDDE]D$bCnCEqVCGDEFbD8a|F~jE\=FhjE?$EhbE:BEbEE;FjE~FjgE@?Ɲ F\dEABVEdEM?gFǚD+ EFDvFkEB>s FkE79^FkE1#6FkE )AMFkEPF_hE <ӱE!hEw@vWEj hEb?MEUDRD2FD E\E'dC.a-F[ET4A F+jE;{EseEBzfFseEB@F~7DHDvE0D)UCUFQEڃB x F^gE8A3F0 kEED=eDxEMD6DE1DStEFAgDFE1$pocketsphinx-5prealpha/test/data/tidigits/hmm/feat.params0000664000175000017500000000025112504317076021017 00000000000000-dither yes -lowerf 1 -upperf 4000 -nfilt 20 -transform dct -round_filters no -remove_dc yes -wlen 0.025 -feat s2_4x -agc none -cmn current -cmninit 63,-1,1 -varnorm no pocketsphinx-5prealpha/test/data/tidigits/hmm/sendump0000664000175000017500000123712612504317076020307 00000000000000BEGIN FILE FORMAT DESCRIPTION0(int32) (including trailing 0) (including trailing 0)3... preceding 2 items repeated any number of times3(int32) 0 (length(string)=0 terminates the header)cluster_count centroidsBcluster index array (feature_count x mixture_count x model_count)4... preceding 2 items repeated codebook_count timesEND FILE FORMAT DESCRIPTIONfeature_count 4codebook_count 1mixture_count 256model_count 670cluster_count 15cluster_bits 4logbase 1.0001mixw_shift 10Nb1x%>"r'""+fwW)MgzyR@I{Ф'YK}]pP@ժW "" dwٲp{&'" ]Y [uGT}IKp%"Vuw"r'""+fwW)Uwt'*k*w@ZЕP'PPI&"z&rGwA }Mz qb[Puz]*GpM EWMF tקyYMV ԺwEUu ""IpJ '"""rBG&@"*"jg"wwt$r@""""{UZupgr""uPpjp]}{m&Grp}@U]@wY wwtz] QMwGfWٙU%"@U[]YYv& uwzwuP{ @Bz'w}{tt"T%"z"rpwrt b)""@tPi"""] rGwBw d'iw'*uP{ ww}ttpj"wrzw}wttwt""""""&'"Y]"*"wgJ'"BwWG"+w "Ft&jrpuw)rY&"+""r'"bw)""ww@twpM&&"Gr"R""B"JZy *frzwpv'G&""ru @}jzPwpU"w{uwqpwwpw""pzwww}G+"Vf}{Yiwzw"B""""@  z""""""""*M"""mp-""""rwwb""" ""M"*bz """"} @Zp]]ս"P z%"r"Ҡ}"""""""*M$"""""+R]UM& w-"""""" +mrPY+"-"wwe """b"+""E"&""bb`+ ""b"PD""""""'""F'""@utG'"""""""""""'"""r-"P""""+b'zu""""" uwpPZt}wW}WMGzԩ ڙYP k""rtw@ ݕE@"""*rwY-"rUVPDZ""""""rwmvg{zJ*p&z& mRM"۽*"GFqd"+ %"r ""Y*bz-"""" ]@ {T D@t$j{-&vu" {zJ*wG w&f""gBM&] """""""by*rPE"r$kGVzj*"df"""f*jf*""g-r""""W*PEb"""""B*"bWD'""ѕՉ])rk&k""+"w"""+"g&"KpMD"""b+vw'tDU""""PJYtwttT}p{GtJڅp}Uwttպ""zWt@wpwGzG&+&WM &vYWzz""""""rw-r""""""""'U&"+"YR}"e"b"]""""r%"""$""U"'" "r """"RUZ]"ە $"r)"r"M$"""""""'Y"&"b"RUU* }""""""k""m*T &"V-" EpTu% ""b"""""""" """""'&rU"""""&'T}""""""b"""Jt'""U]UUPU "&""""""w""""""&""''"EP""""""""b*tup"""""U AYZpEYYWUUTUՕ]՗ՙ*""b UU]""""""W)"r [R""""""-t"yr+&"""'ڷf"Zm"[""""""""r""+"*""*"WPM UZ""mW"rp""$"""f"w*"""wz +"yr+&"""""$""b*g}k&"&"""+""[&""""""""""""""""""""'""b"""""""""b""*br&""+*j""""""k""'""""""j*&br*'BWPwD"P}zG }EzqD"e"" qPx$-v"+""*"v"""''""""""""" """"""""""""""&"&""b+z"""B"rKBr&r"""k""""""w{f{w'"+r&""""{z+J{z'ԷrG}R@uwp'k vp MWw%""D&m "**"u @]X{UUqԉ%"W'}J"{z+J{z'ptGԽg"wJ w *D}u{zt"{p-t٦u w`g G Q]}*D]ٕypZ uUG{YIYwz"ubIU%""wwzzp$b+""""+]""fb"Q*J}b"b{ Y *""qݠ+qYPݐrjM wԴMtwGUrzUP GKzݙX )"WDP{t}v*&+"R}E}w@"b+""""{w*M""f& }u" %""M"rM@"+KK"-"" "'{]d""""qݪ GPp"W] 'G " U&Ҵ"b+""""{w*wWD'b"""bfGp'uwu"""""""%I]""$"t{p$""""r"'"z*rE"*""r]"&pJ e"""""""r'""ZP-""GMԵp@*"""""""t""b+""{wrE-"rPY""br"r{* zG@&""""EMwydwT}wwezv zupTYUU @g""rw]DU pw"r"zw@t " U]"""""rDdwY קw*"M [}"f)b"B*"r'+++ g*'" J'"rTwrwuAvr" "b{w"'$b*ZJ*"Y קw*"פV@wTݰ'b*"+&"""&"""""""""" &g"-w""r"""""r]}z'*"bk""""+*rw&"""""+r+ r&""&j'"rMwzYUxpwYMMuJ "r"+rr v-"&+j&rrw+wW+ r&'&"""""'" b"""""""-r*fr'g&ww"""bwb""""ٙ""r"W+b"""'"`v'"r+"""B""b""""vg+$fb"""+"""""'$b""""&"tg""""GDzM%[""+br+"""""""B*""""rj"Ր!""B""b""""v'""k"*"tb&&"+"+""&"""&"&""""""""""""rB"&""""""""&""k""&"""""$"B"""""""""""""""""&"b"B*""J +D"z"'JF{{WPPuD"&""d """"""""-""""r"""""""&""""""""""""""""""""""v""""{""""""""'""""""r""""""rj"bEM(""b"""""*""'b& rzjYxqr]r+}M@pwA]*""`&&j{GI""zk"'"gb ]DG'r'j""*""'b& zppM"+f{*'gYQUZI*wU+*"'%r$G }&} 'ww{pw`vuD*&Vbzt'r+rqGGp'*g+""mfk""&"""b*""""'"""m*""""rr"@r]'*bw$""*r"b&"&""*'K{+"""""$"+b&'"v&"*"r"bb@}uЩw kpj{ pMwwת''r""B&"""'"&""r*+b"""""""""U+*f+"UU"re"""p""""r-b" "bY&"{-""""ݐUUיY]%" ]$"۩"}"Ҥ """""""U+UYif'""UU*U Yՠ""""""+"btY &"R-" G}wG}*"""""""""""""""""'& """"*"m-bu""""""""w'"bUUYY%bk""""&"w"""""+"'$"f]ݲ"""""*'*wMp"""""]@ՙ}PUUw]Tٕ@P] U&""b] D"""&tU"@wwrzw"""""" PD'{"" "'"B$bzErtzkrG[{wWK$ZJp@qt+"&* mԗqtr "b'""bfWwrkk'b" "'"B$bzwtUQ"Gg"+&j"'Gdf[p{&+"'"w)zxDwg{g&r'U@v}+td+*bwr*bvfz&${B]{tp$kzr'+v+"&`jr&"r+""&'"zEG""bb'"b'&""&wW $-'B}wzJ*+ +"+"""b{+'""""""""+g'*r -&"&zYPנ{K@b'"+wq׶"'wrk+"r&w++z*b"fz*""+"ErGWק]@rw+wtrD"ҥwvUrԺ'Z Ud-b"ՠ+w}*&jGT uzGYMGuyuyw *R'"ErGWקTݝGbwrwwwD'wGtt""""""&"' UW{G`]`w}""rwtP*"&ttz'&&riR"b} )Y"+"r+"p]-b"PM@gzv-*w'&b*"bw"{t"""wbK$]зbzGuzwWz٥tvw zwEݐtwGDU""zWIGz@]wv{w]Yyw -{{r""""@Up%w" y'b"wp++z'"b+"""*Rt rk"j'"T}p@j"ur""'""з"F"+z}&"" y'b"zkgw&' b+"G&"'B"""""""*"""""+rb""+"""B""&*"ҕ '" *r *""b++d"r""'+g&"""$""&rK'"{۷*MMPy t+zpWZzr&$'ڢJ*z'z ''+'kr&r Z"+""+*"""""b"&'"""""""""w"*m'"j&'j"""+Grb"""+bt""z}*zr"""*"&"""r"&"""""+""""'rGtk+jDv@G' jrjKpz *b""'zb&p""wJ +v'"$gDwGGjw""z'&""+""""'rGMt}p{{"`j w G}wkuGJtkqtb Zdrb"G*''p'+" k{vgJz`zr-ffr'+b"} b+"""""b+w"&"&+"'"v+b*""""*&+" b"" '""gv *+*"+fG'"""&"b&"*jr+"+ zpwDzw {`rfw""kgv{}+*"&wbww'"+&"t'U@rw'@Et" %"Gՠz*wi]")"b-+""$Tw I }zp`q{ "Rt*"t'DUUpG"wwrD tUdDWuGw""""""'""$*PM"b{$+J]-Zk'"z{"*"'"""{d'Y&"z*%rI""&"""*"b%"bUUUITEzz& &w'"*r+"'"w$+bz'p ""BupUywtzppЙ'F ڑuM] @z""jwwU wwb"wҫQq{%ZKz}""""""DTD$v"g"&z*pwzT+w"zڷrp"t{ Dt@Kp`pݧGw w{@'fKw"*""ww@w+קGw"g"&z*pztg{Gս"g"zg"r'""zrwv"k+"d*w 'BZD w+JU @@p{ttwڧtGk+wԧtMGG+pbGz} utGwwz"zzzb Ԥkw"wEw{+wzgtj++ vrtb&'rrf'"+""*"f"*b""""""""&b*+&+'vg"wwwwwBrB*"wGuG&bjDwzwt@wr*}$z"""+"" T'+zw*зwjbq*+P"@PMW*v& "" "*r """"YUGQMi ]]'*F-"B"u"+"" T'ե }%++"wGw+w}wwj""&b"I"{$%rw t'"zv&j"z*z]'"&'rt"zdw$w&"""&"&"{}*""UWGU@ """b""""""*""+"w"ww"""B""k -Gw """""wTPUEPwy]P DGIp }@]@&}WUP ٙw"r"+&ktw "B K zz""""""BUUuzPj"""""""v`"*&"*""*"*"""&""*"""""""pP)b""+""r""B$"""F"b++b""b"-"ٝ!""j"""""""v"b-"+"""zb"""'"*"""""'""+""""r"""""b++b""*""""j{&""""+""&"""""""""""""""""""""b"k&"Jzr""vrrf{rzg@wPZy""&"Gwu"&&""k"""&""+""""""""" "b""""""""""""""""""+"@"""""*""&""*""""""b+"""""-"]]!"+b""""&'"""br +rt]pp}]@TMI'Up]U]U] U%""ErPJW'brK} `b]@] D]-" ]t&'"""br Up++"G] '@Z w}EZUY  ]YwDtۑtқTU'"p]U]UEUwYBUUqPGPUEԙ$""Yrz-"""j'*"`%"gJ "ҩ-"""''+PYwvrtu"&}ZG*'%b+  {Zb" """b%wPU}M]ptݭ}UYwU "]$J U J$" շUղ"$"ҽz"*xBRwz+"bf*" ""b$""""k{""G &""&&wD ""{rz&r ""{+"j+""gwG)""xBRwz+"bb+kzp""&"Pr """""""""""""" """""'"b"&""b"wt'""'+b+""""&b""b""&""b""+"""+""+&b++fwDvzz+M @w}ZGWtqת&vҶ"Gp"$"""*"g"''"*""$""+b """"""""""""&*&z"b*"&"&""b+&"""""{jJ"""wr r [)"+"""""zzzw&"tFpb"z""Bf&++*t f*rk"gԧ&RK "Myr++""z{"&"Tg{+"zzzw&"[ytwjf'&""jwH""*""z""""""""""'*z+k+"dfr""""" }'&"k+"{*""b""+gk"bk""kB"'ZmJgR{&RY G՗Y]YYzz*ٲ{Z@@*$bb"T"+""b+"*""""j&"*"""""""""jvzg*"z"""brzvj'j""""GUu"+{{{zrjdz{"'"""&"""""""U&w""""'Bw*"j""""Ԉ'"""r"'"z"+"" """"$""""rwU]uK 'bGT "r ""t$"""""""U&tJwg"b""""B@w"pww*"""""""""+b{f&"-"B(gg+""""""""""""""""""*""w"""""'&"""""""*"""g&""pp G$""""""""""""""""""" ""b+g""""""""'Jz"""""ZwTJEڔMzGE} } U}rtp@]G"""+pwzwGG]""""bb$"${br"""""""r t'vtb"B*"b"")w+vwwGPwfjvBt w """${u"ֺ"""rwGWMw]z'KW'"{"B*"b"")w{w$+j""kw{ztwz+wz}vGw}wMzxgfGz WPP@ww"ttw}twwwwwG]}wwwwwzۭ{w{wrWz'""wzt{*"""""""""&*"kg{Z rz""""""k{T%zjj+"+""IZuwZyti@ zz'}z שzDDWzWUE}}p{"w"w}tw'"{ @ pwB{g""y"B*""""JZ-t&{G$trz u&W*Ktݠwp *""D"*y"V'"""rwGDWMt w "vt"B*""""JZ-Dz{'&+&jwDwwww+wzwwz* ] ] QgrDzzzfwrpuݠd+jz@rww wPvwj+g"zՠ"+""z{'""""""""&"*'"rjb"vjw""""+"f+)rKw"*""e۰J@wiYEG} Jzpj۫ Gwתk}w`]]pwDwzwUb"w'"vk wwG&f*""p"z"trwwJ ԷG' 'zBtDWdڵb ""&$j k f+"&wZݪUwWP) f"g"z"trwwJ@Dtz" www+}P@w'"+*&+"} J{'+DW}Jpwp'"z+z*"wU '*&rwMU"B"wRPb"b&""{wb*$""Q}'f""&"'"p""b""bg&b&r ""fwU%}TMb"b"wwMЧzڪUwPEgpzIJzq}WwwTwzwY+bGUUDUbr"'vw԰f{J{g&"""""r }Խrb-"JG&{"*"v"" BkJ* bb'""G G`ڪj$t &"j+"t"w&b"k+"-"bDtjbb z+v+""""""""""""zr"b'""+R"""r""{"+Fz&&"'*mB ""&"r&+j{b*b*"""""&vg'""wzb{wwpp}p*+ `b&'""+w*rקw'e"rFB"&"&++""""""r*++"""""""r""{'rz+Gw"""rr{fBb""*bb"v*+"{+kp'+"'r""bb+"""""'"""G}t{""&Bi+"zJgbb&""K *&+""B "*"""bJ &PBb"""""'"""Gݭwwн{J+"rb"""*"b&] wz"&""X*""*+j&w&pwkb'G{k"r&k""++&'"&FtPڲ+"v""""'b*r"b"Ҵ+*'"-"""z""""""""""""$""""`]a"&R"""&"""-""""'"""""""""""""""""*r""t"&""'""D]u m$&"Bb"'""&r+""v{kv"&"""""z{{wiUtvg@{}z MwIZP}yJz "" Jw pk"bME@Qyz]wtziU"z{{wi]utK&wp U] M@""{B"'{GvU wwtpyGgZUp]EwJEYmK } gzwpMI'v' M$""MUP@w {{*D'*"*zW+{E}"""r+zw'w}Gf+"UUwEwMYuGJ'z[zК]EP]ݙwvvGTUUYwzzDzztGGM]Ui}G֗W z++b@]t""'""bWYg@kb*"RY"Bw "{հ"B"-"G"$"'g"g""" אWU"KEI@+rBt"Ҡ ""'""bWYgwpDk*fb"]*ݕY""""""*"" {Kwpw' wP-t *&""jkj"""""+tt"""""" *uG""""&"'wb"""""b*"zp'"wwwtDMu$bb&'"w&*""*"""$"ywJ""""""'r'zztz&b+"bWGYUrt}IYwZPДU Gw@Yл"""DMw @F+"""+WBKvGw""""""'$r"H{Y{zЕp{wDt"uvG"prQjZ-'b ""]UwjG{w'PwZk }}t"֥w t ww*J H{Y{zа] pGKzwzJGt""""""""bv]gp$r@ 'zj""rwE++"w]]z"+*G-BE"+"g[Z'""+""fb&tW'""PzUՔ+"wz+r*{"g"b++zF}bb{D{'pww '[+jbںmzbb'k{pZuwwpD""bZ՝{zzzwpwjMwt w'zrzzdw"*+&BjGz """+"""bz*Pd+ B'K'"+{ptݲ{ k dt" ""M"'" "b""rwyp@zwwiKА!J "w"ru""+"""bz*te*&&* p"Gw'fb*pgG٢ Yp"GGE]-"""&*"+zG"'+rr+G"" w""""""*" ""WwuPz """"""""""""""&bw$"B """"""*v)pw""&""tTQwwpwwD}ppzwGzwtwwwwzw{w@MJtP&p]t "r"$vwUMP$"vv""""""BwwEuz]PڒgM+" DDE+bt"b'""g"z+++z++'*bp}k$"'wur$B'"r{w"G+" p G'w &"PڒgM+" "B`gp"tT"""fw"+rt"""""""""""+b{""r&""rb&"""U+'""r""$&r+""""j+g"""B""*r&""k&*""r&kpҧGWqwp Gp{"zrt"wz֦'"""j&"J"rrW""""'" """"'""""""""r$r"&'&j*g{&ww""b"b{"r+"""{pz&"'b G'{*rtrK"*+ez"k""""""""""" "+j)r"""bErb+U""R""&mMrf""'**t"""""r'"b"""""rjb"{k"""" b""""""" "+r"+vzp""'*''*"""""""bQնB*"A+R%"w"+&k"{"t""'"*"""b""""&&""+"+""EbRb* """"rf""r$"""""+"$""+"'*"b"w&""""""""*"" t'""""+r("" "r"""""""*&"""b"""""""""b""""""""""rd'}++""""*""" v*++"""""""""""b""r*r"+R""""+iԀ-bՙ[Ypkr+kgDDpuTwp'"" w}w@d wr""f {zp JwGw+"+iԀ-b{ԐٙU'"fz+g"$k""+"+"""j*z{M@t*w"Y}`*w{]m'+wwݷtj* &rj"*&b+'r"*k'""f{}[uzf'{'rJ"t" wr+"++$'ww Dr" &b"*"&""+r'v'r""""b""z&+vjb-"f"@pkvGvvgwGz" gwGw*b+rb"b*km""*"""w$"kF'rxwr&wwWEgIyP EQ-k+zMy  ״zzz "R "jT*Xd@ Zrw$"kF'rxGt}fYqww'r'+"ww{Kw {y`zz%Yt }yKWՇPEDw U]I'}Y U' UIQQE}$k+EJ{w{{$w {XEw( 'rvݺEA {pM ]zzR'"+"")zW@ b"""""$JpGw'fw]z pb"UzdgתwwJMuZ"w"""""""B&""""G'rz* """w"""r"GJ"'""w"""t"B$""""BGIٗ]}WD$Հ "$"z"BMi"""""""B&Էz'""""""rzw"*"""""'"b-ww "-"{w{T''"""""""""""w""""""'"wz""r'$ "w"""""""'""""j'""wzGz*""""""""+""""""""" ""rg"""""""bB'bk{"""""}TqG u Twu нU}}IGwzywwwpt"""@EZMT Ј""""bzJ$"*""rr*"""""""r@Mk""&"""bۙ*ݧ&&" rG'Bwpb+&w"{&r'"t"'""p+*z"""""rKЗԕb %"B&B}"Be""&"""bۙ*[Gzbb"D"wwtwG'""""" ""grp}'i"zw}g'*"""""""gw"+"""+rww""""k"'rw""""""*""zw'""zw Gw'&""'"z&&""""""z*"wz""""""&"+wzw+""""DwwIytu uMP]@EJw *""]yUG "b"&"pwT&BBrJ""""""rkDwm]"""""""RU&""""'""rp""]""ztw"""""'"B"$""j"""b"*""""rwGy]]Ptt*" G*"'"""q"""""""RU&*'+""""""b`'"*"*"*"""""""""bb*"dr '"%"G'+wg"'""""""""b""""""""f""g""""""&&"g-"""""""'""b""$""{wf""""""""""""""""""""""""+""""""""'"r+""""""GwwZ UuWWYUrG ]]ٺ'z'ww"""wwwt{""""""*B'""+"""""""""rryEw`b {"j+""֫&}"[""*"+""v"&kbjk" DPqݙQK"""R&B"b*"""r+r+$"&+G}'&"`b {"j+"""%f+"rJ+"*"rr$""["""""b""""""{""""""k'""&b"rb&"f*j"rb""f+"""""*-+"*"b"r"pr'* %Zq%U"]YYAJr b'"uW*$"&r"+"""%"""" """""""+"*""""""""""""""""F+"*""{"+g"j"""""{*&{"""++G j}tz'"""&"""""""""""""""$D'"d""Ѣbp"""r"'"z"r' "+"*@'""""rzUXT'"{U'"r "rp"RE(""""""""Gp -""""""R Mt"}tt'"""""""""'"&"-*vPwp''"""""""""&"wt""""""'""w""""""'*"w""""""b$"""z'@$""""""""'"""""""""''""z r"""""rҲ+ tw"""""MXU]MEyZٝݧ"""Gw@PU]z"""""&G$"rtrw""""""BYY%J""&'""$""j"{*"""""Yb"&"JBwzkkQU'""+"""&"r""""*"b'"""""zPp"+"""""""""&'""$""zg"bKwE"""""""&"""""U]r$& B"""))m"g+kzj"tt+w"k*t*"j{t{'b"r""b&r"YYU""'"&'""'""""""""""""+"""""+&""""*"&""""""""&""+"&"" ""*r"""""""r"+"$"""""+""""""""""""b"""wםw'B""'"""ݴ+"""&"""""b""""""""""""&"""""*Fp pfjm "*ջ&w"BY&J&r*b"*b"יzjv yzK"j"bw'vGIkj"F'"*Fp ګwWUJk&+rfݻ"bڠ"""""""""""z{"Pkrk*bb"b""GI"&""&&"""$'""""+"**r"-*&"""""'z*b"FfUY*wjzb*"b"""rrb*"+""k*jz R"b"b*""""*'{"*"""""""'B"b'g*''*'""zzw@brF zqJ+*"j+rr"""""b&""B*"b"Jg+j"G*'trW& tGtrק"{IIyT'"" wD*&K'""zr}+{ "w MJg+j"G*'{w**"w"r+&+"rvbb"+*Z'"wD'{}*YkwQQtJ]{tDu'{zzwmGٔ'"w*b&""""&"g"wwrpz!"&"rkE}rgBtzb"*zz'r+$""*w{ """"""""+r'zzg*r*r}bwwMDPDBg+"ww}+ "wWz}ԤTkrgz*{""+&""""[*"""")"R""}rPG""""r$rJ" """&"p"r$""""B P YP'"}'")"rp"t-"+&""""[*}Wd"&""""Y""""""+f""ydwz+"'' at *"""""""""""-u"""""'"tt""""B$''"""""""r*""w}'""UP %b""""""""""""""""'-"G""""""""*rGw"""""Pp@GUUU]՝@W}]UљM} w"""z] Gtw"""kbGP)"rgwvJz""""""rp$Gb"b'""r)bU Mz{zz[yF}ztuD'""}`Bt{''wzr""*"bJ*wM`Yw{*$""b'""r)bUGYФgfv'+"'&f%"r""k*K'{Q`DJ-d&rj'+b{p$+*w&ft"{*' })bgr &r ''""F$t+"mg"+*zgw'""r*" "*'"""b "K''*W}rr+"m +&+""""b"&'b""""""b{ &Bb'bb*"wZF'Gw"wݙUzbbjw{*""""""++׷d""b$""""b*"b""W$ݶ"Yu+W}&"vEP{&[uU" ""Y"'"Z%""""ҐQՕU٭ )"Y"yI"b*"b""W$ @ݽ"+{*z**Uu""*"""J+zar }g"R)jWՐѵ$"*&&"*{A"+"y+BY'"rwI- """"""Rm&"rW'""U]]]%"+"""""t""b"""rE!"B@"""""rvJ)]PQ"""""YНUՙzYYUUYQT]+r{WE@@"r"zz)"EYwIU"b""""R@t"j*" -ժGgYuEbTM'[٫KTyZ -"+${ݲVb&"]]UEPw]U}v}wZ%" +"j*" -M}'&''{YUU'U]E""""wEZ]zKy@TQI+ *'w{'+k ՕjJz"y %RՕz&k*bۧ*rw-"TUz$"r"&""t"+"*'"+{ & }"""""*ݩ]WE*fk""P y@P YPUz׭zBw P]UUЧbPЙ ww ]%" ՝b""""p k"*""bf G'+vgUuRu"We""G"B٪բrP E@U"J%"" "- UbPu""""HY]W KwTUE"]p'P%"ו+}J"*""bf G'GD M b*"+Gp ]']@ u"""""bj*{%UU&"r$" U%"k"zf"'""{@*BY+BpwU""""""&"P]%""Dut """"b""""'""zzY%&Kٝ""b&RrryVW'""""UEwYe{gw]W+{vvzwY]yU}UUUt""ݕ]UY Mw"bwMUUI%" TWUk*&""r }wzbzzvP$ "qA*p&U"t]ur*ZVeU"F-"" "۵"""]YUQU}}Z)"kRubzzvP$twr+z*YQA""'""g&v}B]@kR%BE@Pu'frww*"v*z**'*Ez]U+"bGyrU&"b"+r '"z$""pP@z*z"++w""r"""+-"vDM""b""rf'ZP{+""" }@} @ՙUzqpWtPY U TՙUw{wYU]Tww*b@])"p Zuj"""Ruw]"""""""+"""" tg" t""YrM]""" "r-"B-"b"'D"$""""UY$"PY'"-" "RI"""""""+TY-"""""" MM}"]]Mwwg""""""{"w%+w'"%'Euu)'""""""""*pu"""b""w"]""""$"G """"""r$""wZ$"b]P] """"""""d"""""""rbp "bwwpb""""r%{Gw"""""ՕYAYY EE]t"""rUٕYUw"b"b]P$"}Jݧ""""""zQyGzg&Gp""`gG+"v'"""b"""rbG&"rw"'"j&+&" @ +PFu"Xg"b"""""*"b""""*k"""""g&Gp""-*r&&+"z""""&w"""""""""""""""""""""" "'vd"""""""vww"""""""g$"""&"+"""*r"""&&r"b"""""""r"""+"zr+װFB&g'"&u }+&""b"""+"QW&'"T'u""""&""""""""""""""""""""'"+"*"""""&""""""b"""""""MU`""&"k"""""""""""""""""""""j"""""+"""+"rv*&"Z""j w"QA]ذT$""j"-Kw"+*"rFj'&""F&tG" "zMj"""""+"""f'"""&""g)"'"""r&"bbr&wz"'"""+p']U"zGUPy&XuD&z+{zDpJu G'"""&r""""b"""z']"""j+"zpz-һr"""+"wjrr*""*r"+"$""'"{b&"""""""""+""$-*"+&r""zGGw{r'k""jzw+* "zpGwUwt*&rz'w{"*z "w'"kp&wB"wv*Bw"@wtۭm{ pM ""rJ" ""t{ *vڑ*k'"z "w'"k`-'+fk"* "'rw''$""w"r"""*b"B$*"Br+*t'ԫ wzw{ wtGD{}{z &՗'pJUg{wy*zpzwwQUՙQZQEEGTZ%pJ Mzפw۪ "*g&kRjb'"&""%"g+ """""""""'w*+' '*w'"kG*&t{v%z'"bzr Y***ڙa{Kvwj{b"j$"""""'"""r * j] q"vw{p*""$$+"J *"jrG*B+"" *GYrݴ$"&Fbjb""'"""r *urpUzrk*gB*u]Y g+b' q*{++ww'bj{ $j'"'r{"rb&+ *rqrYשwR +r&""'z """""""'"""""'&"""""&"b+"""""&"w*+"r""&Bv""'&""*"ۢ"&""""+"b"""%""b"*+*"*wttbgb"{w utgk{ '"&+""b-+k&""fg+k"+[ZE'v&{+pP""""r*rI{+r*z"u+rYMWp*"+@z GBb @j"zM*" d} bB+*[ZE'v&wz}}wuUֺ""""""""""""GZz+"+"G"B+b*"rzt"*"'+""""''w"&vw" `r"""""b"""rZWtu+rTzMUwwFvҢM*F+**w[ zw{"*u"T+bJ & '""@"b+""""rЧ}QPI}jf""rGV """T""۷} z {z*""+""""+""Wy]&""k"ba"+""g"rG*+BDd"&*"+""d*R Zp+"&pvrk*$""*kw"bz*"԰*wt{""Wy]&""r++fb+""*&z""+br""""""""""""zb""r&"w"b*"""t$ b""&&"""""'"''"""""&{"""""""""""&&d*R+b+ P fWzvzKtk"*wrwz w&Kb'+&"bW"*"""+"'""""+b$"""""""""{""'*"bb*f'""&bb""'"""Dմ""'*w{k{K"rB"'&*"""F"""""*""K$ԧvZ""wzwrwp+yyuw*"+" w''"gv"-"&zGtftgbzwp U*""K$wz`}g&!+kb"r&""wzrwVGj}dfv{'ww UZ&QٝXzXQ*wDwGQ*{wwwtzMMWz*"++f{b"k""""r+D""*"{Dz!Bkz+"r}`Irpwr""`r "+""$[" """""b""'vrggjB*bwt wp{z&btwGz{gbzwwwww pwz&weUT""b%"b"r bw@ww'&f zHr J*Ktz Kp*f&@dd PЗ'fBJ&"j""kgwkwPzjz""b%"b"r bww}wtwDG}g"r&"*&"""f }wzjk"B*b׍$אKgKwwwjаWgpgfrfg+*{"rwwGr'"v*f&bv+"&"+{&"*"+"bk" "b"+fb{Mwt %ww" }p&rw&*"""&""f'*""""""""*"+b{+'*jrwwzkzvr+&ft]t+++zjj"b" +z+Jzkfk'""*Kڪz']YIfr"*vFMttfR $J''&p*""]Y GwuzJ"t@+`Q*gzk'"*Kڪz'W UIzd*Bp'"&"'"""""""""""bwmDG'b"""&&"''FK&+"b* '"*""`+V&] *&"rB*$r+""T JYUYYI}ڠIAZm""b"&'""&"*""++-"rvt}[["'""*""""r"g{j$r""*"bb"*ֶd&&&}pkB{ "rљ'""&+g'"r""fb `"'"""""'"""g+Dprvwt&+urJgp}]@}'""`"'"bTK""rgK* d"G{b@'"rM""'"""g+t{pww"gw"pK"r'"UHAm"b['pp TupD&PMtwww }TDGGzڦD$ڧ}t]YPe'w'""-bG"j"""""""&w"""&&"&"bw'r"""""F])bw*""-"Ҵ"'"*'[{$"""$"z"'&{&F""] }zv "r* @PME'"&+**{k+"rww w&{-"*+z$"w}r""""Jk"[צ'+Bp'k`rt+""*&*+eup"B{"bK""J'b"ffD "&{-"*+z$"wwwVgw"wp*"b*""""&"""&"'"b"""""M*"b(umz"r"""""r@zzg+"rjbb'"+++{'''"&r"'w" &"b$'b&""'r"b"""""""" "+bg{"+""&'+"""zwR]{ٙ%e"XVw""*v"'"&""""b"+ """""""&'"-rr$b""""k"fbKb'"""fw"" +b"**&z@f"r"&""""""""""R*Y""*"mRGw"F}""r" I""""r-""r-""Y"'T"v-""""Q$"WY'"F-"rI"E"""""""R*Ui&""""UP&] Iwtw""""""""$b}'")'p '""""b""" ME"""b""w"r]@""""& "y""""""$""BT'""A U'""""""""'""""""& "r """""b"'zwM """""YYEYYЙYQt&""zUw""""@U "rqPFG""""""R U%GUpG'"wG'"wgrGpb"""+"bv{"{wGd{t*"J q"Xw'r"+""fbw"׷w$'"pG'"wG'"wgJ'fz*+"w'"+&j*"&""""""b"+"""g&""-m'rj""zzzwr*"w'"Gkgd"&j}*b*֦"{*rrg'*"zjv+{&@w{Zggez"&"GW!b&'uw"""*""""{"r""+"""""""""-" r&&&&"f"r"grw"B'"""{uwv"*&wr&Kg*b""&b""ftzD׷p{+Jt}"ҵG@bw]r Z+%B]*b%b"zТJMf*ח GU ubJwwD}&Ҡ'ftzD׷ T] ptwGBGpUwwww}""""""+""'$r]UY+z$v%$+"z +"&UU*"&+$""b"pjt%rk""""+"{ -b"twGU ]դ@*$'G*r"bbgbr'"J ""&b{$pWtkBJ}зYzw qrpwwWQ@]Qu]]]""{wYG}wzwJGtPYֵw{{zz"""""r@Tt z"g&vgwujkjt'x{*&tpprtfZ*B &B-""W`Tv-&{"+ DWpGtG@W m jr" $g&vgwujTБQUyFwww*w }z""'"&f&{M`BGgGפG*"rv w"+"k&w]W*""f+'r}@""b"'}+""""" ""}z-""wzt Uwz&*&*&b'+"fbr+K""&r"+fv'tb'wwG[uwMz{@pwWGz@wGР&{PJM&"*r}tjrZwJ"""&"rҫDGzG""$"*rdrIp]wr{w[]yH+MGEY }M$"+{M% TW'{ru&R'"bw w+ {Ԥ[B"$"*rdrIէ gbEzw'+r'wj RkBq*+b)DPwTEtYtpzyp]uIGU&{uWuGzz$ByׄUR'"+ztb'kzgWշwb"'%b"*"gbm 'fBuE{zײB*"+""!*"'b"""""r"+t'ݒ**K+R"w]zwwvp-"" w{{wrgkR-U"J*`w@$b]}&Z"z"tb]+RD dMzjB]YyUGz"]rr" ""tfW"+FZqz&'"*`w@$b])ۭy+&"uf"'f"z"""""""""B"*rzK'ֵ""+"U} fBj*b$""* v"&*"'{Z&*ggrr*jBuP}'UQQՕdtyڹr-Kf'z"]פ{"w*+"*Ex""b"b'""""*"j" """""""""rfWm+'"kw]"b"wֺrrr*b"qbj"ZqvB"b"+kk"""+$""""""""""r "&""""F*"""+""'k{B&f" k"'"""""*""""""rg{t F*rMt{&"'"""""""""""r "+&""""""""""bb$*""""""""""""r+zz$"-"r "z&"r"'""""+"b"&""""""{"b "b"""""j""""""""""""'""""b""""""""""""""""""""""b"""""""""""z """"""""" ٷw*UJ'wp"rfbv &'j'v""r}wK+Btk""""""g"B""""""""""""""""rGeUv @upp'"JpGwKgb&"'&w*+GJw'GJgFJ*"[pwP'yK"'""&z"G*"tzww$kk&"v @upp'"JGzwwgtw +ft+"&b&""""""r""""grzbK`jpr"""rG+G*$$w*&v$@vk"$]&vFbwk*&*"[ ۧJz{wzwwv '}w}F'"*"' fbYHJZHUpRf"bb"-""""Rb*r"'&""""""""dbdb+"""b"wJGB{{""btwg{b""zwwrkd+"b&j"j""*&"""atyF}TpGw*Fw$udt djjfM@Рwv M}B &'"btw`UttG&atyFUwwWU@p {Jpww"w'"+"r"""" *vw `JR++"Gg"p}t'g*@'"-Ҷ+'j&t$'fj"fvjf ZrtwpڽppwwUr*'v+trbbU`+gY$"w] +v-&"""{&-fb$b"""""""zJ'&Bwkwgjz+rbv{zFvwՕd&+KKvb{kr{'"Tww&"}jbb"b&"""""K"*r'r"k rwPqR'"u}yB* """t+" dwG-'"Tww&"+%rkWKDЧ&"b&w"+""""""""""""+kb'"""""$"b'"""rww*zf+'"{'""+""*+"*"'"""B"g{"g{j{wwugUUWUU݁G+ Ѳ+b X-'Rw%b"u"Rח"w"&*"'""+"'k" """"""""&bb*++++{""""rrw+"""z@t*"""wMKwwjz@]'"*'"""""""b' """i"[ ""Mrt""" "r-"r"U"*"Ik-"""" Mݕ m"Z}*')"R"pE""""b'uP &&""+"Y&""""""z"bq"Gp""$* }GDw''""""""""+bt""""""'"rEG""""*m"D""""""B""rww"TU-"""""""""""""""b"("w@Gr"""KG ET"""""PMPu}U DWtjUWIEѝUUY+""{Uݝ  wz"r""{%"RzG }""""""pM$G]K{"k""b +r""""""""+ "rr"&k"""""" B&"z{'&Ԓ"Zt"f"" ""+&""*""Uwrz"""""{"k""b-'"*"""+""""+*"""""""""""""""""j""b "'+'"&"+""b+"b"""""b"""""&""""&"""""-""bf`r"b *"""z&j"'"&*BrBwk+uzwww*"*""k"""Qxw&&""+E""""+""""""""" """""""""'""""""+""""bb"""'r*r"""""""UuwF"""vz""j&"""b""""""""""""""r"""""F'&j 'W"*}GPTpJuT$""w"'B}"Zj""*"rwIDDFY$-  " P*"r"""""F'zbwz-&+"&+Fw"ڠvzw'zUAQ"+"zF]ywp"zgv pGIw& UDgvzv@dҴw"'mrJYr{w ""*rww'"""""b'w""""+"B]*z'"""""b{%B&"""pz%YwpwKBz+v}dU wftpkkpUD ""r"}wyM$" tTM'"""Iu{wwt'QujW""B{}vrv+p׭@W '"{]]Pfw{"B'""԰vP"w$tD{D"{wwt'Q՛%J"+w""'&"""""&"+"""$rw`W-g*ww]w KJ jz٪*wd&Z٭Zdz'"{zzZ]ݕYXyעJ%ݲWPj}ѵK zzk}z'v """"'b"""""""" {@`j{"z@"bۧvwg{"tGבUW+z`G{ }}w$v{k "b"-&v%zwMppwwQjEpzWppW* "" &$}bP$b""DPwZuvw Gqt] w )"{G}"-&v%P}}*wptD'}}wwjztwyr{vY]A{g}zpY {BwEzvwpIuZYk"b*" "JP""WD@Pw-""bb"D"""&*""brw"{Gw"b"zU%wwG"+""P@}tzzYuww{G}wwpwTwG z YQ@@wwwvЙQ)"{rzzw**""pUէ{k+&""&"bk"+"""b""r"&bK"f"b""&&+*&"w+bKg')" *r""""""""""B""&""&$d"""{k+&""""""""""v&"""&"""""""""""""""""'"""""'b"$b+""""&"+""""&+"&"br""b"""j"+&""'""""""""{+*"&"w"g'""""""bbk++rzFg*"'"F"""tGw$""""""""""""""""""""""""""""""""""""""""""""&&"" """""b"""""""&b"-+"bb"$+&*&""""""""tpjMz'r`ФPkڰz +]WА UtPwP@yG]tzJy*ҩPpUJU$}UQt]QMtpjMz'r`{MХQyyaf'bw&Һ'{+Wjuzp{]BZUPPG]w]uW uw}pU{m MMpwYץYtGIw}gPEz׺ *rt"M]I-[IurbFGKDtdw g$*'""Jt!r""'b+""v* ԴwIxw}w]UrtTUTMw"ݧYYww}t]ՙYY @]J"""+"""+ t"YIR}" "$rt +"vm]"-"""*"-""""  WtPt*Iw" %"BY+R'""+"""+ QA"&w' *՝$}""""""k*%rU*+@"M e$"{+{"'"*"&"&"w'r""{' %r""""""v+"r{W$""MEP%""""b""w"""&""'d&zME"""""""$W """""XpUy}u}Z juGrww}EYtw*"rwYYG'b"P-"BP"r""""EE-w"b"%B'jyY@u WttG !"DWu @J}{j"@`kr U'Bp"B$""p{*Dzzt"b"%B'jyY$K]Gyu@{G'*+{wݫ$v"F*``+@bںwJ]wQUtg{Ч@v* I@" v'* ]"r [IK@P+v{j"mvp  pwD`zխ"$k"{+bb+""+b"'*' b*""Purz"Br'&"""'+$""$"""""""""z}*"B"wPpg+GFvgv"u' `G{r+rGzK*$r""vwA' UB"kb"B""+$v+B'"bg"W@M "Hw$B " uJ"+kY`ԕr*"vwA'[} UU]"t*"++w"r'""""""""""" bg"*"z+"zbb""*"rЙM&"""*jw*""""k'Bvz""""""{zҭ"r"*"""""kFg"p@gwP]D ҭbBb"*yrp $ww%"r""*vz"r w$wZm" f""zk-b""""b""r}ڷJ]uv""&tE{b"jYE"" Е$vr*""++'b"r+'"b"""'""rwwutzw w"IGU&וb*Z*%P+b"UggvWm+* JWYKMT+Aԥgtywr"R$""'""rww] QMjKwww}pGww"""""""'ҕdzTerp]u&"bbk"'"""gU&"""-' ]"""'k$}v&""""b""G"uzTGr+""*"w+&b"""+"r''"{JT "b*"r'"{-WIy&wmP@zz}WIKP[]QZ}wwGGU""uYGtGG "+KfwWywrt{Kj""""""rmrD"""*"r'"p "G+rK$+*v$j+f@+""pJ&"Bb+'fv{bb""zGYz*W""D'"""*"r'"[w"+wz"w"JYQGGr% AzJ*"B{rIkkrbt'"""j'""*+" gB&rud*"r""""+""$bv$"bg"'f+ "fg""r"&""""""""""""+""""&zrb&+"*"""""r"'""+"""&""''"'""j+wgwGb&wU {v**fK""""GB""" &*""r'J&"b"wK$e+bQ@"@z{+"'bz'"v+$& ' p$"vMz&ww G`rg"b G"b@}zk@b{$"wK$e+bYQ]J"z*`MGv'v+"""""&&""*"{G"w"bG&""vf"&""z"*"*"`-w"""m"+G{+vkf""rZGw'"vՙG{{jwG*rg& '"QjfzgWtK-({krJzwKfB$g-+bvdKg+""""""G vGetЧwp""w M zk&`""}zk-{KB{v""+"jbv$"""""&""""$+`g+"b"wTzB&P*" R]g&&}r"D"'k'"""""r"b"""""gM"" *+""w""&""""$+v&j*׻bIj{&"g"b"+"&""XEg-JvG'd""&v"uek Jf"f+B"""+&f""+""""w"Z" zG"+"r""+B{""""""Ff'j"""'*""&Gr"""""""""""&"'*""""*)""'"r"r*"f""&b""""""""""""""""f&"&""&"&d{"bb&"""Bk`r&""k+""""kjgpF"jJ'+kk""""""BW$f""""rjk"w&"Z"rrfGp"*""J"*b "+""""rwW@t z'"+" '""p"҉""""""BW$b"&+""""""fk++dr+k""b"""+&w{t"gr&a"%"m-&&w"k&'& wf'&&"+B$z}'+j'r""""""fE&""*"""gzB+""""""""'""""""""W""b""""""""""F%"z"""""")pTwz%U GGDwV{ۥһtP{zw"""v}D{pKj"""wdG+""r&rrw""""""}׈r ԧw+D&"pG"v-"""r"k""-*")"rP{p&""*PzWD{uW@Gb "k krE&r*r ԧw+ zwGw"&"*BwwMzGZ}wt""""""'""+&&u""*"xkrgb'"""f""""&""&""""'+b"""r+"%rD""""""""b)"rpzp]ݤ&"'fbbw'&]gdr*{G'tZPk""w @pdwGpuw"*+kwwG wGpDpw ""{wG@ }"""+""GM'kr%Yw '"""""bv{'"zgb&k`'"""'"""+"{&"b"""""""""b"""""""+"t'f+ +u$"&br"""""""""R"f"""f""""$k"""zgb&k`'""""B'"""""""""""+g"""""b"""""""""""+"""""+"""*"""""""""""""""""""""""""""""""""""*b""""""&""B' +f"*""""""vr'jZ*b""+""""ѡYr'""A"j""""&"""""""""""""""""""""""""""""""""]"""*"""b""""""f"+""""""""" +"""j"f""""""""""*gG!]XxDJJ Zw{*q'"`+ &g" ++""r"BB''{bb{w@{wzyz '"*gG!T`rY* Gt+b*bJ+& "b"B""R- uw""" &"}&""+ &b""" - +v*"+""'"B"D`"bj"+"b""&'&""-vr{}{g }{`z*'b*"+b"""r"""+"""""&*&b""$yrr*""""*""""&-"$r""+&"""b &"""{z"fwpdz+twrgkvt Gg""'' z'"rB֧b"  "F*"b"""-"r&bm ] U]ݭDUP)٤*uЕpD}U$"" d@}pVK Y*zzJB {@D}pDкz""-"r&bm udjP ]*{tPD{ZMv}WDPUMz}vڻҭjzGJ{ UWmU`G*w t{MP+J{ytIrfw$""MW{ d'&+F$`b""v*B$f"""%"Dr" tz*+'} d"r &"b"pGmҺJ@pM Pw@GD PԵwwtDgj@֭R'*rݫp}"'"$"""'"} ]""B"wڢѲr"" wg`&"" DgrBm'b++"*""B" "&""*b$""$"""'"}EP*"@"Х*""""""&$""{t'"*"*"-('"[k"kr@&@M'"jb{ԤD{"bkFkk"kz"} &"+""%"""""*""r'"*+$" bd'"b"""b"w"f*&'""vz"&"r"b""""""+f*""""""""""b"" "&+"r"""pW}}Fer'""uw""&+""+"""'""""b`'b"""zvwGG*j""wD"R-"b҉yp" +vm"%b"p*g$GT(b&"+[GT u tZ 'zdfr"r+"zvwGG*tݭ&b+"twt*D]}G""""""*""*{""*+JD*""""j*"*"}+""'@+"&"j'-Ґ""""""r+"""E%b"Mww'&&b"*"t""""&"""{Jtw$*vz@W-"f"tukw}]w"z@Mw@PD pGw""z pJw"zvBdfr%Zzz&"""""zwz'"+bwz "J JwBz'"b"+"*M}GFz+bg-$]}qr""*""gb["+{Uݷg+"+bwz "JDuwPPD}'"b {w""""b"""""b""""""g"{(rMrr"rvkGMpt*$ g'Md&w"gKk'zr"'"'*b+bgtk&{jv']zp"*""&"- "" ]pezؗG"rb"*""""b"""*"""""""""+"*r$+*"b"+"""v{"J]z"'"ݷ+*bz*+z&"'&"""""+"*"eyxwrwKUWQ&"F'GK "`g "K*"rr+'fbB""'""j&r{jէgjbz{+"""+"*"eT)PqJw'w'f+"'"{KptzZ Bbv+-rr y+ze""Kk+rGrug&"+{JbJk""j-&"""&+'" "{"յzG'&r"&"" "r+r'F}z -" """rr""""""""&""""K""""'Jrb+""*"b"""""&"'b""""""""bg"""""+&"vgP&w"*"U}{'""*gjbbbrv"{w*r&""""b ""b www+""r"Pr]Y"zGtM@`"""j$&ZW' ""k""""b"GK"]kFb"""b ""b wp$ @G}&""""""{"uzv'k$+"""" Z%*r+fgzwtpg*$jݧgu""'j+"&rUJEZb*"""""$r"""'+}"&z*"rf"+ "'""*""""*"r"K"fU-K&""}p""r""&"""'""""""""""""""""'"""&"b"tpg+**b """]}'++"kF+""&b"""""""v+r"b&@yB@еGgٷ@p"GT+z@ mMU "] WPwwפb @ݪ]pv$+&@yB@еGuGE@}g&}{}zGMwJpp&"&"B""ww+Jut{r{'b"p {`"t*g}Mrz+"+"zbeGJYGUpm{zu "PTP]]AJ۫+JթY"brvw'z*bU%׷G[ p Zwv-fb[pm'&bb"MZuwpw]"kvDZwt[t*vbG]ݠRwvv-"'r&zw$"""""""""*&bg """"""GP "P+"D{rf"p`"""*"+"b""""rb""""""bg bb}wk+""tv"""""""*&b""+&B"p""""+""""""""YUzp"*""rdz"{J"w"g&gf*&"fbr"&""f"""""w'Gw"'urb"""b""""""b""+"'""""""""z"""""""""""""*""""&r)""&"""+""""&"""""""""""""""""""""""""k]z"""*""wG"'+b"r+""&"""""r$'""v'bbzk"*+}+rGp@wRjw}"""r+GGw] W(""M+ݭ""'bB-RrP@pbW] +'"K@vzk"*+{r'&*""wtMtw'g{w"""""$ p'QM'""*"BW}Gw+zwwGWבZwԑJr'{Jw(""}w]zG'**"bB@$+"k؁Yy%"r"٥w$R]*"r"&*")"")ݪ "'"j""r'FgM} Рw"fvwTP""r"WU wtw'"]WYWtKFg&zv+"&jf"k"r""$"b""kf"f{gbb"b"&bJpzDzj]B""P"r*""+""b"" &"" bpw*""g&zv+""*brb"+"j&"&"f""""r"""""""""""&""""&"f&""""*+*'tk"""+&"&"*"""""""fb"&""++"""+vj+"{$-jzz$t"fzw@YPu '"B*f""XXgqW"u&""$"e"br""""""""""*"""""""""&""+"&"r"b"""" ""`b"&bb""""""vJw"""bj}jF{wzz*"""""""""+""""'"t"*""""kGrrrf"tJBg k"""*"""+"rbr""""&"b""+"""Db"""b"j"""+""""'"+"" &"""&"""""&""kw w'""G*-g&Jkpkw"DG*k+bw ggg""frb++r"wڧF"wuZ"+""""'""""""""""""*""""""&""""g""""""""""""""w'"*""&!"""b""""&""&""&"""""''""&"""&""""""""wApGM"""br"{j&""""""""b"""""""b''b"""r'"'{W-Uw'}pww+Pu""W"rw{kPjeF"%""]&v]"K-""""RQ U PYխ" -"KY" t"r'"'{W-]UХr+zwDw' Dpwww""*""""vtT'"r%"WpW] ""+*"K {f'" " *ҙU&-""""""rg&"{ "" }]'""b""p"""""+r{$"BYI"""""b* {G"""""U yttt}YY py YUU]b"Bב}@"r"{wp "KtY]]bb"""" }tzzR$g""m+[ *{"b'""b"&""$br*r""*"BQIu T"wrK" ""wk"j'+b]rGub&&"zR$g""&%b{"""kE""&+"+r"{"""""""""""b++K"""&b*""""""bt"b""+"""z&"&b"* """b""""*brb""&"""""'"r$%+$Yu}aGd&""Gz-'"y&""k+rר"&rr&$""""'"+j" """"""""b+Bb"'w+'"++""kr"""+U}-"""rGu+Jr"k+"b+kk&"""+"""""&""""t+"b""URe"B%""p"bM }""""r-b""GBK"*P$z """"RY}M "ەy*"r%"rE"Rp'""&""""t+]Q)""""&"UPU+]e""""""+""$'E""'"p }*'"""""""""""M""""""$"b@""""+"''"Mp"""""""""wtGBKUٕ$"""""""""""""""b'-"By"""""f"'wEM"""""}}TMM}JwtDDGgU@]YQ"""PU UYw{""""b+W%"rtUP{z""""""pU$rw"""&""""'"&""URԥ"i""EQy"""["rub"e"FY"*jt%""""RU՝Qg&A'"r-"rY"}-""&""""'!""&&""UUU* Itݥ""""""""'&"R$+E]ԕI$'""""b"""& """""'"rYE"r"++p-"""""""r+""rd"FYQ U """""""""""'"""v"-"r r"""rJ&'zWI"""""XuM}ٚXPݤU uE@QQUw++"rwYYw"""&&w$"rYUZY"""""" B"kd+*w'rXE Rpjwf[+MZZEE]DՉY'"&}}KPgww "`"+@vvkd+*w'rXڭt]d"U {kw'jf&+d*"*BQ`{)hrZg@WU'Uup }UEwTשk pTypzUY %z'"&eEz+&v[@+G]rQ"zRR-z*rrD"EQejz]}z{K۽ &""&`{Wzw-""""""'%wBEt}krk"UFEWvjk"UYב]+zg@vkr{Wwwk&%ֲ{r&""""" "+"z'"""""""""r"""k&kb""&"JQ r""r"""""""""bvr"+"""""*z%""r&"""""""%""""{"+"&"wbb&""*"""&""""""""""""""""'"""&""""b&*""""'""*"r"+"""""""""+"""""""""'""{%b"[WGYUYvҵ&""%W"-{"""""'"r+'"""""&""""""""""""""""""""""""""+""r""""*"""r+""""""""""""""*zzv{g} wU%"""""""+z{pw't"@Bw"F)"w"pw"""r)U"e"fD%""" GWtGu{tЕbJt' ur "D*"+z{pw'U+Jw+Btp*wDtww""""""""g'"b{'b wwWt&"""g"""""b""""'""""')UQ""""""""e"fU]ٙ k"""D""B""'g "wYb+"b$Y"""p]MGpJGw uwvwpw{wwMDuwEMՙt+""vGtUT tww""*urW]zw""""""BP'Jz"p{k"+"mfFwr{ 'kK" pz@ zMqEw"kmJ+R "bںr *Ujfԑw"p{k"+"r%&+b+&t@ *e*w'$"B'r"*vk"'Gb"+t*TZDG}wwEMDpwG@ۻ+ wMZkgPYz{}W+wJJzfMww@tD[&{{wzjgprWwr-&+-w"'+&'"")"Kf'"""""&"""r"++J[zb*w bWEJ F"k[w&jjfQQA}w{v'$""gf'"""&""&""""""r""br""+""""k""""Kt'""+rb""""""""V"""""+"'"""""gf'""""r&"b"""" @*""""j"""""""""""""""""+"""""'""&'""""""""r"""""""""&"""""""b""'"""""""""""{vw""r&""""rb+"v"""Brj"$'zw*""b""+"""}w'"*+"""r"""""""""""""""""""""""""""""""""+U""""b""""+""""""""""""'""""""""&"""""""+""""{&""z*"zkrG$"Jײjק"X{yIG]$"zkeJz$&*v"+"" {k{GG+ww'z Y@{&""z*"zbd&+"j"w(" "+"r+""zr*zb$""*Jz}*U+zUww ݍI*Hw&zKG YpЕ}uw *"*wz*w&"+Ftgt*bDGuG՚(j""w"{Kb"j{'&"+""-"Kb+"""""""""*&*'++w"+ лwwwJ{{rr "z&fw'zD }hEYUtv{+w`J"*v wzw ЪpGMtQTզ*W& DwwZי& %""t@zUT+b"bQ٠ID UU%Vytv wzw Mz Хgw wttD]W}pQ""jr"b'Kwr]mrerpZ yMttttץGQwJݺ{EuI{I+b""'b۴rY%""zMݠT'Kb"""+f"Dz]y$[Y]"bj{t- ]ݺ"&" ݭwt Y B@kGp MYEUpp@"۔YU] G++ vEUU)}WPYw *pUwGzwyzty`ݤ}ppEwE+Wq{]*wv d[ir+vԤ{PDj '*Д]pKpYUufIt kڭ wyzty`z Yy}PGtwU@}wwE""*"""++vUwڥBP}wuE'r} b*z'+*ju""աYk+""+"*z}vtGzw}wp{kf&W&&+'bk{r"Y"fw@'DЙDprGPGwuwz}PqW{p}r{w}wYPU"zPݕtDwjJzDP] PJWf&&r]v""$""r'DzGtb+"fUT{* @F EpM]U ""+&&*r *"r'Fp+ "k Wp&Wp*"@k"$""r'pwzw"{D'"b+""*""f}Pzgڑ "R)x  ۪Gz&հJ vupwJ wZvVFU UT-'""'""""""""""f""b*"*""R'"*"""wKW!e"p""mrbz'"'""}z[ڧ """"""+*-**z+"GwDMz@}m""]]K *""r*+Ҧ g*"r]'&zw*"k&b+r MB&z&wGrM z&}wK}t۽mj@{ Pۭ*wzjF"'""z+{ dbEtzzw*"k&bzr+*""w@"}"$b++"z"b&&+"k'b+ +zw$פgRZ {www+DzGԧggDwPz]**]Mz"wW"wUՅjwEקzKjvwtՙ}pvXQw%k*WUZp E]Z%ݪz"-&r+"&"""{t*""""""""" kwgzZ&w "u{rvb"wwP*$dbMytzwzF+v"k&ڷzhBYUGzGKwMP ڰEwgpuy@ $"& ЭpB D dpwJk D YM]}Dץk&ڷzhBYwDy}tqtzw*pr{vzpՠ [twzMwtM wUygwסKzڷt}' berJB w'"&pTw@  w]w'M%[eE{*Dr""bb@&Ymzp@B zF-"""jterb"*"brbݷҤp{k]zpD}@v } yWt]}zGGGD yuwV }UevMwv}w** E"}"ButjG$P&-"PGڪw&{WwWWz EE"@tw`{{ $r`*Mwv}w*w@wp"ww]twE"""""""""'jrWK'K**X'{{gj+"zDww*"*'g+bz 't@"b"zfg-B bb""b*"&T-"tG w +'w{-'"*+z*"zF"wzw{'tDuzkbwwJ]wzk}w}gg{z}WԫG]uw}]""fzWtwkzzWtd{{%w wB""""&z ""&'""jZywtKg`קUj&G+$"'+'""g{{W$p'zGKtG@tJp]prt*&"&'""jZQ]ywwwzzwKw{{""'""k"g"tMv}z[rzg&"b"+&""dp+*"""'- {w"f""""`+rw$""+"""vDz'""Gwwv"fB*+@*'r&+"j+r*""rf&'""$ +!{vJ" wrJ*zB' &"b{r*{brzprwpptww+zp}vt""eWpr rvzb""zzj"'"f"zppzzzMj}}Rtp"}*+z+wдMzTd{b)rUGP}*""VPݪZuwPwEbPշ+$kw&Bg+zppzzzJEg+*vwEw}'Е}Gwp""""""w"]ЧrMۗwg"{$p zUzg"+һuwtGwEB"b&""bj*rWY)rE Uեwrjgr b}z'PYIrkrw%}yק""kw]PE@M uzbjv{}wWqEuuMwwwUD"" pԔpw"{{zJw'kwu]wW""""br{ 'b"{Ddww{ ]D }wE"Z+w'Qr]T "%"KJ]Zu""""PP{wpbPٷ)"+k{Ddww{ }ݵ+d+@zwwY-DTpwwE""b"""*vw$Y+rwbuKY] $w*۪лD' * J `B{tu B """"""d&v%"wwzݵ"j""b"P""'*"z  +YMP"rb*v[]I]'"""DPեjf@]PYz*vwf{{p GUPTw "b]] @wk *wzЙ@UE!"}PGGM]bv""""rEmf"'""""w'zpjrJu+ *Z+pYݕ]I ""tb @"pb&"rGtJzzwzM@z$"vPBp"'""""w'{twpt$ww&JzFD Y@YuBtQq }w"PMI@uUuЗYtԪԠW WЧGk&zbtEG"ݪ-""rzzz*"+""*M"""&"" Gݪ'BJp@"""""*w'Wzz+k""'JD"wgbrwwr"*KguwfwwwtݧzwTppJwttkWuw@}w$"v BTEwz&"rwpzzwkJ$U+w' yq"׭+"j{ypZ*-]"r%b"UzPu"""bW]putUuUuzw-"{"}$wkJ$ Y++b"zwM'U]q""""""t"" ݝG"BWWG'"g*b+{Ef'"&r*U&"""w"E%B """"""B+"r{-b"E UUյz*&""*Gb"'""rw+z Y b""b*}'{-G '"""&]tPtG}zЙuwg u zzzUEY]PUw""GwUU]]w'{zW-"{%T}E"""""DM-rD"gݕ'""UK&tf"B*"J""rtkk{Ekv+B*bGfb$"bTWt ՠg&k-qwB " ""]G"+$tEw"&"gݕ'""]]]]ջj"`wPr""""""""""""'"p"$""G&r""rUt""k+"zj&"""" &{""""*bwr+""+"""""$"bJv"]U] MUg&bw&]&r"r""zvzTu [""gvzfbgj& b"""bz-b""""b""b%ҶbrEe&*G""&F {"d"mz"*JtE'&Bf{d""&"&fwb&"""v*"tG Uvww+pR@"r*t*zQ}r F-v"B-""лJ]"ڽ&"""YwDPYp"U-G*ҭgv*"tG @@@i"kK'w@G-PE@t"""""""&B-ݕ]*BEKT}'"zkg"z'F+"kb*BU"""bt]mr""""""r'&Z]P-""G@ pTj+j"k"w""r*""wJBе&tYU""""r*r$[W k"""" YЩww]@XE bBGrK}UYw""rGYYPY]Uէw*bzwwM GWZ]"r""""z-w&"b+T*+"x"r""u"W]t"k""$@"b$""P+*M"v'""""KWUYYUm"Vq'"if"B}-&"b+T*}p *w""*x"""""""""ww}*"R'zյzt`$""""k"+""""}w""""""m+t@""""'m*w""""""+""b{}'""z}G@)+"b"&&""""""""-)"}""""""f"'Jzww"""""MUY}ZUPzZ ٝwu f""" ZGwww"""""fw]if { zu""""""rd@$r""@wwG}G']jF+}uRq"e"w&{Mwbw W*)r"r%""к׹""""U]W ]YYbU*g%'$Rp$"@wwG}G' *j&fBtU'pM}q"""""""-UUU&"{gtwTWw+"b+gz*"*zUUf'"&+M+Y"b""}%rY""""""Bg""FU%""tGt wz"z"""t"""*"z"ҙy"""{zj'ڕY+"""t]uw] wjF G{z}}]@wՕYG""zGUYY p"B"zw%'uT ]]""""" U 'vt"""-"r""%rUxzG{{TpX"wBTg `zD@M*k" br{+"zv*r'b"fjG`zYGGwפ'"""-"r""%rYy"YGw+rJ'&b"{}iE"rj`BJ+ u+"w'&GdUw*k"ZDw-&kr&wv+ &{&a"Gp%+'"j'k"vj*r+f&'{k z''b'+"""{b"""'""""""" '"""""+r""*'&""&"fd"'b""*&""""bf&"bf**"g"gJTpg@G"v&zwYuG+`Dwb"K"v*Gup"j'"""&b+"b"{WttfbU}RհfW{{}W+kz$r"+Jb$"f""}} wԝ] }r"}'&b+"b"{WtUEzgb&fUUU'U]Uݰ""+"&*w"{E*{Gpu'b""{"*"j+dU*""r&`${}P"dE%PW+"+&"b"rwG$r"YU]z-"f""&+**"**"*j}w%z} """bk"*'{t"b&""wMGuupwwt}TGgz}zzzEA wM]]zUP@TM{'&rzUr}TT""""""Bխ r"tjk*"&b&jf"*z'"{"b$bk"'bk&&j&"{{wwzr""w{zzF"$""z {""f+pp*"tjk*"&b+jf+"rf&""g"zw"""""{""""""b"""*b"&"+&"}"r"" ""fj"b"+"'f"&"""r+b"&b""&"&"r&b*"{*W{zJԻvvwwzzjr"PDM'"b'"r*&""'""&""" r$"""""""""jb"&zg+j"w"""kkB"{'"b+*"b+tRTKzr{zw*"gb*"""P )w* uzkI& "&&"""+{yk{*g"@*RMvv&"qrw"$""Dd"z@+Yw&"P )w* }WzwrP'"fz"$+" """""""""""+jb"+"b"rb"b'"Pw"&"$+b'""""`-*wr"'"'{""f"""&""r"ZG*RUYqw@@JRp"*+xbWTzw`'"*d&kg"["'""'"+""+"-$&"""""""bG{'ztkp*+""rgvb"b"bYY""'&&Brr&"""**bb"+""""B"""""DvG$B"vK+""b*G"Ggbtt++'ДuEpWr&f*rbr"'"""G"r+b"fi$"B"""""b+$""+&wt" "G*"+""+bv"&rb""z"*"""rt*bvjr$r'"fv*' +$*F"'"'jf""*bb"""'"bkr"turw"Gr w"mzgg}k""J p}& t*k@"b"gb"'+"r""+""""'"&B+""""""""""""""""'*t"""bwf'{ 'rk""&{*"f"""fZUYթ"*J'""""""""""+p""f"t'Bw'"rw""""pb"v"g"t"" "" "&t"$""""BJ]]UЕ $"r$""i"""""""+wwt'"&""b&Bw@ww"tJww'""""""""*wzw'")" Mwwp$*""r"""""*ft""""""g+w""bb"'"wg""""""&""zu ""pGtw '""&"""""*"""""""" "wzt""""""""b& vw"""""UԤUUQٚUQ]]YАzwWUE"""jU""""""w$"z ۢw{"""""" U-M""*""""-b&}+"bb+bYPU"Zz+tV ۴Gpp$""'""+ "r{""+&b&"&"*kzQd}z*""bbj"""*""""-b& bWU*"k"bb"&"b+"by}YW&"$"Z*gr{kt{kvk&խ''"ej`re* "B&bK"*&r@p"'З"'""""$+""""&"""""b"""*r""""%""""""""b"""E "+"")""+&+"r+"*""+""+&""""'"""""""+"""'"b*"+w}eB""bwWg"'"**""""""+""""&+""'*"""""""""P'vb"է"۵""D"I٢"[+rEP"-"""*"J)""""R]Y @PU$Tu'")"Y"R}"""""""P'Y"&$"v*U+Qݧ"""""""f %rI+"B$"D $""r""+"""*"""b"Y""zj-"Y """"""p*""W$"")""""""""g"""*"""rb'*Bt u"""""rr """"" Y@MMwݕgMJtw}UuP]]@*$"rGUUYYww"b""pUQ%"YYڐ[P""""""E zt++]]$"ZUZ}{J"*"zG&BUjJ'wz"b'"PYp Jwtyqvw"Bm"bM{"p*df'"+]]$"Z]vէk"*""$b*"""""""""""rv"J-wzb"+b"rUz**"'ggJ'"+B{''t+{"r"""g+r*"*"""""*'"Jv}UٕUu`wݝ}ZR ""'r'rj%'{+ertzG+'""""rt-""""""b`brdfkfzMb"BB&wGb&k*""b&+""'{z+{k'"""+k'""v$zw{*+rwpW"yyw*+&D{Tw*"*rJ"j""F@+puwwKM+k'""v$wfwgjwh""++r+"kpZ wtzMM'"&wz'wu*t+ЈUQGzP*jp@X+{w uj{*+j{*r+"&""{pdz+b "@pz!r*z""r{wpErb"pw"bzv bb""""'"wb"*""""""""'&wj*rj g"zzp wGwr""w{]UwzwwGwwzwwz$T &z+%"Z% ] JK+ `W wgwt zgtd'аKmw{{"BfzzgWTݷGm*"+%"Z% ] fFj"""'"*""Һ v`Jpwfff@]t*g'{wjjr*m{*Fd+b 'yfE)"jB$"r'd'%Jpۭp } {} "$""'rj&k &M-+"}''""t]{+""'"+"""" "" *b"'{+"r&w*bwp{k{Kw "zgfww&bG'Pݷ'rrpG+bDU'""*"""b*"gp$"wrT'z"&Db-" &J}Ҡ*"&@`K%X-Ggfrr""*"""+PTftg+"+"b*"gp$"w]'"Z@"G "$"'""'""& G"*"+"""u&"bR!R`r'"rF֤*D}'+''"]&w۽'ub""zu׫*{W*]@G'k*"&mz&"-*b"++j@"{"ik)m""&vrw)$"yt""""'""""+""""'""""""""""b""rb*"j"""w 'rwr-&'"UGuDw*&"ft"z$""&+"&"""+"""""""""""z""""+z&"""Q""zG"""r"""""""+""D""""b'""""rvGuQK *"rP+"+""&" )""""""""r&rg+""""""k"gkg&""""""""""+"'"F*"%")gF'* """""""""""*$""""""&""""""""""""""+"""""""""""&&*""' """""""""""""""""""'"""+"""""""""+"B""""""ztJWEu&'+{gtM"""""gv ]k""""""+j+""""""""""""""rby-""""""""[$z""YuR"Eb"UT"Zr)P" ""Q"'k"%""""R]YUU*W g%"BY""""""""[$Yyv&r*RUU']] """"""*b-rU$&R%jZ@UՕ- "&"""b*{ """'&"w*r""""jp-bUA""""""r*""vW'""YU)&"""""b"t""""""'*$"uP"""""""'G E"""""YQIUEM PUzݔW]UՙZUY]U *"wUQYpw&"jD%"BUY]VU""""""yE%zz'""rw]@{'tBGFzz"+ww {Kw׷zv&F'""pkgb'""""FwPWpWyawz}K&yz'""rwPJ[uw {"wBGww*wzG""++F+w}G'R"zwwtt+{z+tww*wD{wz'vwp"vfwgt*Euf""f"""w'""Dwwpww'fbff"&"t&*""'" gG"w"b"&f+{-tww""""bwpY E GwYWYu]wwwwTy wEwMppMwוbJDuYwwwt&{"zwwGpKK ""+"""RwUyz """""""r'&r}jBz"r'& py%"""%ٶP}&'"B''JzںtFP'G-"WE{"""""""r'wr{*"+""*קk{&''b"zupX$Ԣg+*wmRWw"w TMw}tݔzz@HUMwz*tjzv]{Q ""&'rb'""""br'U"""+""}@xzeA{'""""bz!M[ gkr""'*{*'"+- {J*b""*"""'wg+wJ['tQ]Gtqp""wkQ մ-"WPDW]+" awwwgv{*bppwW]"Z{'w"Mz@VE%zu{zٕIU֪jmwB$B$"" J t +IzMwwgv{*bptwwweku R'b"+k&'&-*g+k'zrp'zZ]@pU}JZի@j+&YեGw&"zz[P]Pt{tJp wzWPj{TZ@+p"wEjyz r"vzrtR"+" "" "w&' """"""""b**}*Rg+wPpzrzr-""{ U@**{xHpv'WF"EwUw%r'wGUM @y+JjUJPtMJ!>@ِ@ pjwjt}D*BzpM]Y$ wUutEwUw%r'z{wwwgTguU `@'"fb"*+rkp"יKݔ tGWwzw תJw }Jѕu+"vwKz!&GGMGP}w}z'kkҷײ}P} WPbvzzI} ]GvFgJw$*'""ztwW "'b""vZGQux wWz Րݗt}+KM}wUY] Krzwby Kk@w+"G@}+w"&v$"+t"dz'`gtwtTMQzBgzBw*-"JGD'@FЧ xj"y Kk@w+"bJ{ԧ*"'"qr'""*"&"""b"b"" "'"+Bw bֶ&b{bw}{{{+&+g"*"k +"`j"gbg+{ wwt{w'] tMwww]]z'{rz"T-w'+""z"rf$"'""k"-""""""""r+rb+*j"g{J{+v""jJz"""FЧGDTwwEU]hb$v+""w*mtt""$DBG`b{'"""*""""&`bb*&+"j"D׭ В"Y'"r"""""bf""&"'v}$*""w*mtt""'r "rp" "t&""b+w""&""""""""""""""&"""+"**"""b""pf""&"++bg+"""+'+""'"&""*b"""b"&b""r*'"j"G'+pwzz{t+z]VJ%{& """MWkFI-""y*Uq""b"'""""+""""""""""""""&"+bb&*"*"b"""""brrr"bb"""wMw&"""{}"j""*'zw""""""""""*""ԝ$*b+"qyBtkYfKUM&[")"r'""&'"w" """"RTYWUUԕW"R!"Ru-""*""ԝ$ @ u*&""'y""""" +bIBtwe]} *"'"+""*Ib""+"*U""""g%]&"""""B*""zw'"" D)k&"""""G""""""""b'$"pwG"""""""r{'W@"""""wՔIpWٔ]Րw ]WW]Y@Gݕk""zP]ttUp*&"bbz]!ҽ y""""""BUU-v"""""""""D""""w*&"""I""ww$"""r""&{"b'""w""""*""""rzwG TD '"K}-"*"bj"r)""""""""v'""""""rzz"w&""""""b""+bzz*"$"rw''*"""b""""""""""""""&""""""*"b""""""""*"""b&'""ww+""""""""""""""""""''""z"""""""""r{"""""DzYJ}}Y}wpp{pjrK w w"""wpZGvG]""""""z{'"b&"bf""""""""w}'Y"&+"+""&Q D&f`w'Tp'b+ԭ`pP "b٤w&{G f'&p׷vנ@w+ '"&+"+""&טUEP bzj Kw+{`&""+"""' vuzwr@wbR&}&""&vf++"&wf`"*{iu"r**} ]gԴ{ִ""]'"bwEup{wt`gg*}& b{"ҷ-FU*!}krr{w'+&*"Mrp'&""'""""GY}tDzz{ ]uJZrpB*{"b@w+'V b"b*w *'"""J]WՑq$"{zw&ڵ""b&"{"K{*&Jzv'{"'" ׽zkprr"b'""zJ"J*G{pj+"J]WՑq$"{w{tgj{w+""]"z+""""""""""""k+"'"'bf"b"rU@+*b+'w'"b'jr"vg&++*]Rfr"{b&f""r+'"wwzGw}DDp}twgW]}'*gײvQ]]zg[w${G&*"r*"""""bk""'"b"""""""*r""rb&&j{D"""vz&&" p"&vp'rj""v&&"z*"g+""" '"G r*TBtwP{eDBygDuuYUZ}-""J Uy{Zp'urz&R "&Pt{P'['" t '"G r grzj+b"MUj+w*Jr*t+wr*{ww}wrWF$'ppV }TEwPIwwYIPy@E'U՝ }tU$zЊZP-""wtwr+k'pp'Ury"PuY)R'gvrwבEZwwR*wk['&+""jwz'"""""j"""mGmwWtf]*zG}W} qt"݉tt'"KP}נwt'"Gjm"tqwD+"pzwgb[""B&"F"r&"B'v*`"&" }Tu+B"b*""*K"Jg"UdwDw&Fg""tqwD+" Ujz g{ww&""&U""'"""""""""""""'"j"b$"*k""b"b""rЪ"""*+'""+'*"r"vr"" +{b"""""&""b"g*"җתrzWtJKg+jWrV "r""+ٲ"bںzPR"+""b*"&""r"bf"'&""""""""jvb"vwk*"""kt"b{F*r"""U]@b""wDwb*"b"+""k+B"""""""zJwDwzw'Mwj"}uWtA"["ft"] w+-"("׀K *"fTzuv "ՠ&wztzQ&JG*zJwDwzw'J@tuj&rwyGUw }wA""""""*"jwbY]U+bF'r{W *"ww+*"*} +"&"b}y""""wM"""""br+"r("]DEyww++kz"r*bw `'ځ"Bfz b'Ww٪"+bv Q Zywr'j} EQ EPݤ}G""{PTUW]E"KrgzkwtzqPj"+"&rB{w'B{""""""""*+"&" gw*b p"""wp""""re""" "*"r'""""rGYUP%&[I("%"w"R"""""""*M M-*+""b"RD@w&twww*"""""*{" Pp'"!"zy[t +""b"b"""""E""""""'*ru"b'g$""""""g""w"" PpG'"b""""""z"""""""" "BG""""""""z'tw"""""]TUPpPQT yUw @w}t"&"] zz]""""w "w'rrg""""""B ]]e{"""""""T'Uf&+UpRg" e"""up ""+[' uP"'b""*b"-""""U tW]`b] "-""} """""""T'E ٽ"&++UU'UU g"""""b&-JP&"-"PUm'""b""*"&"jUU"'"""m&P"rwgm rY""""""'""ww'b"-""""""""""""""b**w&w}p""""""**z }]E"""""UYMupMt@M]@jwGGwt@Mpww]&""ԙUUU]"""""w$"EZ """"""Bw -K""z' "z*"{z }RD w*K*RշJw]z%"""m }+&'"Bt}`V@Tpr]g-"p"z' "z*wJ-"&"+ p'Gp kz"bwwuMtpzpb"U}ۗQUMtWgGwtw UU٭ݐIT] @T QYPz{wwwzU %""p -b""""G U""jk"w}wX% @""rr] br""חz kf!pv"}" խpwuԷ "{WYT]ywfzrQ}-"ݑק'"puzz tk}&][P$"-bp"}b"+ M"b ""GJP-"&"g@GW@wwz Eg"}jD@}zv&r z tkUW G}k ԻU U$""""""j"bgI" 'ڧ{ *"+g"""""Eb*""br-'rD""b"+zb"""""b&""v ""Ցqwz &"'"w+fz""r'&B-$"GW"+bkwrz-iD"b"rGjw}t}@wwwwwz{zz u @zYGw""k{pP wJ" "+tupzv-Pr{""*"""rvzw$""""b"vG &b&&`ԭ$w""w"rtUK&P`I"R """' " """"rtWt Z}pPݴ$d-"U"R"""b"vG pwwp$b+""fbR & uGЭ""$"""}Y"twt'"r'"GMU-"J&b"*"g{ з+"jrgG"*{Q%wG""&""}+"+w'""pz}'"""""""w""""""vU!"R m"""""rz%u"""""UUwtwwpw z wTuzwu]} z"]upJ"B"z] "}Q Pb"&&""RYYrwzw**}*rzgMEҷ@"Z"""rdzGЭ"("bdPDYu"""[u+ҽrY@"D`+D-r+rrwzw**z uG+g""wutU$pZG@""""""***%U +"*"MvW w"rv'`zGg"{ MTBUf{w zYu""""'&F("bD$dvz +r"Y""'"P ZU*ёB"By{-UU'"""zg+'""@p"r+"""vtJ YIyD""JDJ] w+"Bt]p]p-r EIG+"""rzwwgb"b'"*bҩtzGwwBpuUt+G} p{z}'""D}zJ ""r{*@bb zUPGKWEpw "b'"*bҩYzt@twwwtw' wWWךD@tzwQ'ZErG}zwDէw{y}w{w}jw{kw{'E'r yY$kK*""tw "" "-ҷ*G-b-"+bUK&w""""&""$'bb ""'Z"r**'""j "+""""{'*R'*+'&wUEН yw`"Bztpwg"bvtvw{k+rD@zPZi]*bMv"$E*"""&"z"B&&r {g'r&""*"rw@v' {y""'""*b"k+"""b""PZi]*bzu*GuD*" ""&P""$r"""""""""""b""b"'"kb""''"ԕ"'"z+b'"""f'*""&"'"**r'""""""""""""*"rKrfJww}$""+z{V'"""&b""}dr-&j&-"b`KW"&"b"*"&""""""'"""""""""r""*"'""""+f"""b"""""'r%"" """"""""""""&&"""""""zխ*""ttD""(K"bf""k"v"$Bd"'""zRЙ-}}-"$yrb"b*"dF"&&""'vpD$ ""zխ*""+r{GprG+""f""b""K""""""""""""+"&"&"k'""+"""d@ r""*"""""""*"*$"""""""b""*k*k"++wRpv UU twQ]V'&{+&Pr{r}E'b"b'""BB"""""+""""""++"'"""""""-r"""*r&""+f """""""""b"""]""&rpD&+b@"&&"*G*"r"""""""""""""dfBj"f""k&""'"*w&"$"k+{+B&"+}mz )D"""""""""""""""""w*""z*b""!"""""""""""b "+b&"+"*"&""""""""b"j""""""""r"rg""Ҳb r$b"&'f"{&""+{"&"b""""$"+&""""b"""*"RJ"''[m" ""rrjzb$ו'uWwUb"""""-"-"+"""*""""""" """"""""""""+"""""""""""""""""""""&"""""'dzk""&"""""""+rg{""""b""*ggw Y!"""""""b$"w*U{}M}[z}+T!"""w@}bWڵ{U")"jݺuZ%"r+* ݝ[y{GUU bU'DuGw"Bkb$"w*Uյww&+wKz ݷt}""*"""J*B$Y""*rt WP@w'""kk{+"z'z]'"ujrY"&wյYU""""""r")"jTpPET*v""""B"*"TZ}%"ҁ"rrwg$ P""r]U ij pMYzjvwzbKyW ]UP w]"rwt ݐ w"B"קp]uGwIQݐU"""&"Bwt x @$r@MEpW+t"rzpd ]z w$""Օpp@}t "Bu"y@ЫtM ppIzDp"x @$r@]էGTu twuj+"t"""b""""""$jF{GGrw{b-'DG U+ZwImDz+tw* Bw*{B*wt$""wM ]TwUqٻ'$r'Dg}vv z-""""{t%B"""""""eTM I@DݶBzzwW{&py@J+wpIr{wvp {{'b""""""""'""r&YY"T""M"Bp ""b "B"g"""*b"%""""} G [MUu"PG )""Ҡ"""""""'ww $"""""gYU+U"""""b 'ye"Gu+"$"GZ]d'"&""""""{"w"+"""b+uU""p"p """"""""rzGg""]YU-"""""""""""""""b)"rz}"""""bZ) """""]GWw}tww]]tGtk[U}ww TiuZ]]wY*""vG]Y}wt""*{%"tJ tp&"""""ݴURyw*"bkgww*{+"B&""""K'+r}b"b$"+"BgkM '"k"B'""*kr"f""Dpz*""Ryw*"b""g&&"'w""'+&'"""""""""""""$""""""t"r"""""wMw''"+""&+"&"""""b """""""rb"""""&"&&"rbgkҪz'}GupGt zZ"&Zw&{{++kb+"{"vz""""+'"""" bv"'"""""""""'rb"*m'*"""+b"""+bb*+b""""JpGt"" "`k rbrw+J**"""""""" "r$bwrEMwGzrwJU Bxz+zGK} ++D%`rW}$BJ&*rbWwP+{tzz b" "r$bwr @ tD]pzY}wvJ{''bgwfbr+"&T {zzwpwtK w'wt**vjr rdju'rhwtezR'jf*+}Etz'r@GP}g ui) b'""}v'""*"""""G$*"ugg"b"}wKr'&*""*"bb'b"$""r""{z-֒f"r+{g"wUJZzzw"bw yw"{tg"r{+rzw-g"""*""""*b+-&fbb*+D%'zj"pz'w """""*"BB""""'&"&"$""Gbut'"""""*""""*b+'"tPE"kb"b"&+"+r"+Qwzrr'bQ"p&r+g"'+"p**bj{&'bv"rjr&"j*-r"tw&P"@wu"*""""""""""""r""b"""""&"""""w""""""""""""+"'"""$!""&""""+""+"b&""""" """""+"""""""r"""tyw""w""b]w vpFw+d""""""""""b"*""j*"b""""br'zkrvٺ&"&tЪ+w&]]p ""'"-v"ڧ**"rw'rbf Dw "'"JUF"b""""br'gwg"*"g*"&r&"&&zJwwp@wjr*j{}gITU]"{DU @E]XEwwՅD}@*w׻zwQvw'""k$&"&"""""{'M"""+&"{DruJ$vv+"""""bj ewz""$G&v*"'"&$kz*""+"f""j'b+ b&"w{@pzwzu*""wuwp'"J'w{w+"-+G""""""*p&"+*w Btg&W""]"rp@"fJ+v`{" ""t"'v"'""""rwQUEUp$w'v'"D"ґ""""""*׻wz'"+""rwww"pttpg""+"""&zW"Mw "%"GMwWtg$"""b"+bvjw*"bbw&u""zv' """"""r""{ -""pwvttG+""""""""""""""+"r'" j"""""""rB rK"""""UPՙY]]EPِuTAwDMppw"" Gpwww""jwwww'"Krrp"""""" و""*""""'jKb*D'r" b"+rwtb"j[+r%'"r'"""+"" "b""rGUY]P]P)vE!"{%"rD"%""*""""'P*+$zwpw"wwG"""""&w"' &"w}t''"""b"'"+"jy"*""""'*r]A"b"r&"'*r""""""bd""k'""}wpw """"""""j"""""""""*"b""""""&&z'wG""&""שQzP}Q}]Q@@U E]tw}{{ww}}@]"+" tYUwt@"""&rkwG'"rj{rk""""""rD`{U&"Gzz*"r&pw" %""w"wp"*t%]")""j{kݹ"""" ]uvtbm+'-"E"B*"Gzz* -"&""'jrw}@*tT}ww""""""""']E""r'"P}Tw'"""bvb'"g+@'*"""wrU]"""bJ%r """"""R*""%""}M@p"*b"""""r*""zwr"RT٢""&BKr-M+"""bMqtMpz"vz}pqY]@Gww]""{wpݕYpf"r"{-"@JwJ""""""Gp$r"""'""""*ww!"f""ۉdU""wrj$+'eu'+"&d "b""br+"b*"""BrtFBp'"p""'""""*w$"ww"+b""""*bbUXJz*+@V%"Fzg""w*"""$""b"k"""b"*$"bU"Uw"*B"+""bb"""""r""&"+""'+""&""""""""""""""*""""*(""+"{""&""""&"b"*""""""""""""""""""""rID"" ""B E@{ "++'"""""r&" rg""bk'""b' խ w"""*bf"+a"f"r*""""r++B"""r'"rgvRP}J""yv{""&""jkr""*+"w&'""" խ w"""B"z'"""f&""'"bb+""f""""""""""""t""""""*"""*"""BP&""""""""&""""'''g"""""""&r""v$&-""rrgvR{ G'yMw[gb`&" r{r EG*g"' "+"{""""b"""""""'b*"""""""""""'&*bj*&+"w""""""&""""""w'"""&&&"rr"""""b"+""""""""&jrv+tj+"" mRTi"B-""@"w@"""F-"b-bU&$BT&{ """"[P GPU*+r *rI"w'"&jrv+tGw&""& ui""""""k""'PU""$" pG '+""""*""""""t""""r" &""""+'r """"""+""-bM YuUd""""""""""""""p$"r]}"&""bk'w""""wݧ@] }]tW@ }wzwwG]pA@t@UYG""zT@]"""M *rPrw""""""rww$rw""r&""""K$&{upp}""" Gr@YtѲ%""b """'"By @ ]}p$-"W"r&""""K$ }$++"*w{ w'W}Dp"br*&wDPW'"-" Yqwp"wz}zP ]twww}E DzE""+*"qj"p-"" D """"rK'""""""{{ * """""rrJ!}+"r""T {@G{`{zk}IUwЭP }ww"vYէt""WYq}-"}Q[r{-&"Yzt""b"""&+twJ""b'""""@"&"`bZptQ MUyԲ"" FBz"b ""z" *"&K g""t""b"""w*kbb'@w*"""b""""b""&"bK""+""r*"r+B""""bҷ+$jb"b"*""'+"b"""-{bb"&rkz+'&@%{zt[ $GY}w{z}w wwpEQvg& {W+-J"Re'b"+"`"rb+'&"""*"+fr """""""""&b"+f**J'b"&r+ " r&""b&" "&tWҺjgw"""&"""rmQյ""" ""Ga"r*"""rw""bg""b+"""&zDt+"""}rr"*""wrbj&"}j&"""rmQյ"""'r+""&w+w"""{""""""""""""""B+"w'"""&""""G+"""""""""""""+""k""""""&{"""""""""""br"&Ҳ"f+ Pp'""'z*bz""""JBw wr*jb""**"g"""r"+""+'""+"""kg'"""""""""t""Jw"*j"g""+rr+bb"""" G*""{+&+bf"rr&"""""""r"""""b%"rw!rt}]twBwUPE gԪ"E zJM*b"rG*{{ frwbfz}wzY + wb%"rw!rW*}tDtupww'*wIzyAZz{{zWppF*rGPڭw ݭ@pG zzwv{zgwuv}MJu'+{+b"J{pԪz*zwg'"m"]"rjb"b""{+&+wj**{r'r"$"""+*g'r"b"""""w"+w"zz]wW@wKjwv@pt Pg`+rFwp wzmzG*zqz-rwzwww"ֽ"{RYwФtU+-"Gw@GyGWw&"k t bTypzzp$d+zqz-G} pwbwwf{w'{{w""""""'""+*K+** r{b"wUw'p}G+wvz Dײv zt Z&"&"b"+by}-"JwzDtwwwwz*"D kַzgz*'vvwBDGUz$EQwztzzp+""zzw%"""""bYyzzp"K ]wwzjzzjwwz'VG+"&"f}gf"{""""*+G+zwG*zDX+&v"zw"zR]ݠ  " ""D"'{ b '"j+&rGtrwJzw 'zJ$"Bת{{""""*+z$*"*wwz "*zK*KYbb'w'{up׵wzbvEZUݧ}V{{zJz `"b"+"v}"u$""G*+"""""t"&"+*"rw+r """b"k'-D"b"Jf'b'w*"&*"kb"&B+"pzgwPFw]p w}jkj"r"dzj'"Bzzw{]w{j'jTtD}"""""""Q"p""""&""{""""w`"""r""'"K""&""""""$""""r ݁YWJ$"K*"$""+"p%"""""""Q"k ''""""""B+"+"*"j"""""""&"""+"f'"-"rWb"+"""""""""""*d"""""""""'r"""""&*"+-"""""""+""""*"""ת""""""""""""""""""""&"""+""""""""'""{"""""wuZp[Mw'$zr DGG"""fptzzGT""""""kr$""'""b"""""""""rtU"WGhi z*""k"$Zh""r"""b"z'"D"b""+""wTpZv@&""& r""'""*b"b""Jd"+""WGhi z*"" "f*+fkz*""""&b"""""""""""""$""""&"w"""""""bGK&'"j""**""""""&+"""""""""*"b"""""""""""bw{g]]pptw'bzG&"""r&"zwp{+-""+'""b""bp"""""'"""""""f"'"""""""""""&"'""r""&""""""br"""""tm""$"`"r""&+"j""b"""""ztj}DM {qM@`ݦJJmwu{' WIG "rU՝EWWDjfMGt +e+IU' zp"ztj}DM {q׽ztwttiԲ`&"{""*+&fzrv]GpVGT@Mzpp pU*Gw v t}}KGzpJgw۰ڠ-"rYTuy@uTMUqqfu%J {rJzYJw]WtftpڧRb[-k'+"jGP%*""""bMIqpw*zbr{G TWקw"t@TYTpzzzK}wtzzvr$r"&@{ww*"+z+&W"+'""f{&+Gpf $YWuJjbwrk"*"" "+"zjwM &"@{ww*"e{k"""fwEb&""""+"""""+gK"b""*bfg"r"b""{w+j**bf"b"kwb&'" +""*r"QݭzWpԠת{z wԑYWJz{" ]wg w'""&Jz""r"&"""""&r'"b"""""""$'kk""""zr*"""w"b"wwեtr}MT$"*"&"""mU*" &[j"i""r$"""" &*B@*""g"Jtr]Y mUתf"K"r""*""*kF"'"']y@'&"mU*"'-"f+&bkխ&""b+"+"""""""""""b""$bF"""""`"B""b""@ " f-b"+'r+"""f'+"""&bb""'"&""""r&"&$BvrD]UQՙwzPUyr*""]W}-r{"""j&""'"""""""""'""""""""""r""rj''""r"bk@"""+rrrr""""ww""""]ybr+g"kw+"""+"""" '}Y fFf&&w&גd@$ԫ$'"MT`ujB " ""D` "rJ+tb"+"" ']]-wUrp+"&j"& +&""+""*"""""r+" z{k"BB"y' ""&- '&&Btw%+j&w"+"'&kb*'"""br&'"e]ppg gz[}G ""*`" k$b&+'+"r ]Wz"-{ """"rb'&& """"""""" Kj**"&""""&&b"we{""&*k'""&+&""""+"""+k"++b""zwzw B"wbfwM"Э j+MUG}Z jt*"{{&B ""b@b@M " bd"+k"++b""zw+ww*"m"{*"r$"""rwbbrgk"w+&"&fv'J $B{JJۭ{*zw p[{{ڢ"+bw*"b"+k"wrkUGzz[&zzKb" +z"GJ*"`]j*A&V*F""-"r""+"*"" &wbR*""""""""""""&" "@"bfzpPprr}+b"k{{+""*bttHw-*""+""b"""tvbkk"'"""""""&z$"j"{kb+&&"f@U%R""""r""r"""&""""r*+"""""&]!+"+""b""""`&$"+B&"+"jz""""""""""""&"+b""""""bG""rb&r+r+k""k*+b'b+"b""&"""""+"""+"""""""kb&"*&b+"gFZpWU Y""k"&"p%ri""""""""""""'""""""""""""&"+""""""""""""""""b"'&"""r"'"""bb""""j*""""""&b`IM!""+"""vXUIH&+fj*'pk"*"&"rz**rE+r* {r*$" f"jpvG"b$""wjb$"pf$tj"+"vXUIH&"&&"&""d"""*&""""""-"""""z""k"""rr+"""wY*"""""&z"'""""* p"""+f'+*w+""b'"'"""w'"vvzptpwշ*gp t''fj"*Bt z{v"ggrvk&v "+&"*""""*&$$"""""""""z&"*'bF*j"""r"+J+"""'k"+r '*&G"rB"'"*b""r&"""{ttP%ݧww'Yw"K}j'zt}rt'+-ջz-"PT" " QYYp"Twz}z Y֩g{ttP%Gvgww}u}ww"""""b&r VyWMw]}'"rwDw'"*U׫+&&"&}U@"""wbթE jk"'r''G "@ Uu}z'b*'j" B`"{""b"b"+f*}wwJ*+"uUq}pw Az}wwG YYYՑYb"rD]ݝW}zgwpz ]T]"+ҧЕ)zwf]u'"""""bzIw"*""j"J+&"t&r+*"G"'"rJF+ """+@rB{"+""wt"d*"@K$&@"r""]u'"""r&j""""""+" &w""""""""""""z""""&""&+""""&d*b""""&"'""""'""""""+'bm""""""r""""v+'"r"'GJwz}}'""vb""b"& r e'v""'M""""*b""'""""&"f"*"""""""""Kr""j{g"v&""""zbr+"""""pp*""p$'&'k"r """"""b"r""""""r'"vk{'U*rj}tpj""bFvwq" %"" "-v"P%""""qݭW v UuPU} )"+yz"r'"vk{'WUeg""w@wp* Tu@wp""'+"'Jy"Y*"r fTpAi&*{d wzz'rrQ """"b"m""z%""]uD@-"+""""U"""""{J{%*R"""b"{ )UQU"""""u]@}Euz}P]P}Բ{wzzzu@tPPՕ@UwKPUՕ w" "pGY)"u JE*&""Bqwzwb+&""jjK]'*v*+@yR@u"""Y"fMb+"B%b]"-""U*GW" "b""ՐUb'+BfB"R} b+&""jjK]'Uչ'"'u@Du"""""""""'r*"%bM@m*""kv"*"'""""""w+B""""v" y""""""*"rrTT'""Eݕ{{""""w""""""'Bj$""""b""k""'KM""&"uQ} EMݙYzZqDtI] UD+""+՝ٙ՗MG""""rtРfBU""""""-v"&y@*zw&kwt" "+brG'frXj{*K'fb ""Gtwwjgw &b`""w"jw@g*"&y@*{zzwڷ'wjf""'z{t""""""$"""""JF""&wt"k""+"rwuw&"+"'z*""'rG""+"''ڠw&+b++"""b& ""JZWpWywW+'wں{*Ң*$r&*Mrzzrzw{+*Jzgvz'""""&"fvk """""""bKp ww""""{Jwjbbd*wwgzb' -bz "'"*"r"r+"""Y'""wЧ""bziG"b&"""""'b@fb""""jb$"b J z@t*""*t{"$&"kG"BJ$"@&Gt+"""Y'""bB"t*""""+v"""G"""""""""""&+b"b*""b-"B"""""bk`j""+"""""""""""&""""""*r++"""*""""""-'"brr u'"k kk'""+"""rrt }Dgzr""*}""B"""""'"+"""""J"'""""""""&rb""*"+"+t""""+br"""}G'f""v"G*+zK""$'"&"""""""""""*"""""""b "kf*fb""+"""+z+"&g""b""" ]AU%""""""f""""""""r&&"++""!""*"""""""b"%"&"&"f&"'"&"""""""&""""w""""""""b*b&""tgbbr'*""b"b"+&""&"+""&""&""""b""""+"rgwr"" Rpdw]TYU]B""+"-"'B""R"""""""*""r""+"""""""""""""""""""""""""""'""""&"' f*&"b"""""&j""""""PڠjD!""""""""b*"""'-ݪv{pwjYDVp ]B}]w@ y """'yPzz+"rz'Rm"KYDIJ$bGwG["b*"""'-н*+w& rG ݐ UA}Pٷ*J$IjGE DDP}P]"}wGt}]IpDuI zzwwԧwקP'}wRe'""*Jz"f'""""+rG'w"&"*'"k{*rr{&""""*"V-*rw""jmb$""!Zf-b"&"Gr"+wg-gJpJݐ tw"trwQu$bGjbvztrtz""Y""'""""*B*g{w+ ՒyBdP"wҠwpD{Y+""g d'*b"""" +"""Bb]JbP *bf&""'""""*B*p+wwwj+"*"*rEpwRG "b'D+wwww"}vw'zzwzrpw+vb{*&&rב'"r"""d"bb&""+r*"K++"'g"'""{r&""""""*"""P-"+"m)""+r""*"""-"+"+""""""""*"""+"""""b }g &b-"" ]]M*"'bfkb"&&+"b"b"R *{jb"w'"z'""'$r""""""B""" +"bt+* &"""J*&"ѧr"""""""Bjf""j"+"&"*""w'"z'""gG+"+"""w{+"""""""""""""""""""""" """"!b-"""""""b{*"""""*'"r""j&"&r*-""""""bjr&br+&"&""*"""""&b""+"' rw"'""""""""]p'*""!}"""""*""""""""""""""""""+''"""+"b""*""'+"b"*"""""P""+""+""&""""f""""""'""""""*"b"{'+rKjtgwj""w"EM"""&r%v"w"&u"&"G" """"GT]UPJUIi"%* -"r"'""*"b"{'Uy] &+""vwww&t}wj"""""r+v-bW*"r'"]qZ *""""b"+"""kw"&""""$*rYY"""'$@u""""""w""{tw"&IGGw'"""""""""""""""""w'"rz@""""bkkV'EG"""""@@]UPIUwWkGWQ ԕݙGGzW@]k""b Uttw"r""rw-"rrrj""""""r  w""'"*&z}pwDE[D pzGW M{dTgWUdmBfYpGr[+ZА}ZAwU]gU}DIwFY*"'"*&z}Y @}JzGUНuDG &"*""'"}$TDzt{@zWU}$" {"`"+pY]'"+$ԥ&rj %UJg"&""""]`BfY]uww'P''r*gb'G}g*wuw""&"K-] pTuZwEYqGw{zzzyUPWU@Yr&vDU] wwG$kw IwFuY U"""'r-""&"""""ҝ+]k""" Bw'bҰ"brЈ}""""r-""$""**"J"B'""""BzםPYU)"y)&!"ҭ"Ҡ "&"""""ҝ+ U""""R"Gwww'"""""*j""Iвw+"V-' xzI$"""""b"""""*""""""'+r}""""&"$'b}""""""r'""pp$""ww''""""*"g"""""""""*'"bz"""""b"B'wGwt"""""WwP٧ ׄu]pEtt pUY"""&T}Gwwԙ""&@!"%{rw""""""r-z"MRR'w*b&Ztf&A&"&fk"+w"*r${+b""&WpZI`Bb+"*fr +$""v@""+b'wtGz*""MRR'w*bb%+jb"zEg&&f"w*b""""""""""""*"kb&+r'"rb*""rk &"""'"""""""""""""+" v+b"kb*&"r**WpZ ]*XYٝPr""g$'""bd"""r"*b" "'""+"'*"$"""""""""+bb"b*"*"f" """bbbz"+""r*&"&"wtbGrp*wz+"""""""Prw""e& +"P&["""""""+z&+B*b&+ -TG'"tfr'+""KBw"""GwwDGG&"Prw""b!"+f+"v""&"pE"r+"["""""""""""+""b""""g"r"""GDj"""b"+&""b"*""'""""'r[bb$g-vWԙUTY KQ" ww{k+F$""}"zJ"'""*"$""*""b+"""""""""+b"'z+b"" """brr'"""""r{"b"wwwJwvwtJw'"-f&"""*'"j{DY {wGGrwjptD GpzZUtJIwGb+IGwwzj+{zGTjzUpGEttpw{}׵j*'"j{DMuE }kwwtwtt*wwj*MJ pwGGpp}twwwvgtgvy]UDzR}xФ{v` Dzdvgr@Wb+WPkk{k+''j"*kB{+JbbbwftwJvzwttpPjjb&z]J]e"f{pMz tԧwGA]@wwzpzzw}ww{$kG{wb+gJe&*u{m{]uwzJ*epz"}tjB"{*`r@ " ""PEF[{D'$ J bbtwj"rwuKB}" '*u{m{TڕYZww{GzG""'""""""JET&'G+bv*""]}"""""jGw{&"""&-'r}"*""$b' ݠv """"""""$$""T Y]EDt$&&*+r"""kbBf""[{&b*"{$*" v{+z}B'k{-""Br*kw%zbb+bb"FR*pttJwj+"""bww zjwU'&DB {ww""""vzע br"qr+&+"""r ""&{'"""'""""&r"""&""""""bJwPY w r""*"&"*"""""""+"""r&u""qr+&+"""r""-"""""vz+""*"kw"""""""""""""""""B""""""b"'"""""""""+f"""""""""""""""""""""""""b"""""&{k+"k$zG+zz {גTwTI]ub"Bt$""e{"R`"""'""+"&"""""'""""'""""""""""""""""""""""""""""+"""""*""""""r&w"wfw ]Y)"$b"""""""""""+@+"""m]$"rd""bw""""'"""'"bM"+""r'""""r{W'"B'"B%"r}"!"""""""+wMw$&*"b""RUPY& E $"""""""""g'"w@t&")*viGw$+"""""""""&"t""""""'""ww""""""d'""""""+""vw'"btu}wD "b"""""""""""""""' "bpJb"""""""b'Bwww"""""@'TݗD@YwtZPEQw"""""DD T w"""""fG%"rttwrww""""""Bgٕ-"""*""+"DP$JwjjݥR}$Tx&]&JEwٲrGjԹ"r "" "$vU"%"b""RTUpT]jWU-$[%"BU"R""*""+"DP$Ygj$g]*I}""$""bw" P%rgkeTtPѩ$bfbK&'"t+"'"+ "u*Y""g """"""Bw+ w ""-+b""""""p""b*&"&rr"GUU"""""{%""&""@EwuD}tDWIU] зpDG{w TWUEjb{z UYP]"B"+MU%"B@@ZW""""""pխ {wvww$b&p*BԠ'r*$"b""@*z}T M%""wP f"{zwwp& "jb*k}'+{wvww$b&j""D j"w*'{""""""r+""++}} w""&"" w{jzzw-EDjDKG}UR zww@YwF"kzw Ҳt%""zzwJz{&w+"}bwKy I- Dbv׊U)WxWPj&+zײw'"*""- """""br""-G'zҷbf"b zt"k&T{*'{Gw*+btgr+""+ "rwK}$ g{tpt" "G"}"&j !B"rt}+'bd!"""&@ FMQPw'ir "$"+ "rwK}$ Dt&G w*p ww""""""j"w'+{$] MU}G*""&'z&+""*"+{}'BX"""")""""""rD""vQtDDWDww'g""b"""G""""&""bgg"v ""br} """b"DԤQIt}wI{E G@QНTPU"pMWEpwzw"B"'wzzQirWJ zڥ""""""Mmv """"""""rw+"""սR")""w"t"""R"rEf"f-bY"&&+ -""""RPQtEztP '+y'"r-"rY"M'"""""""rw+)""'"""R Y+Pwp""""""""'ۍ""r'"MPy)'""""""""""" "&""""'"""B"' $b""""""+""]T'bUIU$""""""""*"""*"""*"j'"rIQѢ"""""""* u""""" DUupt@ YtGkwwwG{wwu DQY w"*"rDYzz"""""zu$"rIYY[""""""Iu Bw""""""""'+k"""x wgr+W+"RՠwpJp*z""'v`"""'r"b"""+"p +"w G{"""""""'+r""*'Kb+*"'""+""""؍zJb'kpw&r"rut@ J"U ׫tzzww"rGKzvkj"""FE"'z""+wb"""b"""""+&"BfpB+bbb""""""""''"b""+{ ""*""+"&""+""""""""""""""""""""+r""{wTY &bb*+""M׺+ k+"g"'wvgk"*tz"bwvz'P"wgwgb[`*k[p"+KjK-r "r ""&'+pb%+""Wקw@p]@- `&"'*"bwvz'pMU}k"z{wwww&}pwwg"&"&"k+fU}jU @t '"b"+&*""wp'++ *r"&""'%rW""""""B*"+@ ""yPz}z'&""""+"t"""""*"b"vrzb"""v{P-uYU""""zwzT}w ݭfwtw}wD}pwk ]} G}G"{++rzwp`&-{MGZ+"""""ww'b"wb"+&&"G-+{w+w"b"""&j"twb*$w Gёe&&pf"rd*B&""z""""wd*"wb"+&&"Gr%""'""w+"'"zgr&""'r""'"""""*"""b+"b*v z{j'kr+r"f""""j{+" F""'rjz])wM$Dz{zvwGuGّWVTk+"UwW*I"{'""mb'k"dr"*""'"" "&""+""""""""""r""&'*&r""w""'"""""bjv+""""w]GQtp}uDt'**"""jw'wG$"kzg {B'wvgr w"Y Y  P'"kJt'grzJw r""* {G'w$"IJbjw'wG$"kf'''*@&r+"+r"wbvjj+b"'g"w*p'pWYg@ݔ}GQՅ$FQصMQg w wDM'"z&b&"rԶ*gT"E{՚!R{++r"Bbpz rB'{r&'{z$+"-""$"wz r""&"&""""r$*$gg""kwwGDKwg"wwv w}j`'"תa@w@}*{g 'bf"+""bGw*D+"""-bRd""r}M"""r"$"t"$""E"+""'""""BW@z u Wu'"-"rt"B}$"+""bGw*@Dt'&*""""Q]""""""*""q-b&"r**M-*"""""""""""w""""b"'"p""""*d "w""""""r*"""p*""DJGGw'"""""""""""""""""g$"b"""""""$[wt"""""yU Mw@}]E pwtwww}wwwp{ttTMw""{wwtw"b"""zא$"r$wrBrz""""""g}t-zt"rPJGuz`MrJ'p}p"֭"bw"G]}rwwW ) ]")"b]t(+""T]{rtu ݧ+wE+B@$rPJGuz`GG԰'"trz}M]}w""""""'""$*f]WD*"v'rRPt'"wzz*"$w٧'"*b{grU""rZi &"+"""r*""z)"bPW]UPyww* +r+r""'rw'+TW +zGD*w""D}kww E"r'frfv]GEY@GTpwww""zGUtww&zwۺg]@w ww׷""""BzG-Kt&ݺpp*"&z&Bt$"z"vk+wb{+}zzwztF}w`"bzu'"qK{zKw"*""{b$+@p@&+"ݺpp*"&gr'K+"""D@'" " k*""z"""""""+"*"$$"r'g@r[brzzw{zgwG`+wڻJ"b@tpj''rwvwtGJ}K `"b}"v+w G[]Zy yI)W*gKvљ%vq"+gvbr'""""""&*"""""""""'*$"r+"bvzBBBG*"KUY]*k*+@wսw{EG`bb+k&"""Էv'UMUЧ+wTrtz'}pDpETpuQ'"bMeP]V'uzB"R&""zwKJ+z[GwDt@Էv'U @g*"Yww r+*"w"v&j`+r+'f{)Kwҗzfvzpzp['UwGGtt{&DD}v&BUՐuJ'"bGЪz {z}QMY Q)v&*"ۙw%"b}Rb*"""")b&+&"""""""""'ݚjgB"wۧv ""w}P'{'JwwwKe{{wjwF}GJ"vK{wdw $j{k"UqUq'ڭ"& "wbbT*۽"B%""+zkT%""""R]uPW]UU "T]M'wW%vW]"EvK{wdw $p@-f"+&RUYUgYUq""'"""g&u-"}*b rM@tԠk"bkk&""$rv+""Er"+wեbM""""""B "rڙ%""@T}T *&&"b"D"""""ww{Eh*բ""b&pr-UY"""""Ք@MpywpՕv[utzPWխUPUYM]""rKUP]U@UPw"Brz}U]%vWp@]Y&"""""Rzٕm@vU wu]u+"pr"$Pf"'"*"w++rp{''w t-"RYMD}j"A{KG+$""קz"F*" wwr+"vU wu]u+"[pzGw"*"וfr*f""""""""""+&G{""""z"+"""rzzg*"j"'w$"""r'gwz"z&zgrwv`GB$"BWw-"RPuP`pՕw "K&'XwUutK{gdק&BZ{g{$r*""""'$b""&""""bzw&d ug*z"""Kpw{k&""ФF""ww'{v kr""*"'"""r+"""Ԡ{UM{w$pp ww*[uw&zw wک{v%""]}pt&"j]u{z tbG J}Ԡ{UM jwGwpw@wpwww""'""+'dkUU'zgwwJWPz"twWw'*wwww*ruU"{{յR&b'k"z %""TU Pzwk*&ݦkB&"kvԧ'Tf"} Ukb+]uIuzj*w MTw'zr&z tyڙ Ew""zJGYDG{p[uZwYJuJwwGrg+*"Bݕ"""""""F'tf"Y """zwrb"[*u" ""'P"%""""RUpTEJwPg$ug"%""u'"""""""F'E""'&v+*UY """"""G""-]@+"r'pוQ%'""B""""&j "'""&rU"r"{'$rY """"""w*""W$"!""""""""t""""""&$Dp-rp}I""""""t ]]"""""Y t}tD UGpkGwww{wwMMPPWݝw&$"UؙYww+b""]-"YU"""""" y-Bw"""*"b"rG*'&"URխ'׭""M" ""&v%P" "" &$"D"Z%""""@T aWE *Z)&D"m""*"b"rG*pԕ'"k"R]UU+UYݭ""'""+w"{I] *"$@P@-*""""k"""""pb+""v"+rE""""-""""""rw"""w-""MGWw@-"""""+"p"""""""""'$"rGD"""""bg-Z"""""Dp M@wG]@WMw@ @DEwGEfF"wP}PD"r"&rPU%&wvJ wt""""""rj ԭzf"'"" $"mݢzz"r"fV'"[{&"r*+K{*G+""`$$VTҁ$uk"b ""D+w@d"t"bw&"b+""'"" $"'Vz "'"+"*+""'""f-z"R-"'"&"Y""bz(gb+""""r&z*&"'"b'"rj+p*""zr""b""G]wwJrr "r+""""b*"+"""b*'+b'*"r""&""""""r$kU%%*""HRg&""""'""""rb"-$""""""""" r"+"*""""gK*B Br"*"+"Gwuv+"+"bw""*+"b"""""""*r&""""""""""Y"D""""G*r*""" "G"""r"b'"""$""p"&"K"r$""""rzuQx *"F *"r$"b"ҥa"""""""Y" tz'""""""rwt"www*"""""""""k'"*" *rT!gG'''"""""""""""'""""""+"bkz""""""'""+'"""""""+""bgb ""z{@{w*""""""""*"""""""""*'""& """""""r'r b{"""""wpwGupqwW zWtPU z"""bw[Dg""""""Jw$"b+"r""""""""kIf""+"""" "" ''"r"&"&uTB*T""`v"b&""k*+"B""""r$"""""""r@""ժ"""bbBb""+"""" ""{&b g"G""'+&&&"""""r&Qr'"+B%"fb'ff{"u}"bj"vFj""&+""""b"&"+"IRU"j]W"+"r"""+""'""""&"bb&"+'"''""""r"""""""""&"""E-""""$@(""-"""""""""""""&b"""""""""""""b"""b""ve&'+"""*"""{zg**""&""""""b+&""b+"" ""b"""+""""'+z*B+udrkp"PrDpUתU'""*b*"ww""'{`"rj"v+rbp q+"brpt""+""""'+**wzj+k"vr"'*"KgbYG&v 'rWEz"wpD pwzG]@ZukwK]{rwUU"-G*""jv"""""""*""""""br"M""""""""&" J""gz'""$"r""&""$'K"+*"""'"""z""""f""kB""b@wpkۭ"+t}U`+"b*+bf&k+'""r$t w"""""""*t""'r"""Ru&DbzQMZ%""t" rE"W`""*"B`' bzJ]'*$"[Yw"""""""*w*"""""zpj"'z""bk"rwt"uw+""*"Ug ١ z"wIwK UGwKu{""'*rr @%"" *wz'""""""r']""""""rzIg D"""""$w)r&"""mw{"g*b$"''wT +b""+"j""+w+w&wwGjwz"]up'&{"b" "[uYt{F*j&"}ٕ{G{ "t r$k'{b"{۪rڤ" qy-"b{wYt*jvrK &$""Gwע M*wu$&G Fղ{ "t r$z*j++""wb'&&b"'{fr"kZ-r*wM*Y@QGwQjwQMIg{wWW MժUI'"b֫rv*"'""BB*++"G [!{+r"rBeUByzf''rz[+++""gj{$"""&"""""$ rr{w "W wrdtf"wwPwjw$&GGzTaE}GUq mkwgebk"+"b"r'+rzt}zM' $]r]Yu$""@"-Gz]*"rg }RdD@E $y$""+"b"r'"תm"*""GGDw*GR rwM JwPwejqzyb@RP ]Y]bw ]QpEGwtWԷ]UԷwKQ{UJ'""'zp'"""""r Pb"bgg"z%R W&r"r*&UҵGk k""tJv"'")P%r" " `" zu'ww[p]tp]rtDB"w$"yGYQp+" ""+""""r*Y"bb" R"%""t"rw"""{""""*{P"%""""RIYUtWMDpPm"T}' %"r"R""+""""r*UU%""""&&P@*uG@""""""m"f]""B'"}UU'""""""f""P"""bbwY""gt """"""r'""ZU""]@u*""""""""w"""*""b{r "rݙY"""""r{g-D""""" jpw t U}GdKtz wJ UuUU+""BG] ww"r"*tY%"rZPU""""""rU`rwj&"&"""b+"rz&""Тtrw"ryٵ]*"+$GJ{{""Bk"B+""z@ "I" pt&"&"""b+"&fw"!"*""""+""zGV{Jtbk'"&K'wy*"zYYwXQtIwGq"wf P{Ev{+"&+z&br""r"""$G&""'"Jfwv$r"b""jtbk"w+""jvr""""" "K&""""""""""+""*j+&f"r&"wwMwwfr-+""wz@ѕ$*"* wG}w&rz'G{"*U}T'{U"kI"B$rж"w*'rQ&v* r"$""p "'%{ t $"bD+"B'Y"*"*U}T'{pK{WuIz+bkf+""""""""""*"p "m+"z"Bk""""rzջ""""jzr'""b"*'b}t"""""z'Bzf %""""""gz$""ֺt'"pjT*R"r&"&B }ڽݴv"" *rRgvw'"""'vKk$"""b""dҲ""tdg}"""b" pWf*b'"&"& Y'jrb""+""b""*b"""{'"ww'M+bKBw""w tzjzסW"t-""t" rfe""""qwtrtuw$)"{ &Bz"{'"ww'wz'f*""DzwpD*wwww""+"tw"}GU+"r'@ח] -f"jgGjU"vv}Q+rrIUEYrY"&""""t""wW-""ptwwGG'""""""b" """"""{{}$+wu"""{z- y&""""wwww`tzzwwwv"r{vv}pJ}pwwDww"fJwU tw"Bbw)"{WBw tb+"""rwGwz""""""""""""Y` "%""t"t""""e"W"b@rF"+"T' -""""RQYpUDM-" '"r%"B"M """""""")""""""RU&UY """"""*""'bTQ""B'"[@ԕY%'"""""""""""u""""""'"""""&"''"@""""""b*"""wGrFѕY-""""""""*"""""""""*$"ryPqr"""""""'zt"""""mptt]{}MGwg@pwtMMP """ՐّYz"""""jwW-"BUT["""""" $"[zyy++prw""b"B u w۴)"rt D}m"zw fr`b"WI"׭'&zDr+"[zyy++w{zwgz""wwfp}wm{""""""+"""""p{*"v+"D{+"www*' zG'"epb{fmp}z""+'w)"rwutpMp { w pG*'P K wJt@Y{$M{&wpjr "**"*"w k"b""""""wt*wq Gt""rW۪w"+&GwG*wz$tFzww+b*&"bb{"+""&"""&"""K "*"""*"""'"""""b*&""""""m Ԣ""""r&""""""r""b&""""`")"""""&"""K""%"""""v""""+""""""""""""""""b"B""""""b+*"""+b"r""b"""""b"""""""""""""""""""""&Ҧ" -"{"zrrwPu]}ИU}+w""* }"*-"""""*"r+*"+"""""""*"""""""""""""""""""""""F"""" &"""k"+b"""""""b"""""""`""}`Wu}]Y)"*b""""fg] "F +"w" ""b"" *+""B"$""$""&J{-"""&Dv &bdbJzD" '"$p"*fg] "k"&W]}}""wkk gJ"""""""""""*}v"""&""b"+""""&}"&"+"&*""""""+"{K"""""+-"""""""""* $""rw}Ww""p""""""+"""rpb&r{{z"&jg"""bB-k@ "*""kB"b""r+krf-dwvw"""Wr&zf"""K ""'* Pvb"$""""""""gB+r'""""""""*]"b""a"R-"" Bԙ@""""r-"G"$"U"*"M' """"]UYQ$"y*"R!" "M)"""""""*pP%+"""&"&""""""+""y'"TUu"" $J @ '"""""""""""E""""""'"b """""*''p""""""r*""bp'"TՕP%""""""""w"""""""""$%"wpwr""b""rr'V}}u"""""ЭTPEէ@XtQ@"""b]  w"""""JW!"ҧE@""""""r-J"'B"r&"""wd {+&z'"b"$"*z""b&bt+"+&& hY%Vgb"R""b"""&"""""B`""""Bz (""'B"r&"""w$"{k"+"b*"w"b""""""""b"""""""r*'""""f&""&r{+"'""&"""b""""f*""""""+"E%GT%whrj" Z}kYYyM "'"+") i&***kg"""{&&"%"""""""""""&&+""""""""""""""""*""""b"Ч+"&"b+""""v+&k"""BzԕuGJAU]!""&"""""v*"""k'w+{pgr{W""{rt}rYW%"""% "]"&&"B $`tݪw-"Gg v"v*"""k'wg*+""wz&w{""rzww+y G+"'g@[QywEw"wtII٠EYYYpfjvG yU%""w{{*""""bb+U""""""ڠ J%tub""bbJew)rtpK+bb""%DW}$ "-Tzgk"*"{"'wdzwzwttڷDw"Z Gpk'w+rf tէ-"GtGwwv{*++"թyڲz+r*" q{dr+K- *y+"${W&k +$"+"@G{rkr tv+"tDjKbZFYj'"+r*" { DYG+gB{G&"&"""+""*""""rb`"""" b"rww"+"+$*"""'*r&+"'""-&"t "&&"&"""'&&"'vv}}Gwt"+"r"""+rrr""'"+""**+b""' BJ""""+*""""'"'b"""b""r"Bf""g"@k"fk"+""j+z&r]Q}'"bkY'"r"b""*"j'"""""*""k"z'j"UyR}"B%""@rrPM"bb["{ib"-"bY"*P"z%""""t UY+y$+[)" U"u'""*""k"z'!"+r"&RUՙ'EP }""""""+"bd'b""$' T '*""b"&r""""""z"t"rY""b&*}%"""""""r'""{W'"bYYYY)""""""""w"""+""+ "rMQb""""""r'D""""bU}YypwtU } tUЙ]Uj*"wՕQt""& Y)" EYT]]""""""-vw"WxZw}ݗzw""jrr'}bkw}d*}@J*"" Uн KG`u"r+""DzKיWuw*"WxZwW*Wݭwywww&w""""""""""+"r&-w'&*r""bYw'bGtݧ$+' ur+`b*v+""k"B}$rgb&r&&*""[KMwWUUUIMw }'"z'tr&brrUp{'r'"D}VZr*b"+&"""&"'"*"""""""""ۢ rr'z"+zw j"vJvwvBrYmbjWu*"b+rjfgdz&""""'"brtz*z+rGt$t U j kR}]{DQpUz-""w"-zբ*"{JMVwDpMQ -"wݠP"'"brtz*"'k*""wDw t"WVztp@Ukw&]YEJD+wD p@wYpPYP z{zGKZAKU'""wzDr'"""""'T""+g"Z%Ub"j@!Y{"U ] "*&)}]zgrb"d"wd ЧwbT׭pwtUpz yz"wBku "wWE U {g*"YPw'Y}W*ԫ*w" zWrMz*MP}MuGp} b'}UyTP[}wtFt"B'""Pwz*GpJbPw'Y@pbyz"Dvr&'"w"""""&"*w%פr'wzUpMݤtz ugpUpgww{*wTuץwwW[*BMT t۴$b'ztt }pU Ew%׻'p{BwtPe$&է pGb v*K'""""{t'"""""""""-ptd*FwPjwwz -t&"wDGW+׺wJgzwk w*""k*"r{rwG'ݷb&"եr'"rB b&[&K)rP"$""Q"'&"[ """"RTU tWzGU W )!"@"R"k*"r{rwG'tDEP}jv"f"ҕYU*Y"""""dw+@Uwz"r 'TEe'"""+b""Uݲ&"&v+*r&"""w U""""""R""kwG$""]U)""""""""w""""""+" "w"""""b{Z$]TD"""""pUwptwww G D}zwtt@tIItGWWY"w UpMPM"B" !"w JJ""""""BUE {r'"""+'+vG*b"KWk"&'"QqqT-"&k&- {f*++jv &r+""K&wD"k'"w]}b'"""+'$&+"&w!""f+"&""jb-r{&zbg"&+jrp"QY"YwzՐ]YPu+Qtwy*"{{۷ E$"&""""+"" &]"""k"zE)rfv""&"+vrj"'r* "*""++J+"""""""""*b++""r+b"ҧB+d""fw&'"wwiUW]WI"r' v"w{@t*b&zw} "G`""""t"}wGzztbGapPفPդ"b'Jww '-bzGw*"pMJG wbw{@t*b&+fwwj'yMR'""G+"&"+*'r'+MWz&"""rJ'Zz{wzzzzpz"vwzzzwzgp "&JfzfUaptwW*Uw `&zGd֧JTuzZ "*z&Zz*"v'DVk*"$""m"g'b"b""*""r'rkg-@wkwt{wwwwwwg"&"ҪpfzJGuU wwwwJwz'""G ' G'tBw"ib" bk*{!r]"r%""MjW("&"*VwWTu{tY]Db w$ץvp"Ҵ*"G ' Mpw+fztBwww*w@www""""""d&wՙ&z r Pz*"bbz++"{"zz*+"r'w'r"""w%BQ""""""r""Y-""M]@w{*f+"*"t""r""rg""wy*&bz F$}"b"bGtW}zpTJWYuwrwGJzGYpM}ԝtwD"wDU@wwwt"B"*zzwvz{vvwg&"""""rt${""""""""&w""""G'rz*"w""""zTj"""B"r*"K"b'""t&"""b'""""rzG]ٕqUU*"v@]'"r$"r"@e"""""""&r'""""""rwwGw"wz*"""""""""+*bw'")"Geg'++"""""""""""'""""""'"r""""""k+bj"""""""*""w*""ztzt*"&"""""""""""""""+-""kk{"""""""""""Jrv"""""@w}EYt qWQ {'ԭUUUz""""wtwtJ]Pw""""""g'"r*bkf""""""rG Pw*r"" """"-'""zj"b"%"bg@` }*`$ {w"$$vvK {w bB D'D@&w*r"" """"Z+"J"""""k"B+{*"&"Y[WXٝT٢ "Ѫkbf+"j@*p@W pr`"pEwJM}v*gr*b"'bB кgjgr]jB'&"" ""&+" ַ&VZ&kd""u'&-"*'bw'BBB+w۫*v'g""""""""r$rjj"*rgp}zz+"f"F"jwWvmD' "wj"Mb jzg"+&&"*"""""")"" t*"""" +""""p+ $Ҥ$"' " "v"$ WD$ PwUMvB'z&&"""$b&*"+"""$@*"""""")"""}bZ`@'"r"""""""""Aym" "rb"""""-""rzB-""B""""W ""&""b'br""" "$"""""""""""-"""*"""""v"""*"""d""""$B*""Ҳ""""'}-%rz)Z""$""r"br"""g"'+"b"*"""""""bb"""& """"""+"""g""""r"'""""""""""""- $K "r+*"'w"w+"bw"g"w`""rt *GpzMFmG"-kw U]-+FGgp'"D"pRM"'w"w+"bwG{J }""M}tz"GG"b"""z**""Jr'b"rk""rwe wzz+Wup-ҷ Bpr}tFtE+'z&z]bzGumG"D"""b&"z$'zz'Kz׹+}JTvrv]]U} ղrk}p & zjty*")&"-WpP}w&*w"+" KI]P"" rDYuק"ztbrvp{"&RpQtwwwzw"r uMwW"V " tE"*B tw}-vTYPM Pwy ] wU]Y tuUUuz TTPtwwwzw"rY yGtwUz"b]]"Z @p""D-"@wP'p*"+{wIwp uU zw ٧D}׻ wwW ݷKGW PwYYwWED@]ptJP&GGWwqz' }zݭ]yz}DJpu}@DtGwww{bYU DG'"t Y]U}"YPTf]YpzpPJ}TّGMtY&"""$""""+"""FDd""Rڧ"$"*w +bt "$}"b+k""b+"'"*"B"zbf"bw&"GD$"r&"t*"K`""B&"""$""""""""""""""+*"$D&+""""+&r+{+"@J("*K"r&"""rb'"t""r"""""""-"dRv"&""""db""@Z} -&"B*"""b+-v&+""""""""""""""""""""&*"&""""""""""'y""&"""v""r"""+*"+"""""+b"r"""'"+""""GG"&B""""""+"""t*""'&""Ҳ+k"""""""" w$Jw}w&yuWM@" Եt+zy@t@WU]ݤ u@יI T uttGEMG }֪p@Ww$Jw}w&UU]wW* M"}wJpת{+rU]{IDwDGWmGJYIT]]U]Y}]]YtՐE]GZ{PIYu@UU E Ww pw'rw]]GwmT'we]UGGMPPE']M rzWuUupMWGwmtwt}Y]]UzDt]UwDwv&zפ}} ztw ttzwEUMT p}g "m@'PJz"pzݭU]պuUUGJ Jw}Mwtp ]upw}g "YىU`k wGt`M'{K` @ rkU' WZU ڧwvwWW W]TUMUUT{۝G WMpuU}EzuiYMUQr+UE}%ppptgww{GG}wk{*kw]pt pwww] z"פjww}tEp{WJ YWUuwWtzw"""""""rp-&"""""r""A$"&"T'*""""""&"B"*"""'"+"""br""b"+вrP"B B"B""rj"&u"""""""rp%""MM-""`"""""&""""r""b"*"""""""""DB b"""U%'b'"""""""""""""""""""""""""""""+"""""""""""B" ""bk "r'""""""""""""""""""""""""$"""""""""""""""""b"""""""""+&""j+""׭{}[d-""r"""zU"""BBb""D]"""""""""r""""fz""""""b"+"&"""""kzG b" r bt{+"""v""""""""*""$"""""r""*"B"b&"Gbpd"b"'brР&+&"""""kzG*" ""&b+&gpx""'""b*"'+&""*k" ""*b"'b*r""""""""""&""""""b""""""""""""""zp+-&"'"""&"k""M"UhBK""""""""""""""""""""""""""""""""""'"""" """*&""""""*"+&"b""" mrb' +bv""wG"+vwb"&"" "+""""'br"Zעzr&+"""&""""""""""""$""e"""Р'"""m$K""e "-""$"'B" """"r"rq"&[}b ""%"Ҥ)""""""""""}r'** +""-"""fv"""b"""u$ڥz""""&'"""w """"'gTU"""'Q%}]&'GBUԑ)Rpu""""""+W-""w&b"""""""""&t""""""rt'" ק"""""Rw$uu"""""הp"%q""*""""""brvUWv"&zwYp"""""rUQ-" *'"'w"-"b"[%׵Y""$vv"rr"edwF"KD"*D'G@k BWMu'{+} {fp@v }Kww{}GM@ Rз@tz"$vv"rr"ڠ""H&Kzk'gwtk""r""$"brwDD Btrp[tzMk+'*P"+ttݙt'Эt$'wg"bb&B$ ڤ{+Et {w{mf""""kw""{""rk"{''"GP"j&*"*v-"'*{ jзv*UڰrwwGww}jwbuFG"-rw wt]M&'+@GpGG"p""bwз էyvw@ptz"Jzwpz*+@"bvjE""JMp""{}TM@kEtMWKM$E}'GWp Ez]}Gݲz"B{wz*+@"bGM@w{F[t"bّE{"z{+"G{'&"Tt+"GD tw WԕDt" *MG'wJ'wGR%vt"r"rGbpmەYUKw ]K'rJb""r *&rM"f ցwBp{tPIwGU}G vz''GGMpP]wwtt]GU"v" ]y"BrէGwFU+rzwzw "`{Wڭ""p P"@*F` r*$W-pPeڑE"QДݺKD״DtMTpwD]AEJz"`{Wڭ""GWt w @""Mt*IET[*"b+'{ bKr{ IR*"+ wZ{[wY] +zMD**&"m]ge(PxUE" ]UTzWE]]ZHZW'׺ptmH$* zUmq"++BfҧB"wzݫzp zey zMMz"tg"PJgMt*z"zt$ײY$аݥQQ}wDM+'rzz"""""*""""""bkr$FP"""b b "z+}B$ Tz$ *""'"""h+B"Gb"+d$"Jݤ"bb"pbB"""""*"""b"""""""""&""w M""" '@& +"B*X' !"""""""b""*v*+""&"r+"""+"rҲv""-"*"Rb"t]-&r'"bz$ "gr* """""F"""""""""""""""""w{$""""""""""")""b""""r""b"r""""*"&"r""+"k""+&-'"""""rJwJzB'*""""&&"*"r"%Yb"'k׷ +"r"""K'wzf"t@p"" *"vWٰ`JDvUU{J&D MzwwwׅݭbtPU}+Kz٧'wzf"wwJGקz }w{"r}Dt"w}z+W Bwr"bG}M-{r׷+zBpWy]b TUdppuҕWРuu&z* vGrJ&wwG+wzj w&gpj+RWG$" +"z&u@jD} wwKz ٰxtJ]pG}w"$bv"wE ЧbJwww @ P"rZ]yP}+Kz{wv ݻkwzwwz"kuwwzrWY+wp){ FwuTp'GW{twwuw@t yJYUYU pwY{t@ukwzwwz"k]UwwwzwU"wU+wwwzwJ+*rY btWGGw@zwv'"rzwwwY{wGzzzwzuwwwwwg"wwY}w U@Dtwt&{pw"b"zջ' jm"*tzz YpUtp]UݙE ՙ ww}W՝@*w*wY۩}@T pwwwzj EPr-"""b""wP"t"@rp""+UD{w'ՠu`Է+'"fj ][$"""pM@ DD+@" RM$R r-"""b""wJj"*rU Ъ""w"F +fGf"""b"D '""ZE{{gw""""W}Z'թ+t+"{p]r'*"g&+"r v'"f}w{"""{+"jݭrXuIurZpm"W}wz*wJG""""j&'{zwE@нBrWpkJp{p'wGp-w 'z"Up&Btpj}w&b"uM}t-R{f[kz""""UYYq@ݺ" &{)&pppG Pt+PEzP+w v}t UPU]I }} } *jwpG]M GԪU]zpw" &{)&ppG}w tBrupwРPJ+}wק']-wՔФ"z`UTwDwE tմY[YPݧvЕpݱpdF pTWTeUu}}єU}ppPU&-+{""R]Y"""&&Bw[v'{U {rwTdGq՝UPpz tp]E]t*G ]{*B ZU]zmeѫzwwww{+w@ JMZ'rw"w""p] "B*"wk$b+"BtDMe*rPuZt"-&*YY} "DwGwF@ @w"PU**jZ'rw"w""E`U @&""wrb"+rG""+""""{"""DGԖ$b"""w{]WkjEy*׵T&'z*d$ w*&b"DwU ]} &W{w+rb""bpUyQԭw wuG"K'g{{"kfwj{z$kw"-eGpװw'wzw"{wM% ""pW]uyݰw+ Tr"w""""rWpw+y"Ҳ&-"""@ +}"$ "bk"- w@ MG"*"jB{tw@'"{G "@]vy"Ҳ&-"""f*'Bf*"{"w*w"{B "ڥ{]"rJ@*"F&b"$vrv'"'"grԧ"r'rVrG'z*"" ""fb&b -'w+}{+"" %"+"bR+"""Ң-wB'" """"""+"&"+&g Gbw""tҺk"*"b""rrb*""z fw`׻Jw wpw&""&"v"""""wD ""*r"zUZ%$ *g"gGA""Mup"Bp"q"W-R'}%P} uY}I"t@uYUP Brҽpw@u]"gGA""@ VՍU t {""JpD J"!rw+""""bв{r+U{b]G" "" U%uzwJqwբ}]PUrD{"pd]uY]r-"w]wI"RMM v&]YUtbtr"rP"zٵ' "+*Uיqݑ*U)*} &rJ U&gk" @}j& k&"'rDp +"W&z"Gtw t""IE"BM pZU*dG`"E}}}+W-G"&twgw-BUM]M GMMZKG u @ p@ !]qЭ*dG`"]YpR-'w"@tw+zGz]&@z]+Ru ry$bKww'r{'P"& @pP"B]R @w]Y*D `z}'"$WUwGJUEvBm b"M""rf["&rM'"grg"r']MPJw{Dz Rz t "{wt}b]pB+w}Bg tr"Y mЍ!%- "'*{MuygzGJG'vu+{ D z}+ yG*zTP}ZݝW G @ MzwzptЗ]]MYY}@Й wqGutJG'vu+{UՐ@utDDM]G{G]}w+pM}}uԪ+-ֺw$GUUtwGFgPMTwٙwZPt{Z{}wz}zkwGT$`} @ wMEpt} @kGu*w@MugG*w{'$Gwu-@wUGr}} w uyѕQYEwGtp] UՅtMpGwЪyG}]vGՠw*v}uUuGw@[}M"" uW*"Jj"J G"Bu-}mZTW P}j@ݝp PpED MBvjpGp M@[}M"" zwڧPwub"jv"P'v""Jry$"TrP*J"Z +KY zW]TJ  UUGGw] ]tUbgGb'{}jWG&G"Vwu} ԭ ِT}Dr"rBZpE@- K)R%PUMpW mkGFGpwK E Tt'}g׶{"P}DD׻" +"jrwz{}*b"zw" t P+&m*BMtw[MЪp"r"''""""e""fj&DK"U-""vkGPMPp$z%&w br$'GGJD K@dbBVw'z *p"r"''""""ڻ""""bb{+&Bp{"$"gQ[EEq  G""*" Xkrb"{r"+zKz@WuwDv& @rg }z}r'w$ZB]Qr-'z"""""""{ vw+fr{y"{J}tr"& %%Zb"&Grr*w@w`*Vt{M"+''rvg {W+@U }} b"fݙw]ww"tw"&+r'+{Jy "bjGJ+kEYU{Uٲuw}Ի etG wGWu]EA&MY RwpU YYyK]`y٘bjGJ+kUUPDWYYPUuWYU TPYв }t*r*"zW@GKPFwD}נ '"gzw zw]բw}wz}buYPwwEFU]wKpt " @UA&Gw ٕPpw{u""rg""""bݕm'w"'v"b+U}G w TwЕ@UwUYG u]Tr]YUYz*Gk*Uݕՠ "&""]yyAՑUU]KM }wY*]pqG""]ԚI"I"pvByuJ)GWPVU]}}] V wzwYP  U}EUt a y Y*]pqG""UYUgzWT@YD"]Н"uprWG{" jj'W+wT%"wByt bI uU D yUiY U٠]`"BP}]]UzguG ݧ '&Rpz"""ՙJ -Bk"-U pwWPUշ D]@Q"}utM"UU}z*U'*YE+"R"}bTU a)'p-mk[QMwԭtА"*"+""۽pG{rr'f"$rw&G+r'&trg""Vj*bj{{EPJTr@ԉ*bKԭ} "*"+""۽p+rDi{bp{dj{b+Jz&r+z"*&*""-"" bYzyb&ku]i b"z{*"w{w$"g"""rvF"'b""""G*t'"b+""""""bprf{zMwФ"v${"""b""+""""bf'Dfk""""""b&"b"Er"rkk'{'U vU]u Wۭ gP@YY+"FzK `Fvݙ"&"*"gKp&{E]""`խwM*j+{w+IpzwtwrKtXiJw Ez{MpwTDbIwzUTtGtDGwwwMtG t]vw"Bt*j+{w+YQzwz{zKwwzwr&"j"+""]ځ%{twݥWWu*v"d+BWwzK+KytwEG] gvG+`r&"{wWDb} Gyzt""vz"""b{rtbw$'rJv"&g]EEGpDK+{Dvww}zwtpwJG}w{Gwwpՙj Gb$"wM wMUfw"'"{"{Gw"BwWuj+Ԥz&"&"r""YgRJTpWu}Jt+ j&KK@z"UJKf bk "GJ rJzT@z]p zR]Bpp&"&"r""YzMw'buv}@`p*r"''z"jk[zwUMЧDB Wir'{k"bbfbj&b*b&"ftw'b'*&zb'Jz"YUUzwvppz}vvb*"J"""{g&&+k&""{ "r +Mw'""""{mgwwG*]MY}g]p]*zJG]z{wUp'{R"zR TЕPJ*"+ zwvgGUٙ@@""q]ZE"y"})[DyK%vT]]YEYpuzUpR@J pEQב@TGRDyyZvgGUٙ@@""fG TUYG"bG"w""bMuK$ԑtZ -"+G%uyZwu"PqI yzBqAYzD '"vtz UU wj&wr""&yw}-"'""'p Pw&$pD+WwWytDPr* * Xq'p""p"[})uuQu*֡{tGY""*"r+(wMԠz"Bv&"}"dY-F"+B*"w"trkw"""{wpvGGUT@Ҡ]@d٠""*"r+(wG%vK zz""w@vb"+"+"""""""֪''ZJ* ՕR-""p {w+r"r j+""""D&{b"'"""+"*"b+"""""Bvw"@wJzGwz"gbzbbg"*""""g'b"kf""""B"rrv+"" +t+"z"v" y {ڧrp}&r""@zwJ"p& +" dW}Zvz&"u{G""""""""`""""" D"%""""Ruj'$Y"Yu"%"r+- " ""''rrI%{""bVk" ""b]+rprZ G""""""""ڲ+"""""""Bz'"'BB"""+"rXPYy"""""U&B'"""D""UU"""RW@y +'QR Y w""""b"jUU%"r-W'+"*""" U"""*"zw +Z*"""""rwb%"'""rr"R P*+")b{t""b""""""""*f&*"U{"""DD p}*"""""WU u+r%"*B"""rr'+&w[z"-"b""'""""bD""""'"" M "b*"& `b+b+ 'b ""'*&"t$&v$*fb"""F"vKJ "*t+""@$""-"b""'"""""""+"B"""""""""{""b"&"gr'"rpd" "&"""""f"в"&f" """'""b"""+"&'"f"Z"""B*""dB ""'""f'r'+-""r-'""""""""""""""""$b""r"""""""j"BG"""`"&r"""""""+"bb""""""""""""+""""'jGpB+ "+""""+""'r"""kt+"""""&"*}D """""""+wzzG"" Mwp"t&QJ"*v}mT uUZuw&MPDqDPWՐםuY@{ ] }z}wZ +wzzG"" wP Dtw@pwz"rPpt{&ٙw&v f{פ bwXڰwV"wחGMzw wwz p}D}T ݷyw z }w&p]M {zGDw}G}{ $ҲGzWtwjzw-wP@D]U}tww w י u+qwg]]wDwg*z]]] "wKէ]}zuwrw{wwvUT"""""""rx@$r""r+"""B$җi"""+""""""""""""D""""""g""'"&"""""+R" D""+"""B+&"z"""""""rx-""+$""'"""" """"""""""&"""""r""""D"}&"""rP'r+""b""""""""""""""""""""""""""""&""""""""""""""" &"tr+""&""""""""""""""""""""""""""""""""""B"&"r"b"""""""+""""""""&*"&"zrJ""""+""""""rb""""""""r"""""B""""rk""""""*""""" """"""`F}*""" """bM&&R'@$+r"@*"&g]z *""&rwK"+frtgkkE'Xj$Bd """"""-Bb" rt'"v"""jb"+""r+"&""""""-*""""d"v+*r+"""U]pg""@M """r""&"+"r"""-"r'"v*"&${r""*bb" uVWҵ'*+rr'gbB ""'""w""b"*""b"&"*"'""""k"rwrjWM'tD{f'"{&"kb'"'""&Xw"'X{""""*""""'&w'rw{"u@wJ " $PM%Jk"KupFYGz}ݝ}tpZYUYpGEt*t}Pw'rw{"]Tz"Y$KD+P@D]jrբ&TW@ J'pm'z @Yb{gЕ[YYUP'@{YY wt@]PYz UzzZttz]b"If&Tԗ''zU){bUU"wTGw ת ݕYXVY *wwtzDJTUYUGDww UI"]rWwUY*tE-'wwzww wPpUYw'Bk$g*bD'r wWK]y{w+wp bp e j`vW P'b* wW]WEzp} WwvzjwGpw'Bk$g*bGg'""g+  wu]uw@fbr"pW+ZwBٕwrwGt} tG"+*{w"+F{Gzu*z{iw&*f'"r]UmDwGUw&""r*"&b"rw''"vJk'" B"*b}u"֪g]uGzYUuzzw p]z@wtpG&zr"*rWj'ubupwJzww&pWpw""+""""&""Mf"Bg*"""J bf""" kp*" j"J&"" "KݥMP`"wk"r"{ *+@"U+"d"Bzf""+""""&""ժt""+b"tvg"""*+"""+r """""""&"f&""wb&""""""+{'fr'&kjb&"{ *""w'*"""rb"bb""j+"""Wzp""b""""""*dU*rڙU&g+"b}I u&r*ݻw""-J+g"""K""v""{'fbkfJg@'bj"*"KjvD"" ٠Y'{&""+"br"""&""rrJb'"r&b'f"rp'zw* {"u׵$D]@}Pw}vk 'T]p }@uwGGD pwTEbMW'"r&b'f"r}G{&f@wwzGJzw*yZQtg}uE}'*"{QwJf{ " F DPG}@$TUGzJ z'w+] wvW}y Q}vkuջ{{+bbr+T@Բյ[r Bwjw+"** gm z T{gjvwtgJJG}pz Zp*u pEGMw wzwUUU]UGtw""]WէD]M bbtG w@Fw'tzwtJ+EDwѲ "Gj+PG@trpqWjJ{}tDjp'PUQ}@AzwZAgy* ԗUw'tzwtJ+EUGz {JtgP""rb"w"J'"U}rK uZD@zgG"rgKtBtGrUG%vgb*r+"-ەY{M]ݫ{zzGMw"f$]''""& *""wg"fJZE"*w{Y x@]]MPYP'Jw} DzYDwwzgחUQD*Tr"*ZYy* zBMz ]GwUU"+b&vw-JzGD}b $jD*rzb*z*&w"ݵKrb' K*"{GG z${zwtGfGr&bt&]J`"+b&vw-JpwG}w${GzzwJt}+b*b+""""""z'z+BJF{twr*"bz+"bgr""+"Gvjf'&"""z"w*"&&"""kf{tw"ppw]PWZm"*' ""b""g""""wj"*"*&"r""""v"*&'*jb&+wg"k{w{zjzwwjzztf&+" @wzg"""""*t&UY*zjbGz w GwzW'}""D@@bt"@Mz'r'M V]MDݺ]t@v@v*Q@@ U] wDtG}z mG GwzW'}""zptDP @"v Gw"}״ k""b"ZM'z"wr+Ptw +" -[wtpYyDp"*Tݔ}"zb"'U tYݤ)r{fwWժj vtG]QUUPVװ"rPMMUٽԧe""B&kҷ"z'bR@"&{]t PUՕ Mِ ]EpwGw{'p]wGt&JpU@""Mm+wrrݪb'"p@w@'"""'"br "bЈj֦ "+"p"W'*B"f*""" ""r"""'"{B"bfBpݦ@$f"@"&'"""'"br+M "" " *b"zj+b&"k*""w++' z "'r"W]%w[Bb'""""b'"b"""&&{"""""""'"b +'*Bb$""*&""UDx p`""""""""""""""""""""K"""*r""""""""B+ "r""+""&"b"+"""+"**"b"r'{+b*۷M+bz bF"b&bw""""""'*rBzgբrk*+"b""+br*{ &" tv A"@uw} }'tTtIאuw}Gk twUUЙEw@ڙR۹+[Еr*{ &"zp G@g"]D"zjbjp"r""rwg{k ۧ@T@zz'"+r*pw'pٲFwKD&z{ѧp{wBp{Qw$""ҚY}wYYYv PwwuG"*w&"v+ &""Uz"'*"+Q@wpzE*  zݕ]TIM@UB GB@'gPՙUIp"U""Wٹ+[yy}uW W@`j}ppו&Bkgwp""@]""Iv$r &RM*B`*T Put M Kt}jG[ wJMD@ xrJrYՠM Ԡ&Bkgwp""w FGPuЫ""@Ԧ"UP{z '&""""wM{"b"դ"k`"v+""Dݩv ]]Ъ]&pDt"'"t Pr-""T[}$Ktrzp"*rzwDѭݑP u "Rpm] '$r+ժvtErw+'Gtr&rpG pD"wGMt" M@*"*z$"'rww+G"UKU"De Fb*"b"Gz'""r'"""R%K p" Jj"`}w%bP}] &uRM-J"pp"pKt@ @*B"+x'""r'"""RpJ "+*@"PP w""&&&*ݧE&z'pZ""*zU"b"ХR}z{PRjPwע""bjt yRU}Gwm&"""z """"m""""rzz""""BB*"&"$ 'W%p"@GDp &{Dw{+"{j-}GMD"jr"wwJ @pt&&"t""FD@+*-wG mr(&JpP+z "" w "Z"zwi"zrG} *W@Iםz GfzUYՙY] gtZЫwJik Rpu+z ""}pа{{G"U"z"wwb{*"&*'ww`u{*"&wzwYrwMFYtJwڢ*Yz'{vwPT]G{wG"F""**f*rJ"*kj QR}TYݙU YBYYYt&w'gMUUU ݢrb "ikeעzf+"Ұ}wէ"""""""ru'b+&M"VQ-&"Wy+' ٲUY")r*W zp$f"BwzE@"t&DJbYD+rMz"""""""rUEzg""bG"tGwzp""b"Z]Pup"j""zGjr+"b{k"bzDPДT"""ZWW j]GD PG"""z{Q]U)rIPUwr'""" """bTY׻"Rwwez"kv"z$**rb&z+JP@U{UtKGpj""+"&``GK{Ыwf" UwwpK"f"ڐ]pwD+r'rBJ&brw  }wԢ@%""v""uH$"B"Ep"+kpt* ՠ '׷ `"-НTP "}@Mp@ ABD@I pGMݢ@%""v""tTzZM} Db""pww"G vbw"""""pW-wJWVwb""" ' D UZ "r]EpעF&"'"]wg+*b$'&&G `"pbbҢwWQQPzGuk"Ywpٕ-ui'Z)[f@g*'"w&"jԧv @g'z"} @&k "p{Dp{"zJ"}'pGpETuf rzYW"-"'""}նpz"$""$+""'t $r"&"""`+"'rDwP]M)Gw{""r"""+K'" """"B"-"'""y}e ef w"''""*'""+z """""""""'J""r"JW&""b"""{"""&"K"$&&""""'b+"*'""""""""+""" "+"""rb+"b"B""""b""""D+p"ptb%r&$"r&Gr"B'PY] F m p""+r'"""""""""""r""""+""""""""r"+"+G"F""""""-r{@""{"'g""b"""{"""'b"`m""""`&*W{mw{""zz}"ڠ"w-r"+pzu$F] zUzzM +M EG@ФKٹRTW{mw{""Gz{w]w"GUu"[Pڤ"{"w"'"GWwzB+"&Jwq  YM tE'"tzt+pժP]zzGT "pҴbgUԁJUِ*RgGw׻+m Up@ JwwGM}wwgWG}Gu}z} Ut&w}tbvP Ev@KׁM] YBQ$*""RUtPw"v)"+jG+"wzH*"+"}G "&p"'t$p*] ""zХ V'"DGBРwtrp{&G@` }+"v)"+jG+"`vFkg׈v"""j{&""jRp"kw&"r"""@Ҫb+b" '"UMwp'""yBBX@z""wJ"r"""""{"}"-+ $""{fw'{FzG Uݝu*&)rr'B+b&)+wtv"J+rJb "&++$r""'k"FzG}{Gt*gեrw{'+t*"+rG'&zb"t "` Jfzr""""rg -r""$'BRMwM&B&T")'zj &b'rb@ "DtfrDk{&+DwGGfjzKG+B@pzz'"rPpG@"$'BRMwMu Wh@ w&"zk"{-b"v+""""&U*rrpt$b"j*"*""br{r+"b"&'z{"b"""r"""f"""kr " 'w "r`KzGwb+v*b++"&r"""""b$+"F"'"""z{} gB''"jҷ"b{""r{*bg{+bj&Fbzz}ԧp"""Gw{pDw{w{"'"+&G*"rmGG WvJ""@pDz'KrgzB'"tDpM"Ұ"b&JGM$dTUJ՝GJuՕ]w'+DGGwZ Pm+MJE@z'KrgzB'"UzٻJGpJt WG""]"xrr-b]]-fIz[`wz "&GUٝUr WUMUxI`נ w'ЭPGJZ]jrjv&׹U'rdw}%&IFM Y%MuY}zrb-TdpweРJ]{w@d{{rMU g'ٙy pwrղ+]ݝd+*  p'rGե@}t"R!"{"w""u"b'"G'@@}+A'pf@rtp"uy[""F vzM DBt j rMU`rI}"R!"{"w"" j Yw"z""&`j{""b"""""" }"rtZ]pr"""K J+zd"""@{w{""'" " &""'" 'B''bt"W utr&k"M mwҙ}*w$נ'B"'"+* +"b"'&+$ "*-g "&rwmg''$}`t D{ "Bw*z&U}"}m$rMM]Uvd&"rwipwfwzz GWMw]{}g!zpwtԤjy{`WzvjНwT}UUPw[Y@{YI[٢fwzz GY]wtW]ڐUzg*"""+ug[}VzZUu!"rzw}t'BGww'v"vw{wkg{"&Uptfr+"vtUUՑ PUqwzw""v&w"""ut+'+""&JGwg{ U}BwwtrvpYtY]E]Ypww'*GYݕyJw+j"u{ՙUYWD *+Y]r+"f""""yj }G"*&}b'b*"BPGp*B p T" ""i"y-ڭ"GGMD @" *vP " Y&RE'r+"f""""UYKw'wz ""w"&Kۥ*brkk"+b&F"""uG` +{"""Gw]TpнDp+W+ڧݠg'- z"""R+} ""U"&+&&"""RU'@YBu%WwtgrZIQQY[բ*bz&j]t@zJ-tf"&&f'&+{zK@PG* z&tg+{} ""ED}$Yݪg "b+""""ҝWtw"`"b""-"""" """"&""v B"b'"%fwf&j+B 'b""r""'b""k"b"rG$""*"'$'""`"b""-""""""""""""""+""""k&""""""b"{-['fr"D "{b&"""rGppU"b"B""&br"&+*"'"rb""*"+ ++B b"+B'bv '"'""'&t"+b"""""""""""zmr"+""""""""'"z"""""b"""""*"""*"""""""r""v"""+""""zwz r"""""" "-""""*"""$"b"'"rK*"&"""""G*r&&"bb""}zE"W@"Z $""B]t@`+vzTQ%m*yٔH "''z DU]wDbۑ*T}WPG*r&&"bb"" wwrJJZt"r]u"+{ZB[Wk"@}"+""Eз'&""vTU &w'WU}RJPՋY 'pz""[z]-IU%]в*r**&""RTgrM' Dpz'pM"rr՗WppQtuGPוTww&**w u]w@wG@"kGU]}*TY- Yuvwr'M]]+"B"-f"r}[dr}pp@U"wt)wUBUUYwPj B"TD zzw wD@Br'dr q+"B"-f"rT wݦ"+E&JG{z"G{-j*z&"'Tu*rJ{G$t WQP@"Bt[ݐ"*@} Y*@+b'r'''{j}PjtW'b{"d*wfҺ"""+"""B{""+""""*+}wEZp"jzGz{j}{[J*rpFdwwGwbz }DD'{"wr""vb dr'zqzJԉy*wgrtpw*KGw k MgbEz}zխWYDPZGD yzТ}GzZ@}]w]] B׭ztpw*K'vtww"pkbkKgbbT YJ+VQ]Q׫UpR}w]UII[[pvFbrrwڧ+"z"wwpr'*tZfG*{KwwDgDrbrJ"&bzw')+$v"'&d}z-w'dg+tr{Wwb"M p}}WEf}Iww {UEWк*&G "'r"v׭wvuMݕ]k*'*wM"&'"r"J w&+rB"e"y*zb "bD"$bD +"m+K"*ڧ""rG۰Gz& "ry"&'"r"J խPYYUpgr{+"JzB""""'"""""vX&'fuY)'""b&"j"" f"""""&"""""&"+$"$""""r"kv +"p*w pMB]e"k&k"""""+"""""rB+v"""&b"b"""r{}*r*""vggrgkeJp&wzG{DwzjRvz p"""pЧpM""R+Rw'"r uVUEzK'"+Uװ b&R&v ZwkuBUUjwywwеwpTwUEGMwW}[UYTYDU DZU'V+b&R&vY ЙDu']U *v]YwB{q{+qg}""RUvWwwW}ה*gw'rtٲG}z{Ufz}MzvU wG"*"QU@GM []+mw"'"'B*z+""FTYE$b}vt""[UUgyI$U٥ DUM wUU{ wG@zrWUUY*@ $pUU՝Ewղr"+"Z+uwTEgWtwY""""b"*f"'B&'"V"״""EgP"֥b"`*dKբ٥rwz[DZubZb""rEu""""b"*f"Twzjw*&"drU"buzw""&b""{w$'*"{@Yd{'wp"{gGYU"&rG}ٹU]+WBTuYM]""+"bru'ҧ]Yb"pzbf$""""'"+"" *Gy'" w""rb"y+%{]Uzz*)}YYXwv'&+ &rwzYTUw"fgzZ"""&{] "r-kmzjGIYMpUw""$"""z{vp"Ip" $Bt*"$ p% B @ `uM$z""dD GGwGtkF@r"v%ݱGG""$"""zw'r`'gGpz"D p""v b" fW*"Kw"D"J`"BrB&""ҫR@"r z m w ""wr*+wp+Pֽ ]w'}p"ҵ&'G""p"""-ݽ"'r """rb'"BV "*rpzF'wGww"`'{bg{"J-zz &"'kw{$""""&"z%*"{"r &z wG'""""*""Y &&t[+ۙ%&"@ppz$FUb]EUby -j""pwGEWPt*]+ ubu"M u'""""*""QEp*""`bU U+'+ַ$ Qbj"r  Gv{ww"bJWpTYY""&MYdRWw}Uյ U&""GږyIQuf""rg""rb"bvФ'"{Dנ"*"w-w+"*qWWUwzMypW{r*"&GpU YPU &'@]Q w"}"&{{EPUp"%g{ z K ׭@u]G"""""""rG DGq"g+"g*$'p&r&""`$"&"]-+"b""b"""Frw&ZJ"r{"" "B+"""""""r+"B@$v@ppDt *q"""++""""""&G"""rBJr$pw*+""'f"&""""r*r"b""""" "'"""""" ""*+"""""""""+&"zUY w%&"bb"k""k""""""""""+"+""""""""" &""""'"+'+"r"'"""'"+"+t*Uu-+}p""""wp{"r+"k""""""Rj+"U z"""+r""r""""""*w&B""bw{"f k""BwjR!rY" "rb& $"-'"g{"{"jrG""B*"r%"&"r""""""*F*'j"""$"bv*'*""*"""*j'K'ruK&""{"+X""&wWwU""& {EawT+B] -Ղz"""""*"Bu b&[@'m"""""" """"""""z+""{""+"""""""+&v"" }+*+"*zf""'b'""r""+r"r""&*"f"B"*zwwp{ *"""{""""b *"r**"&-G"E ]""""""w}]&b@ДXp"KG" tug*Jxww %U MP Up]۠UMU @Gp DpD  Dw}]&b}p W tUy} z{"Gr"" ]qwwU y PR-"'WU%tK}WPE rWY BGjM}UېYհ Gt] Jr+RWYED]MݕUtEG"{rЧ٥D%+B V ]]Arw']-*zwPBjMקIpuТJz z"Mp @}U &{wbKvp"p 'p }Yup*w@GJE"""""""g"$b"* g'-w׭"{"B $""B$" $+""*"""""R""*"B"""$""r$Ur"p+""""""""""g"""" +""&*"} p*"""'"""""'"""'j""rw*'"z&v*""rbd """"""""""""""""""" "*"""""*k+*"""""$"""-rbr&""""""""""""""""""""""""""""""""""""%""""&"""""""""""""""""&"r&'&"&""b"w"v'Т"b""jU"'""""**""[v&v""""""""b""""zKw`w "UMzww u*J]t }Gz MUwG z DZtpu[] TPY P]YBp}]zKw`w " Y{wwWU]"@UP{wzrF ׶z'bUUzET}}pTtgvw@wvgwwtU ZWJzY &wwzzDT zUpuw}z+pwJ*"+wYuJ'{'K"{'Y w{ qG Ew DM@Gw DuPY]ݑEu]Upbt"vz}y} Qݕէg{] t'pwuwZ&up pDuZ$ G@$wzWF}P @}PMzV PUY]AwpԕRg %WMUt'pwuwZ&]UUwzpzwM"p]Mr&wpjz&bzP٧u@[p@DzGgbzr&wt'Btղ{pzpTzGER}ww"}wYJp*"d W]@pPUUU Gwt M&r*r"""yw-'"B"ەMݠZ A&U]u]YUDPGWrّGK{'GՕYUY "r"]bZ %WIuUG}еpG]"ըZ&u""t]yg""B`'$BJ%tݽ+ p" Y@` DЫGM w@p"v@ע`װ"ըZ&u""w{ W]UG}jw+"" *" @m&g""""" FzBrI+]wv'""TT $TU}u*DkT}g"""-z"e$"դ tp"}"+@{׷ @]E " "BBFdUٝ-w'r'z`P $*"gw '"W kp"j*{&&"pf Gt""{*++'v +pw*"j&"`d`"rwp+"Rڧpp""'*kg""Gk""f&r`& &`*R pkJ'"d vp"*JJtz+B$vwp$ t@"Exd k""'*kg""+kr z'Y*&""{"z pۻ"*""bb"f"`"ڢ*r"&""U{'+ UpJ"gMw""*'"dW]b&צ-*'"b"rJG}TUUՔPryE"r$"&p"v"""$"'""*bb*""t+""&Bfjw"Kz'p K"`"gtg'"&z} vr""YQ@" Gx+{'""'-""""++j*&r&""""-T'U{"wZywp Ф k t p*Gp{ z@zJ Mԕr" ] M}w&r&""""֑PUP ""pKwG }{''TEEUݛUw*rwۢTKT{gwzz} zw+kWWWp{-twjt] *+"}j}]zz]QّXEEt'"" @vr{*vbtjz-"wzb"Ҳ*Jg-Puwrmgwק&R Pzw{z-t}WuUPK MGz ]YYptW"g"J}p wK{MڽGw}׭wzw"w!&""]EtMj"j"M $+׭zw-RD g@+KF f"p] U%GrF{@v@{kBb zM}t"w!&""]PG}DGWdbr""{r"%Хbjk"r"""J@b@rݪw TR+""P  z Uwwz"kJ w&j"+"*rJz+Bu"wjZ*wZ'f"tr"zzrvv[g]Y qb"Uz`wHI@!!P]UYA'pwִ*"&v&' "G "rF G **&+''ԧg pݻG+&"J@K}"b Jm"@'zjݢr]w$"ҭ t" &W%""mt@"+" 'G""$&@-$w$dFF@"$@pvݥxGWwGD@Dv "M*"wdB " &W%""e pIwKjr""k&""U k&""b"""wr"r$""KbTB+""""t'wg{Dڧt$K""bKp*""v"+F"{""*"$ڽ"Br"" bv+Gev-"r"+G ]`m%r%U wtE"*'-"krf&&*w"*z** k"+}"""m"Ы` t'J+g""""wvw""ִtB"r+"wG-"F""dfk""B F z rz"kb"rt"w"p}{"&G 'TMT}@r WQt'p DwG}wDTGDKp{}Zwz rz"kb"@Izg"Gwz j"r}@pww"rWJw"vwWԷ'bb@@z{&"b]WwG&WZ ҧ Zwzz z&"}PUUՙrّwuDe'""RPw{՝Vm}zrכ'y} Mw@'$KEwk{UDtGgKmkJJwWtGTtGGDW@wtwM"Tեp{UwYJҺ]{wwڪzw""$bk"f upKzY`WUp"pp]{Gyוץ"Emw"@TPT U]Yא]Mg[)"]UV""$bk"f ]}]wwwvtU]YYU]`"wB"" ''UY'G}@TU%{"wGk&wJ@wKYwww{wڠwUY'*&B+*&Dٕ"WYp{zZ'""-@'{""*ug*"{EEb+b+wIp$+U]}z* Y YIw UvMTEpWMTU{vTUU]Gtе]UMt ]z" )"mEUwUWUյ+v-T @ Uz+TUYXWu""]E"}"& ҧjr %}pyw B] UQM gb Kp}qU@} z+TUYXWu"" rՔUUT ""WG"ak{+"&""w"}&b"w"[ "&@%ҰMr}"z)MMZբK"T) Q "$TzywK@ݲ"RYY] UJ"&jr"""%"*""'[ EP"tGU{&G]g]&tdKJ PTGf"&U"'" Mԭ" " *V"W pqUP $}r Eugzd{ k"{rg+]GDUZU* %"@G]PP]TG٭zf]E kзP]]Upِpt'pUuuk"{rg+EUUJD]]UWUU*UYݕUR]]"*r T}]՝Uݚ)"}yw w }E] {]ڪתUGG&WYi{٪zfMUTUUYGU zGݻUw E]tbZ+wv&z}K{e{DW UE]UݥD }UUU upY] jjwwvU'p}UוTtwG*ZU{p+&""+"+"w"""tE{fu$RjA۷Bg$$UYU&Kz{D+k'kgrgg * 'zG$pJ{p+&"""r"f*""B&v ""r{r"f*b"""Jr'""BWgVuw'"" ݤz{+k'ww}r"zbwW"J"gb"" *'+rw]jtz}'$*"Dw"'j"b"&W Uwمu+rR'']ڧW-G-jk"+-*+"' "*&*"&kb'"ff$&"fbb+""$'z"fv&w&{p&ۦ'r"*rkrbԵ""r'zGUw rt+"""BJ֤}wvt"r+"""k""Dr]g&r*"p+b""z@'MWpf ""kQy P j*"wwG  "D"QQd& "r+"""k""{ "Uzwb+"z{""tpk&""+r"zf"&""]Ҫw r""""ݝF$}E+P]׫KzPgz `bd+b"ۧjppлZG'""z&pv"'++ݷ}@X q]Arrz'" }[!}$K{ "{++Wgwҧj M'G }&}{-gwz"bP}G w+K ""ѷG}Qp`K""f""""I"z @ b""`"Էzp"j"Kw""""j% GF}@ M- MmT$"jwڪ  Dbr+K+" p@JKz @ b""b"""""}ww"Bwv"j&b"&"""""B'"""{vt"{Rm""t 'w'G"K' Ggbr-Z'+*K "Wp"kr]- ֢T ""*"R m*bg"""} ]!f-"""' E"+"+v%$w""&j"z-Jk'{b*jGb ""v&"z""""r+"&""-b}wzK'B{jݴB""'""""e"{"z"[ """b*m  b E"T%II$YJ""f"rzԭb{ԧ$vF$"w DMwݴB""'""""Gyk""+"" "rjw"""rE]tD{}""""F rfҶGM"F W}wа""R}wݷBi${{*"""r r]ҙUY-ItRP'r """"%t-+ݒpaM`Mһ}r&$"b&"gz'+*B}p+"""+&"r+""Jvg{t"'}U@wg"Br Uݠz "wYRrpmu}gWK'wu""wE "Bp"` &"$dz`$KP D q$Y U +dJ  Gt"tB B$Mm twu""zk"wwy {"" "` u"""""{а"*j"BBt$&B*""w[t&zGE} "Rr}w"m+""+GMpG'RUM%""MKq pG""R ]]YQzљ]""" q`x$+""mаMD'"G-bd{w""'F vw w'zw*ztۧp""k"&rg"F""""d" MU)ݲf{m""&"}"r*u׭""`Pd""E """-+'BԤ$' p&'PK$"V @@K`K@ M$"b@zI$D@`rJD"r*u׭""  B]UJ@ ""gKv"pIv""""""wڦr-""Ҳ"["w""$""DwZ{' }pw{"*׶K""""&kݥ"{"*"""M'p&"tK""B}ݔPݐI״Yq"wv*r"r"E$wG""$"ҲK)b "''rGr"b"'rp"G{v}J """+'"+b Kw"v"Е"W"b@$DP$+B"B"""*rjG*"z&j'ktpנUPGz 'w@ugt+p]{wzFJv*zw ztwGt ݷ{ *"z&j'ktpr PU}}pvwrzz"J""pz@z{w*J BwUtw{ wpԧz&b{Gz"""'w tu''k{wu J]՝*{zbzf{'"""zpw**r"+&{d''"wz{wtw'wGtzAptKGwp'tT w"gj"ww wJPtv{"&"wJ wUE""Qw"t"p%Ҫ*e`ru%[]G}`UY IpPuwDD @ M"KMٕUE""w&zM@qww"bGwz"yUEe""Tݐ""Y&ApD "kU)qy&[eMוѧq"t't@uYP%fpp Gw"]ՙU[t "p"נYYG'"r${Uw}G] pjt* pt@wYIP]DMp}"M}tpw""e*$JwM*"ԐgPr"ٕ]'jt ktW ryz%r""*&$""B@$"" g "Zz p+-bp H@-"j{zG*zJJ @$Bݲt+'Bzryz%r""&vr"+"$j+@"""+r"&brj""k"r"BD"""+pT"g'"""r zТ"+*"v"''"++"ҥr[t]] b"װ"$'b"""REw-'JmuK"'xMhr-&"" w+r"r&"jb+"gwp+$*Ҡ"+b"k"r"`""* $F"&""F`"'v]"F"'b}" t+'d$+"T&""rv{k ")u׺Yw"b Yd+B*"u%*} z @}"pMpU@YGDw MF {gPBDpRm P")u׺Yw"bPPКשb}{@b+"z{&"TJҢw""""""KPWrGz} wu"Gj@ } ztvEKz]Pt`*Tװ-vuդ"]w}@vFW{p&jfr"'B"r"fz Pyzq&% {XԪ&w'wzrwUzmG ""g+kd"w}Mg""+ }U"JB"*b+{pGpRM "&}& wU{zwwpww""upGwIbA"z%r+`rwpGM'FP@UD@puupzpyzzQTu} UrpPE{zwwpww""]UY{tpGwtw]"&]G"pBw"r"""&wwԐݪwJ*"&Fwt-[pIv uwwGE@]w@Gp D@p-"wvtY}UU{t}pzwGtzצ+vGzv""jrQtwg` J"B'٧w*٥PDQgEwٚrUUEwG+Чg*יU  "w۲wvW"TYIwzww&fR}PDw"rk+)""bPJ*"PPt"zpp W}'[FA+*"m DԻDzM@bP mr@{ Kw"rk+)""b +g"& kzb@&"@Ի- *ՕK)"Ww-p*"D]Wէ[EPfpҐj "*]YWaD J*[ZհDV'wg-b''g"""BDa{" """"B""*&{D"d$'ze w{w}{&f ݠ]"&"g++ݢp"p{p'd"""'+'f%{Fzzrk*"vgkt+rw{{+Wm 'pw* pwk{dG w{pk@{@"b$"FwpzzTMppz rzrk*"vgktjwj+""w{Jwztvz+zҷҧ&w*"}vնzr w[{z r*&j ywKzD}kzwbww""j"'"wvt**w"gdgZ`{'w{{{*bb"EzJ b"K"&"vfvuK`*r"+"ݦ$"F"b kw{g"jfjKwg*z @}w}wz{wtPpK wpwֻ"wz@yufz""kp"if+׷""pҁ'"r""w"*""By ygG* ] +r` WW}t +rGKfڷGrJ "M]*+``'+"if+׷"""-jw f -"r"""rj"""tJ+w""""""k+r"""J $y &""Ywg{G"ftw""v]"{"""""'""}r%mdr +r" Р u{+$ezzrt!]- G"w"+"r"&"*f&"""*&+*bkb""u'"rzjpb+pj'"+rr'b' ""Ty"k*+M'G""{g"""v'g""""""""""r'""r"r"""""b""""&"b"""""""""""J&""""""""""""B""""""B"w""""""""""$+"""""""""""""'"" """"+""""w""""""""""""""""""&"""""++""""""+"""""""""""""""""""""""""""""""""""""""""""""'b"rv$"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""zG"""""""""""""b""""""""""""bQq}""""""""*"""&"b""&""pb&q"I"{ e{"'zt@' ]EUu{@$` Ft+"+@UYptEgMBvDq"rpp y&"b""&""Gww*"fQw"rG"'b+t]Z*rY'rGW -۫{@D"fuuPU""*Kp$RUY'MyrYY"+fr{*B]Yu{D pJ{db"+-""*"+r׭B 'FUE"bڲtJw**Օ""UgYQXUXPTM@kwzbTd&pwՑIG"G"gDq"rd{wG{vwwwk ] Yz{}GtՐzZYb G U%}׭wz%Y @G }pMUGwt{GwWMJD]U  ץ@ @uu{}GtՐzuZYUzz"{GtEt+B "GtUPUwzٗ%ݙ GpTu'vJ@wfw"' tQR''uD}z tzJUupw ]wwwJקz"v{۽Эw%J"{*}w}tGw' zztwRwv}DwYGUIyDGpuwEMUpDKW{w"}@ էwwwwYw+bҰ٥zYB'*""z&""`""""""*""""'""b"b $&""&*"""""&"" 'PZX$ע"F""""""B"&"r"w""b"""$*B"B'*""z&"""]%"""""""""""&br""""""""""""""""""r"""&"b""""""b""""""""'""""""""""""""""""""""b""""r&"&""""""""""""r$"*""""""r"F+""W mP!w*r "rEr-*""" """""&""""""""""""""""""""""""""+"""""B"""""'w""""""++"""""+b""&""'""""rB""b""""+""""*'bv'r'""""'"eb""& "$"&"b'""""B""""""b""&"b""f+"Qf'x""&brK&B ""+""""*""jmd'""fw"""wK"""""""""""*"+""'""""}"Y&&"b"W[)&""}+b"""""*"""+"""+""""""""""+"v""""""""""""""k""b +"""""""""""""""""""""""""""""""""""""&"b"""""*""""""""+""+"&"]@@zGzip'"""""Ub&"bv""""t"&""""b"+br"""F`r"""""""Z*bGUDuD""yWE"y"zR{rEmG %{PWM p}Q۵w[z pP P Z uW}uZGUDuD""QKuM}UUYG"Pw"tww"g""W+*WvUfP-"{pݰDEFpDݫwpDջ}Tzru!Qշ BvwGtQۗbwwy@pzz}+kKw{""w"ٙYi+'""B'Wp WR@f٠Dz*Йw+TuuGUrYuT pg`WYyM"J*{{"WYuWU%-@ }v'w GP]w{wggw&"w{]uGr"]!*p'PwGp wz Eptr*vGtpGpttpE pPp}w}Gw{wggw&"TwvwwwkUwz+zzwt" YzwdUbpbj z}w*"jM }w }WGfv IT'{kg"tKDwwuUd}zw wzMwvYU wTKy rwrjYt@w*+"DMw*bwdp{MKww}Gw}wwwGGw@խwG@wA p]*z gw}wK-Gwr}I$j+w GjG""""""""" "b"""Ҳ"+""""rP'p&"YH"'"" "'"*"""'r"y@""ҷ"DZ""'" "[D*G"""""""""Ҳ'&"""""&"{w{""u+b"""b""rKwW*"""""ub""$ wtf"""xXY"""rgqTp+*By%p""""""R]"BG'""ZwB"""""""""b'w""b"""VwD*" ""&"""rb"*jb"""r"eU*Gk"-P[ """"*""""""+rew"""rvptf`pT""""bJGMu'"-""""&"""b"""&'pzt"+"""""""""&b""wbK"-""""r'[ b]"Tu]E"R%""D&$rz"*""&"rfrb&vd"*""'"B{G'+"""""""""wg+"*"""&"rw&gkb""""ٕ(PY}y"""""y"kjP""bkrgPM]"""ru]]'kUMaVt@"""""+T%""g@GG"*""""""+t""""""$'*"rv""""""""*"'g""b"")BAg{*rKFbb"*"""""k""*g"z}ub"""W{*'""b""{uw'"Bj+bkJ&""zf 'D w"{}qwp""t V"G@"J "ҤD% Vpp@tvBI*%uG}w pMdM@dwMԠF{}qwp""{M{r t`u}"rpJD"YMT&"&B[UP!"M K"*ZD%"zP'RptղRw"PZD}J{"%GIr db'zwݤw RIYEwGw&w"&+Bj"""" YQ%" """&v }Y"ZZr'" r""wzw@WU wJv"Kp+"k*p]ݪ**"T &K"B"Mԭ&""'&GEf'+-Gv{Bzw+A UR]fpM"-z}wX-@]tpWgw`PEU}G"&@PUUU@P z%GQQIBzw+@]P]U]Т*UUfwzwt*{""w+ҢpY}-btp'{{W ݭw&bvw@W&Բw"$"Utw&rwr'' zw`p YUUpwwPU]YRPYmp z'Kr Y]D'R*]ݷ{$bBIe'}rEtם]v]MYU Z y]]ݙYY@Ew-f]դUpw}t U%GYUMU{w{"[ՉATp*ww""@GGJIWI"z&{y}GgP @@Ыu}ptw]ՙБ}JwۙtRک*uU*ww""Y]zMGtYp"{]G"yb$M{"rT zirwzwzF'++r'v} {t}wuwѷuZtpGrwיUwtw'"j]UЫUYYt{[}zwItb+I+&Rwz"""fљ}"mr"bkY JwM$yZUJDTYU&TuJ@r}P{{$wG**WٙU t"YB"["٥* wtzUPJ% M@T]""""""" +""""*"""""*!"""*b&""""""""""""""""""""&"""""B"""""""y""$"B""+""""""" &"" `*+""""""""""""""""""""""""""""""""""""ڻR'r'""&*"""""""""""""""""""""""""""""""""""""""""""""""""r""""""""""""""""""""""""""""""""""""""""""b"""""""""B"""""""""b""""'++&ڒ""""""pp""""""""""""Y"""""""""""""B+"""""""""r""*'""""&"&"m*k" b"F b"&pj$bT[}+jpwPttKBM[]*t['zWt"з""Mн'""""&"&"Tv*"'"""&w+*"+"++*"F}Xԩw &b wbbrwG"r+ZMM""*wpPR kfu}՝**v& uud[&f+"""""&+"f"""d""r$kJ+B"Bek)'dKJG v-jۚW *UtM'+ "&*rjש"'"zI p{"*""{է""""+"fpu'pZ׭лb!"""j""t ""r"b*""M""'k*z*& $""gptKt""""r*r+&fzDgKt& '@t+g+b!"""j""""j**{kb""""kg'""b"r"+""b""fk""r$"PPEt""")zbk*{""bz"r""""""""+*R&+"$""g"+&"r*b}wpW}&r" r'&p"")"r-K'""""*+"""'&""""&&+"r"{rB*+ '&+** t+"'b+&'"& W-"'@r&r{kk"b"""{'"""+"""rx$vw +rk""r+"x'"*$Y$rjB+"&"""b&"t*&"""&""""b""+b}"'+&&rKRe""+"""rx" z'w"k"&"'+zk"""+""+""""""""w"BBz-*""'""""Bk""""""""+""""""""""'""""""""""""b"b&" "gwz+""""r"""""+"""""r"""R"""+""""""""b"""""--"*"+"""""""+"&+'*Kt}f٦&bb"u]w""""}zK'""k""""+&&r UwW T"""jU-"B*++"""@Jzբ*%rf"y YvTt{Gu-I-&ww ]]]ݠU Uwr M'tM}T]"B*++"""}Ԥ{tWU"zU]U*{tUVr]U"g&"@Jgbz+"GQ"{'EyEbU]{]J{GU]Pwwu+""R]wrDGKrQj&J UUr pפ"'Wb{wzTPptYW PP]w'{ptUWUpWװUu YQ uww"zrz WMp]M'tu$t}}ruww{Z  W]"*""b""+"" rwj$"r&"Upjk""bRItBwpw " + }urڥvr{FU]&Jt" W"kP'"r VU}"*""b""+""WTwp***"w{"""{'b"`P]%"&w'"k&""&՝B'rfrj'"* պ*jbw}w'tw'zErkZjzg""'"וr`t$"@tw""""k'&"r+"j-}{- rrQ+d+""wGuhYYUM]jj'QUUP")ԥy+"r$+"&"G`w{j{z""jv*zwzE P""b uY}J*"r*bt"rk"Y]z&""&&"r&}r"P"y"pu@*vrUIvgzK}yg"'R]՝U pwWw["T@&""&&"r&]PGw&"Y"ՐU"-bb-׫ RU-r{ Ww` [Gww$""zwՕb'[DҙuGrDBY*+*"WQPAvtz{wwg"")""""rwz&"vU&""pqU''Wݕw&R}"G MYM YUU ݻ{ ]UYD@wg@w}Uyz"Т"*"w{BpMwYEt$w wKp +""J}'"+" v""RD]` QYE{ww`Mktyz ]]JwTGp"tz{DpwKp +"" wvvdbG""g""P{Z{wzjb'""uMz*K`+wGݭ jںU[XQTyqRw z*"tx"]Mwwzrz+rPMUtT]Muvrrzu tD ` Wt FuwTP@Yڧ&+'&bp{z}ggr uJGzwDwz"bFzzz {@"grMtUק"""`v k"z""KE%+R&r}-DJ*rJ}`bg@ tYeZ}wwf++&*wK"'b eK$*{@pGt"""t"[ Qwb""+"z"'"r """""""rfTT"e"'[*J"R+"" &{*" b`{&}"-kJ&vr+"""&+$*"%}+"Ff'z`bwzz"*r*r*@w}'"{" &P]% "&R-rrUu'""'"b"b"&rb"&v+b"""""""v*w&*""r""""bk&}&"*W"'G&" +*{W-"t"""-w''"w"wG`w'"'&@'+"bG*pfg&"++$"d "p+dkBڷDk&$rtbu$KwJdKv&T`brbF'"'&@'+"b$'r+z"b"'b+*{""kb"" u"rRU P"B"rFkrgtk$j*& ""&""Bf*""'"+"""'"+"bk+"+Bڷgzk {"&*b"""""+"""""""ftk """"""""$bI'VGb*"&""B"b"+"+$'bkbbw+"& +d"r+fb U@uK """Բ"*""r'r'"+$&"bp *"""+p* wtqv"" Ut"E"j)J)M V U ݉GI tGPyz U]UEU zTzRdڝi[ ԝ* wtqv""ݰBtIgPU"W"}budkK"bRU{&RDAU"wu$@Tb{ٽEfTpU GIRIV" ]www}$"-UЉG]*YQywb}"+ҷz""""]$F"'+""' }@"P ]Ы@TWUUUU"wpg{JZ"U]U@Pbr'w+'pUUՕw"B"*rV"Ei[u--y{-Y G GW "Rz'-""" j"D"@g"J@$+"bkj"% pt-}Mٴ"b tKGt J `w"Dw @@J"Rz'-"""+m""rb- pw"wr@&"rk*J'& """p{"""&"rbt"U"z}vEb'ݴbzr wD-Db{ J'k"Rbrp -`rvgi+&+R٩]P-"@%u"""w "$F""*`-"z"*B%+"gpz`"kgzvgr" -z "j& {׻vp`f'wf"w*"""b"jBw"tw M++v"*wݠJ"r G{r{z*Zw@} t]Pם+PuGYgt`tpGpDw]u תf]GWEUPw{q{EzwGr{z*ZwwMJDwTGz@@uGUu] t+TxT*+ wu{Jg Dw'GwYpG}Pww}@"F{WWrt@"y UEDWG@Iw'vwwupDwT]Y]U }zwgGw+'r' """Bwݝz'&'""+"{ u+Z{ ''pvw]rݵwMDwQX]EDpw UU ]t}  ]}'wvt"q{utT@]]p {wfwwwrwDr+""""""""$"b""*"br"J""""Dd"&"{y"Kq)"Z&"" "$yj +b&"*+"rM"*rB""Ju""+""""gr+""""""""+""""""&""b""+&bB"{b""rRf""""""""*JD&"""*&"""""{x'"""Rp* +$'Ak{d"Bb*"""r"+fbr"""+z{"""""""" """"""B{T"f" "rbb+"$'w""f" *umG"t ""b"$""""""$"""" K"""""rvj`{"r[mz""""kk&b+"""&"""""""""""Wjw+""'"b""p' '*P$K""u+BdF+"K ""$w """"B@@DGGPu ׵ -*""'"b""p'} t "*p "P}$b""'"b"F+"R ZՙQ%*""}g*+g"+&b""}z"v""""-""""&"+ j""R '""gp}tw-""f+*r*Bݭ۰bz&'"Kj""""" 'w"ur@w'GYٙ}HpwGpUw '" `@++Ы[%UU""""Bz+tk*jt""} uWu}"U}}w&rYF BԔu }MMUЧJW*{T@ Н}tZUеJT 'ptk*jt"" ]wt@ PwU"w"T] F"r"W@}g"jpj ""@GT JWMwPQUzv Uwyt* G}w]epj]}DwwwDP@ݕuwuJu*B{vU'}{ ۺ+w*'ZMժtG{ պd{ }wMGgPDE PYU} zg I UtMjzrU] UյJT}}w}ukwz"r'Tuuwz+{wpJ& Dw}rZBG%" DEwݠ Up UUtwuw}t[w}FUUUUU]EwDrԥWդ pz+{wpJ&Yu@tt]"]UU]PBKJ{{wj+"rPݢ*b@TtPup wYpzZk]DUњ}byUYtf''zwEuwY@uwzDtzfzb&B$k&"&I]z*F+'B"'ZTjjy*uWY]@Y]U]TMEWFYzGwUU"" Pb]WPڥ@zDw*kҴ }t""wrBjB&ۙwMp &P+ zԦMG]F"EtDvU}bUGTYE@] GZRjU+UDw""wrBjB&ۑU+q DG] P &p}v*w*Z'"ZIPr[ {T@ݰp"&gdp}'Bt] GzzB+EҕM+zg{U "U@GZ uffD""w""w"B+'" "++"T"jWT'VjI' yZzҽYupwMwԧ{ UU{wGg UUY] }"Ur"+WU+UYEI@wwz Ebr'&&""""&+w"k" 'b""W J'WB "'b&@PE *k"{w g*Pz*{ "BYw*w{GEbr'&&""""g+&""{ww"r}z""b["w }zw"&""zpw&"`p{ "X]"b&YTPGyMTqg["""rr"eBEww'bUE+&"""rz' +K+rp٫+p rw{۽z-ttz&{ZwGu}wwzj{f+"b+'*KݚTw]z{v"w}]}u}P """GWUUww*w*+z f&{wZMYzG'""'" `RvPVw+IP!K]W ٧Wrz-jb z&&ugvt MDptKз"VݻPEd'""'" EgW""ekG}}Uy} j+&'q*]ՂUzzt{tRuݐ"**`ruMU"b*{{QMUgwtgY]Mwv*$r{*bMu}rzՑ u'""""*z+&b&"""+"""""&&&"fgbRwfg*vЪkJ "zJнpjzvgfjj{jwK}M{wpՕQz Tt"}"""gݻҺ$ PMzYݵ"Kvbw{GҠ"ezt}W "]" Mו]TU@Pp MEP$BgDT pD t] ]zEYwGҠ"PPfvvwzzpp"I]]w*"rY* -t T%w] PuF UUUEzk'uTRGu t zP'TKKGpUtzڧP "bJrpк'+&+E"D{ֶ't}rGzpGTGt wEUGwwDw} U֠*bZprwEYw]*D{ٽ'jrtpv"""""""zP}P%BZڵ"""" "+r+r""$'""'""P-"k&"""""""FdTFWI&@rq+**"Ra%"""""""zP}$rUU)"bd+*׺-'ݵ"""*""*"""""r""-"{ "'!+""z+b""""B&"""""""" ""f"B"""$"+""""""""b""B"&"" r Uu%"""""""g""""""r"""""""&"""""b"+"+"""""'-"f+" """{z"&*** z GeQY*g&wUYt&"""MJ$w "w+""r""w+"{W@"r&""bQ!]"wwu{"bypwAq" u'f[uUWMZU UTpGy}E]}y@wWUY ItUTRw*w]]Pwwu{"bUYG YwwG"Zw"JrfUw W*brPwpbUWuY*w*]r Aup]ջIujٰQYwp+JwrvwUyTU{w եGU$u tMW k&JUJuzjԐY"T {GzYѤIUVU]*}}pW"TQDw@% WY "vwUw U *w} z ]UzpUU D+tuy"" "D"$b+r'+R - p`zG` +D+vpzd@ @j$rtkrzpQt D+tuy""wr `pyG"B{{t"p$b+r""""""zG"v"w"'" "bԪ$" Z"B$vz"%""w'JJGxTG-"zf'G"pвfҔUE PP""*b""BE*ݩ%w"+"""r wb@r{&B'"r{ p""++JW]Y&tjzZ+ }J`+&'"""+rw@"&" *frF"rMpQtݭ't"""b"rrz"r"""'"} $ Ut"+Y + } ] *"ݠ]yԠBG"{t }Gp U p zTխ E"r"""'" ]M-KzZp}$" }z ]}W "b&"}z +Z[}&""YIWpz ItPBwFu +"*+"Mjb-&u'*"v T }`j]Y Att'rݢwmRUзKv%-pu*t$w`$ "uwzrtmwwpw{U UEW@ pMݤ Zfz՗u" PzWBM""""} Up +' *""E"R&z" k"zk"""z g MKMJJ]er-U QZ*"BzЫJ +{MGwz"f+gkM ' *""Tq*""""k+wg"+g*+""rrb"rgz"r"}w&""pvr **rw''p*+{ְrrj'z*Jvk"*B"+"Tթ]mrݦ%m""""RU]-W]"vpPT۲"gg*"rz++ p%+'r j'Z*"+"""g"b'rGf{&vjftdzgz"$rw""&&""+*gk"rgbzupr++f""b""""""Bg"r""fr'""b'&'""rt$r!U"]y"$r$"'{"'""""rrKj"d"""r&bM""{"& '&&"b""""""B"$"&""""'"b*&"wf""b"""""""}uu-ۥwbr"""GG""""wI"""'Jי}]"""V iw+fp!'r"""""""w$r$jzp"*"&"""""*"""""""*&""rr*"""""""r"""""""+""""*r**+r""vb"+b""+"""""""""""""""r*tb""&"+"g""""r"""Jb &{"*"b""""'"zwg"&&"b"*&]G}""}UE۷""@t""&! K -zpp жTp ]U D t{pK@@GD*p`tMJT*&]G}""TMЧVWTw"fzz"rm*""Ҳ !"bp`bRr'"{BbwJ vM@b }" 'zMu'wtP $$жWJr+PUEp@tJwQ'"br""fK -beB"b)Ur+ -kF"'F pM"+B"tpww'Bp"*"*{wGz"r"&r"t`z&rp"" G]JGGU"r""+"&""`&btz*U%b"rt*J ppקUgvjM кԺ+b+{tDwJ}GQF۴}*w'"r""+"&""{G&f"""Fgkwpgz*tQ&}էT"*"wY K kr' ץGw{}*G{r' {*FjbgrPzj"WkQzgvjڦr *""tUzwUw&rgfD"b'"&""w"&g vwrwDw&ں{F'w{zj׫ v{gD@ &p@Yp`+GgGEG+zG}t"Kb&b"ryGrv"'"r""b` -r$"Wxkw+''f@&&"*vD" &K""{'"k+rzwkwzpfV""Uz'"r""b`uzzZ ""G"rGzUwwwk*&"+f"""{rzrk&WG`p""*""""""""bbr""{b* k&"rb'"""dJ" E ]Mp """"++"""""""""""rr*"""""""""""fw""r &gz""*k+wzJp*wz קGk&"+k}׷]""""bJ*"'wz{D]YwVФ'"'KwЫ"""""""""" """"*""""""""rm"J"I"y"$""*"""J*"""&"A]"+b+""WE""*""bҕ-""""""""""R&"""""""""r{"""'"b"""R""Ww r*b+"""""w&""""b'G"""$!""" $'+ղ{f+"d"""b"'J`&"""g"""""""""""&f""""""b+"b"""""""$r${""""b"!X D")[Tb"r"*+""""+""""j"""""BpE"reD """"zMev*"+""""""""b"""V}eQb'rDr"Byj'V+TTv"zIM@$wוYUWvI՝ mUG@]UgP]PI' u'rDr"BTw}kZp'bYDG+wpVGtwRUUU m'ԭZ`wt`&g T@UrfjWUIURIEy֙j*j{KJZ-YvQUJ kv"{p)P+"w' *ٙYYbFPx% ՑpڦT]]ٗYw'եНEGz-dyVY]fpG]ݝY P"ݲ* DE'DrW Du GjM}wp"&" ""r`r@w"KY% "u(Fݲ}ݧ׽R$rw$@*"-JGMtzp[r"P'uGt"&" ""rw'pj&в""*wt+ w ww"+F"*GYe`IUU)"ZGg{Y@""Kԭ"b'F @WRGw]+ }w{rw$"RMZGR՝]׷F b+*D""+""b&*r""" rw*jB"r""""g"Rڢ*p+&Pww G"gtvKjz&GK+g+p{Gjww +""w"k"PGP'*""wbrvwU*{F w"""""""H$rr"&""r"")"*"P"b"""""""""b""""""""""""""'" "RZ" "B+}""""W'"*g"""""""H$"pw '""g*""wp*"&"*""""""""""""""""'"""""]%"""+b""""""""""""""""""""""""""""""""""""""""""b""w"" $"+"""""""""""""""""""""""""""""""""""""""""*'""""""""""""""""""kg""""""z{""""$w"&"""ݧ"""""""""""WKbb"""""k+"+Fw%"K ""My}"B"pg"'k RM*wG&ݹ*@YTڠv"" M{}pbGrDDqr ty B@Fw%"K ""wתPMuwGr"" "f&*v+""""wKbf*r{۠mw """}T $R Ww"* ת"w'+"G+Df"++в%"v!Tй* t" FwUUJFZ}t""W{p +""J j'+"ҭ"-**t"*"'ַtJvwj*fu}zJ}ww&&w +"'ptD*@{g"j"$tUwի'""G' JDw"KBv"dwvwM" W'"-[p-PP]T yp"d*gr}нz@`w M*"uUw"KBv"wtprw{jkwM+JTח"DP-"$"ڧ] pu"BڲE-wKp"]"Kru"jrv Z"zD PE%"+۽UGPTK ZyzKg"zfBw""&""""""עk-'b"*"""" Gy&wV-"+{۫PDB'}{@W]"rz"ttfzwײ'wdJw"""pb"P"W@u)QbeWU]u+{ w}{ٻ$"" {G"'""p)'b{{ r @+{g-"ҴGՑݐA$vw "v$ p $rr{j+B }{ٻ$""IMjw{$r+""*zv"j"r&"""""Krr"f{z+""Kb Grvk *M" r֢&""w&J'$"* ]]Pu]-"Ҳbb'rtb*B"Vyt@&kmK+} E) !'V%p Drm 'p) "&bf'"'vd"f*krk'g"""$gkJjtb""p[*'[ "{W"jkG&"g+-"B'uw""Kzj$p-zm""upG"Y"-z"U@J@$ѝYPmJWMkgp]]UPUwUG} EԐ-zm""PUUt{@wpt]U"UTU]" YT&r"]"'"P&K{'"]{P W]ݶgwwV}pG}+Eyw&Z}JuUmJWUU{ ݴ[}U}wJU{%Vw 'Pw'g'M{תMJMYY{pԐ]U-U@EzrPUUuJ }G"@K]M}mtwr}T +&r"*&rw)d"W twg-'"P'p`&&J@" *b""*"''r{fzm{@ @JZ"BD&B w+&r"*&rwQi""M&Jww}wdvb*b$r"*KwtKp{r bbZeW@z"""'""mw""k"z*rT+"+""""""*'"$J"pA-"""""""""""""b"""""j"""""""""""M"rr"$"w-kfkb$bem&+Kk"vB*rw pGkgG @t{pU""""J+pGG&B*JwKMMYV{+'"Mjz+wwwGw""}DwMW"&peڲ'B@$WTYАUu׫}@]pwywGpuYՐ YQQ}pFUrGuGuZP}+wwwGw""T]wGpwGwtY"TU&}Mu}bJ'bTM-{"zwtJ$"k{wWTu]IuUPPYwu P@YwP}EEY}׫]Uz{w}pwGw wU- P&ҲwDUz*ww++'wwW ]Y U Q'qMYU]Pt{gwD Uuw"G{DuGupArkY@}TP]w"r""*"*""kbt&"ݙ "KD MtW`K%M$` ppt"%wz w{f{pJ*{VQ@&B@w*"'{t*"r""*"*"Ug&"""&vgbvM+"&"DI& IUYw bk+"J@z"j"KzD{zwWtM"b"ZZMpGR tKE wtrrGky'wWdK%۫Pr`&B*""""&f"f&"bf'""rWԤj{""&"d*J{'r@[r+֢zwzwzb&b"brw"Jg`&&+Uz""" "+ڻtDw*"+*t+"b'jrwz}p% z{rb"r""*""""""""w"Mt"M$""""{G"t%BM"pg"-ҙ$e @j""'&Bkv""p$*B""*"Dzw"r""*""""""-'b""""""r{g"ҠGw'"""""r$ "'""""w$""$PU"""F-ַp"""} $ Gݽ}wbfb"""rr[+"U-ҙg[k'B """" uU""""Z`*""ZB b$Ҳ"''""&"rb"""&%&""b$*krҲk""&"""""""""" k+G """tzb"$m"""""&*&"*" &"fB`bbkrEbg{zrw*'*z&gzmVкԫK]pz]pMwEt&ZpwvywG]tfzGZ Ez ڭ+R]M*'*z&gzUMuz ݺ}}GWg&Wz'UM wٗu}wvwt{wqp{wGEp}twGwwjtw}u+"r'FWpwwwvUYݙwwGwww"gGgj{'rzg*'&GDGfrjBr`}jjiWEg]'T}w} uEzz zptUUG`ztY՝] P]&"vw U+REW PPg'}ԧB'+""}g*rr@z"tMe"vԠ$[vUY + t TP " %Kw G p{ rdp"vpGGzԧB'+""Mwwtk+""w@zz"J"" wWkrPWUv*bJ ԪVpt""]YY"'TQUqTI Y} r"br}UUtp]Mբz """*"{""Ҫ-W*&"}UE-"'W&"+*v "P- p}w{'DUtwzj'r&""Gvz}Ww ktUp "z"+rwkwp"v'{wdwwwt wj{gRXAup""$pZZ"K""B*"$"%)DTK[PݭMTM I%D p p $D@ P BPRXAup"""wzwzEJ@j"D" -""{""""""D+""KB*Af*"W%"`B %`{eG")pB]E-۲M)J +u&"KzԠMT{ P " RI WEP*"Gu"" bEm!z' ""B+{rDY"J "e B""' v+ "B"*"BM@*trjG"&+&J"p"""R"P '"""**&ۤB&Dpբuw{T""MUx}W"Bp"r"' @Tgu@p YM+Q z{}`)BDvҩ I]Eyruw{T""M+UTw ""{"W%b'*"""""}t+ r"Kk"rz+""ڴZ- -wGWUt"*}w"'&"'+wUy* }b$"*&p b""rG՝BwWr""Eٽq'""&[tzbBJ+p%&rgwr""jFPݲw WKР+"j"&"*BpGp""Pg""{ $I]*&BkrYyv'"Bvtz M"GPE""$@M["p"&$r"+*& ' Kmwuubp@* kpg @vB wmvrz"GPE"" t"@Դe""@@w"M -""r'"""""v`"'"bp&" ""`['r*tYw 'Ч{"%""t$wtwPPU-"+GwubԢ'@'w""R"q' """"&ҥװ gA'"k"bwr"&r&ppb`FTb Jw*"+"$"grt"r"t'KbW"@ w-"ղ"}r""{vzvwG" &'""rz*"""&""BpUEWݤT*]M pw'}}vзJ bP@&J'TPG" &'""wtrG"'r*""""""zpv"gk*""q һz"FD{*zZՕPuЪz$IGjw)}%rb$)UquW*wr"rr&g""ڭMTmU]ٵR`jw*+`$ ]zzw wW Fgt-"+'" "bzvpp+"" @zwz`uzpJ"U@ &Jw&z"""zw}QE}P۫"("w"{D&&D {'"B*" "g}b' K-*J*` " WZm"+pw{bwj tzBwW'u'{*@}"("w"{D&&z wTлrv"""+t""gzb+"""""+*rg+ pwB"""ygrjuZ""" @pZ"{"""'"Drr""Bbd+J$`w` ""wrJv*ZpIB-p%{"rbҺm y'&)*p&+"g"*'"fkw""'w k{" wv'''"'vwGbUw׻"'{PMzkw"b""rE`ݧ*'gwr"bEY]wb u&mz"[!uG ]T]EI t}EzWUU @@]UZUR*r) *'gwr"bUYDWM ugPU" Pw&`I kե' ""RUv'Rwtzzr '{w{J-wU"rm׷`GKZP"zUpIЭ[-"'] ]YMw Iwpw`}" ""rg+"""ruT"" r"'""*WPMWpZ*]DGpUR*}P@wUE]b}vR"WU]Up]r@*'Y u"U"&bK"WՅ)ۭ- GYQYY-J+""""""""Md"""Fg"""p +""!"bm"%ҙ"i&"$"ҧJAW{`}"b)"rDMa+""""""""ի' '"" " j""G "*""ݝ-ґQ{&""bZ'R%"-d w+"""'t"""rVUi+gґy)""""""r*Ґ!"bB״""""""""$""&""brY$*Yy""""" 'QUf"B""UۭGXu E֗qj$&""*Ҵ% zQZz' Y{QY}w""""+B)"ҹ-B]"*br{*tuJfJ&""""""""}""""i""Bd"""""Kw'-"""ת}$"%""%"%[XB$""""rBIdv""BR+DT"*"B-"&J&""""""""GVig+""""""Wf""u'r"""""b&b&f&""""tw"*"""""""""" """rE$'jkuvp&B"+"""rr"U&yY-""gי"+""""""P$"""" ("yU""" Tr* """"""B&`'f+"!$rg"""""""""""*" ""r*""*{pK){""""} U}r+"B%%%"""*"""""""**&"vk+&rw*"g "b&"r$G"b}*bK"RDpJp$"$ ] Kp&"b$wwz$z$jzG t`G Y@$Jvk+&rw*"$"kt &kr""k""""'vg """"""DgDr$ "֧"f&+$""""UMuZg 'pJGr"r" w"r""'"&m&Tr-*""+F+"'"b""r@ݧ}][p"E%"{rr "E{rf&b"""b{*"Fbp+"""br"r"""g& }Fw*"{f **w"'r'`&brY""w""k"&@""""-zg $"zr'DGp]pw{ptwz'*$PDw Wt"H"Bk*{K*jpGtzGP { zzMK]wt$"zr'DGp}[qww]]M pzmGz" ""+pzwwBR WMizGz+BKwv*"wz"+v"`"} p'@'""z{zWt"UH@zz*kg""b""b"b""j@g"g"*&"""""r{pz$"zwzwz+GJptKݤzG MM+'fw PנwG]$&"V @KdUWݙJ@'t"wzJw+""""""rt+"& p&t""K ""b"B&+v"++"*"r""*"JB"B$*bW{@B+&{rDmD+""""""rt*+zj&""*bbb}p++*z&d""-'"""m$r"+" {+r*"Z'+v{k-""b"&"""""""""b""*""""""""&""""*""""&r"&"@d*"""""+*r"""*"""""""&gr""&""""""+b"'""" ""&""b"""ҷ"$"*b&"uM] ' M'"bbwY""{w """]л""br"bb&{r֢G{vG+""&+EE*`p""+"B"%""M"""""""""""""B""+"r"$'"""""""""&"B*"P$(""""""""""K""""w"*F"""&f""""+"B"%"""'R"b$""*"""""""""""" &"""""""""""""""$"r""""b""""rb"b" """'"""""""""""+"""""""""""""&""""""b""""r"""""b"""""""""$w""""""""""""""""]'-%&{r"-"""b""""""""""""""""""""""""""""""""'""""""""""""rB""""$""""""r"""""""+"+""b"""""G[Ep""TuD{t"UaQ+` E)pPP}qp pw yJI G@ z@@G pDGwG[Ep""Ф[wUMwpGGv"Um "RҐv" {p]%"wymWGUUխWf}y{r"*]qRgJw]wݠt@'] JPDpzr""B'r"""rze)w'""*"{Mв +]*RGzzpu r"@p@z  mUzdg"B'"JuG*'B}pwj}zw""""r+" @Em&]@P@wr}tPwz z-j P"ս{"Jz+"zD}@G"K@+Ru*z]""""r+" @yZtmqkUpt p@k++""v"v'"wY*KwjuZvj*'"$"G"wrp"+w*}+Mwע'"+&r""DT"]UPW еf"*'"bb""E"&"rk"+"+""*""**Wvzz]}GpJڧ@ @zFGzGt]]z "&"jGptwG{k""" E}*' YUk"wdvU+"""""""""""""e"RF"bP$""""rU$"""e"%""$" bP$""""rbrq""rZG"P""-"pWU%+"""""""""@t**&&""""RTb""YY+""""""uz%@@p"""""W+*"""""b"""*U"""rgTU "*FQ%R """""""ٙ-""wg"""""""""'P""""""r%E'" """"REP%Vyp"""""{t*"!XJ""b""""""""$&f'BIYrK"""& ݭ{yW""""{Q$"-''r{"""r'%Y"%ID&"YqE"I"E+mw)M%ז@U٭MupRu+QQP U}rUDq E%ID&"UYUUWYUUG""P"UUpGz"b""Mfy+{U{@R]%"m[-BPu-"ڥuUu{ bwE$"{GDڔUUժF M Чub"kr"""+EUY)B*br""&T ]}qZ"Yy$VWR}rUUYYv uzv"U}z"'U'*Y UUE@"K"G"Rq%`}лU}G "+*++r"vMz{QF&{]++wG *UPUU&zr}$ W}k"k]]ݕ trd[u"REQ"+*++r"vDUw"]&tQP&*b"t k]*" Uкrw}du}M{wb"*GYU" * @VYY*{UiYU"+"""*"*r]r] {zGpw'"" """+r* ''"wWE"r'"+ "'{GYݺ&r&Q qYUvu'J D]UYg}pYUUAtw"zB"+НUu"R Ftu zzv -UuD]""+""""tt'j+'+"b""$ H$""P*Bd"&""""*"""f&"""""""'""b"*iB"+[Eg"K" *@u""+""""t+"Bww*""" "p"""""b&"""*""""""&""@J""b+Z-r'&"tp+"""""&"""&"""&""""""""""""&"&*"""b""""""*"&f&"&""""""""""""""""""""""""""""""""""""+"r"""""""&*"""&""-g"G{*"b"gY&&""bb"""]YD{"+""""J"""{vr"""""'w$ՈAԽ""-"Bg"" Rm*R!$b)%]}A EХ]UA B`@@`w"M "'t!E@$ՈAԽ"" "]Bpr""gF"Q%""z"""""r""զ"B"F"g&u-"%B-'!"(w*r"r(`'"+*rz@""y]ՙګ ""*"""")'Q-'+ """'Bp]zUr""p"&v""+gr"@"`+-"r"t@'Br""]K"*+MнM-"""r""P""t!P "z""r uۢ-brzD'& +"DWIz""PWpb&BMg+ gvwP$f*DpFjp"b+bzzKt wݺw] F}@p'D'& +""r'b'+Ktt{""תk"Gq *"{+"}zu'`"t& UpԷ+"+Hw[GPEm@""w"{+""wGzkwv **`$f*{ vzwpWz۪ZҴdg"br'ڦV+ &'""R K'""b' rp{wbw&zmwtupPw{gwUЧ}z}z++J w@p'"۰pWrwv"r""bF ֶb݅ش"" WWd"B$"-"G%*$'k%)PPMUpG$pv} @r$z'" F-pGD@vTb݅ش""pJ"BwQwUpurG""r@p""]-"""""""""w{T"Arv+"[)""z-r-mPr"g!t' Mre ""!}UU $"z"Gw@G"&R ]Mz u&$ҫ*B""-+-UU)&'b""B" m bf"$&"gp""vB+w"""br"GG ""&""*$@M{D""""R"}zG""z""+{'"{{ U'w@D""IW"GJ"Az ""i$vm-[PtZ`@ݭ@p"wՐ u@w@tpbrBGpd MF 'w@D"" zRG Ytpu"r& B"Yhz ""r"B"Kײr)+"FbW"R+"[]UGK{zz[u}bjp@K[ҫ*pw]{Pub'"k Gp"r{r"RuEDUM YYzW+r"rb{-[ "$b*R VUGPHZ z-bpw"b+} pt"Bg "K"fUk+"+rwg"'"rM"{j[""j"+"ruGzdkrGpp"Vzr""$wD"KG"M"rG- DM`@GEjTgByG Jtv@p"K p} p"Vzr""*J"wr$t}}K" w"e t" *Ҳ { )"w*)'{"Rg"p % }"Ru "g GbAz"'t-""rдj@zԪ*ڗ ՗Gwzb"&"*r"""zwY )B"&"""*u&Z ""wR""vr} U$ @" GKgr*-{Gwg"""""ڧ `$+'$B w*G "GavwZ&"Dw"B" z'"' jvI% eJpfDGuwfpDz@wZ}puwԶ  wB}"GavwZ&"wzpxwD""zw"Uy@'"""ww{"+rPfyGW "*y{pTw" JW"+"g&wp{-+J{gФf}л{GpDwGYGwZ{ "rzwwuٺ'z'p* Twwjfrp+{$ rjz@BB+twzpDz}+}wG@wUw'"'wtwww &M{}"Kԧ]zBzJ+w"" G@ w$"rbr'"r&[ fTT*G${&'At kwkDv{YFb+wk"'vwzpGzpwKG"B*}ww$"rbr'"r&[wzJ G'"FjЙD@wU**&""f{+z+*GDwjrrDwrvwwwz""d+z}"j+&vzrwwG&pw"*"+"z"bbGv{YUU ""++""""b&"*""b j"b+"&"""zw&r{bg'{ڤwwJ*k}Gzzwwv}}wJppwwwwppfB""""b{Ч*ggzpW{Zz}e"{wzw)"r""*"""p*"""rMJ"rM*b"""pb!r"]U"{ }$ vJ''&"*'zwpkvB&b++&""Kp&"j[w)"r""*"""[&`w{g"""""bk"ww$"""&""F"[+kz"&""" '+""ru""v׭U"""ppTJ'ڥpy`@""""rvz"rtuB ww{K""""+ """"""k'G'""rB+w'r""r""+"""rb"r%+""fb"gr"g&Bb"b&b""""++"g"*""p{wv""""""""vp&"'*zbkbkZh+g{v""f"""""''v"ҫ"ҙ ""Fzpj'zY Y&r{A+ Yפ"pKvFDff@ w]@K*P-"D@$j""f"""""׷t'""}bww""]{""""ݭIwy "bjBMp bt}XYU"&f Yx`p}YIխP b&bttEYYr{P&"""@eM$`ҒwհVEUzBt(w]}zM*&zGwjz"ݭpJU&"""f' zK'F]P wG ׵TzG}JrJr"pZ u "p'Zڪrpt׻ 'j&+pww@&Eu"R *w%v"*r w}*P }UPytbEzMDq{w&kِ@ ]YvUw]еG٥pww@&ww@wJPUw""UW@*wJDwzwg'"WY b'"pGWzwr*""MTwPwT}Ыr]Gup+ѷ&p}wYytb Y zzz}zE}wM*۝zwGw@wt$wgFwGuz}tzPT]}թ [QYUM`&GwUUY}Bv]yuGQBGԪf""PYq]zz{wwwUDTrwuDuw wzwWzwuФGupU}t V]rtGW UQTwQJFywMwݫz{w@]P]zyw@PUG wUrtwzruw'{+zW]GtPwwpZYyWzwrw]YwwGjG{UݧwwM"pp&zwr'tՙwp] UU ttwwwrv"vG+"""wPw'"'"&WU@u*GzUx*yJwUp]Xw EU@DYUPБUtw@ݙЕzD{"'&qwIDPPPtwwwMbG "`"w+""$"Bbx'"""$"""""d" z&"+"R"{"r"*K*"vDkrpz+"&"r b"}bG "`"w+r!{"p """"B""&""B""""'"""""""""wB[)""*-$""*v++"""r""*"""""r """""+"""""""-"""r""""""'"bG Z""r"+K"""r"""""""""""&b'""""""""""+'rb"""""""*""""'"r"{"*"}jrb"""&&""f+{dG&"rw""w&wzݢ"""b""&"r"""" wݢ*&""b"""wGiWuw"IR""Dp}*g@ JݧTuGGm@@PEq& GTUTuDJUz P@+[@]GiWuw"Y]Q@pEzJ@"Dw"ҧr"pwz"Dקzq tUWMjtz{@ym DbwDYw}GEWwZz] u"wr ]Y}GGw'y`bwM'RB*""EJYM!JyWU"{'@gp gtGYuMppGz G@p]UU{wk*wUG}U"" W+[}fzwz`Gw U" " $w""tGUUpb "*"d-]]m}"YP"ZDzpw]P ק@}Zivg" " $w""k+ {wzTUe}pz&v @p)Fuf&'u z""""JfBT+t* Tpݚ{F')&f"PZКY("WMt}"TgUY]UuTD "'Ҷ-"*v& -[-"ZU'*zbrrb"+*v'wT-I pyEUK'z"'"z"k"%"U"J}Z%Ub&*wj"v*mfwb*"RfF%"r"r uDDI"TUTM" -t (vݢЭM}Gu{F"pd"QFGpGzwz +gry p*"RfF%"r"r]Fp*M$KpGt"pԠp" z$q$Z+{wJ$JG-' } p""+jgrU}P"*B MRp{Zt}ZjRkwzG" w}Gݝ UwwVYyp""*'p""""r"v"""wM""+""&""""z@&Ukp"wKע&}zwGG zwwBGwwwzbvw@j"Т""gr gzp}twwi&zګz" &"""rD+$vz'G*r{+"P&"U +&Ҵ +& *D""$"d""*"r p'ZUKQ -'Rq" &"""rD+"rG "wwzt"f+""&""""""-b"vge"RzdYY!+""}G`+&"b*"f""""b+""""*"%{""b"$ "&rڰ""jrw} &"""k*bf+""""Z+b""&"""""{*J&"""m &G{*"k"'Mbg&z& ]yաu"JpwU+++ }"Mp@wJ"-j UUvB&"""kщ(wrWjt'W""]@"Ҥ"GG 'F}ww @Ymw}M ݝUyGWפGpGT P{]-zt rWjt'W""EНY@y ""]}Jv"PTuvd"r"""pzw rbwwv*""]y tGYY fugwf]Gw'r}Wb@GW`wE v}FGY`ՑWY]٭ Ruru]]]UU)Z UЕwԪzz'*bMwztzwP wtJU-UMwݭj@'"W}w}Uw]p]QfJ z@{zrzt{&b"R}]p&+&r*uPi׷Ч{$T&)*t&r$v"'rk"E" b""{zGG ԫf{'gjp uD&+&r*umv EUUiz}{zv]wztP{ &&r"`&""""jbkBBg"q%"z""b"rfv"*"""+bg{""""""""kr*"*+*""++"" {fЙYU zvt'*""&""b"""""'&+'k"""""b*&" "+'"""'"G{&]ttw}&zYk&&+twjw+"r"jjpz{JQP' {}%zk"''&"""}vwt+"G$&"rW"B}zy ""&M ""b ]]խzէ&QY+-k"''&"""wkvwGw@@+"wDzz"אԝzw'r-tw"k""W{uR+""""DUuGzw*yPJrmW z"k"}Ayfݭp'""uкpkff*""b+ݧѥ vmBWzGj%-G"b*"}ZzPDezwGE]PWM)uYUٕPнvTwwWwu}wbwYzZ]YWG+&j""r&U "w@Et""M UbY"QpigE-wu RP}Pu}tMYEpZU]MAՙYUYMI B }yՑuuw@Et""pWݐ QYUU"НYU"APMujt*r"U&pz&PrW t '""WMqZTtݶBDYYIuz}$UQԉ !vUu]U}}t]QݐݙMzuE]"rbIuYհtd'+F'Uu{К} pw@ҧ YZwYPYP] Ppw*w+Y ug"WݪG"YyՑY'Uwp+&Pp[]w"'{ fz"Eu t"`"p}p*+PY KGݪ]GuGjwDPTYqJwGWZt@t }"[U"'{ fz"E]w}w@w"bDTt׶"zr"t"&+""] BpԷz]+B{ww}UpݦwIеZUդuFڵZu+vvzrGWY}Gjիkww{zk t+g*j-+Myw J gtY twե q ЧPtzJt}gf $kGd]]]w+*ݙpM"{"ZUG p"Ҡw FGDս+UUUG]]uU]&" Pٝwt"[wi P PuYYQ] }P WEwtpyJU]}@uזd@pG]]uU]&"]@ݩzz"JGGz"UM""" GPzUz' }p)+zٹ GD zg} ]Az"}}pQ &zz YwGwDQՕUU++K-""" 'D w'"v'wDp]z"wtzw'zJPPUQ"}JwtJ `է'&gptڭ'&YG"+z"w'kMwUY]tzmG{wݙ"k)"w(""@ݥp*""Ig""+$+ Rw*tg"$ TTEI Gg FK "J'{ppr"k)"w("""{ Tw} r"""""*Br" P 'K """""k"K "BbbtB"""P K"J{}""""Gw"+'""+"*'"{-b&"rzg"vBjp""w tYFzyP"""Bb+@bq -@&% t՝ttK"g*"+"&r""'"""&Bj+'"+'"Զ"rz "*"+"+*gv@""v"`"f'{pP'w"$vݷ*""b"r+"krXԐx""m}"{+"Gd""R+%%ڶK`'B'@ݭMIP)"@wD{*wGb *Gr`z$zWrXԐx""d] bMu*"G*""&""b""""""*vBD&"""Y*&+T-""Z-ffj u"$zfwt+"'-W"-&rݲK`'B"Kj"+ҽ&wMНE}bږ"""}%G )w *"'b"rK"k"j%"rJ"""&ҪbwGwۧrb"+"+ "B"$r""""rF""z"zT""'ww'"K"""&g""w{KtU"""""*""""$""""+""PT-z""$"t'jr""""} "df""&"$"p*"rk&"b"r""@jb""tt""+""b"""""*""""""""""""""+""" """"""-*K WuҢ(""J"""r g&v"""""v""""""""""" """"""&"""-r*'"""""""d""*r"*""""""""""""""""""""b'f&*"""""""""""I"""*"""""""""""+"""""""r'"""*"""""""p&} '@""""+"""""""""tt""""""""r"b""""&""""+""""""" F++J@ۅ""*"-"'"&r+Bb"j"v+"""Pm+"b"r"*""B"B${F "r* "" ""+"""""""'"b @@-rD*g """"""""""""""""r"""-"+""'"""""$"&"b""""""+""""""*""r*""""""""""$""pbUTpBZ%+"j"bb**"b""""""""+"'""""""""""'*"""*"""'""""r"b b"r&{"'*&bk}+"b'"ww@""""jrjr"""k"+"""""+"+P [""""+v*&`j"wb"Ddg`p" "G &""{{{D@G m" +jGЦt&rwWpE +fu"Bw w`j"wb"pwgkk"z@w"@Gw"k*"""r"" b""*kvwְ"r"*zMjj&zjww-z$zKzzt"v&{"jr Em"p D""b*"""b+""&B &K""wz"'Gj+'g}fwPEzk "'"-bwpwGtл"fTp]Gt ""w tw"Bw+rt*ҧt@www"""""""" "+ """*&""" `{"" jtj+"]$"ri"yJM"BB+w""T @[t"F ""t@&r""""""""w&&'"" """[+"b"""r""""K&"""&"b"""" r+&"'"""""jwTz'+*"zKr*"'b**j&"""""R&U]w*"rP"+"b""""d'd"bIQ%pdr q*r$*d"*""""({`vwr"""&&""""""-b" *v+ "&+` {!v w"" U}$&""t}&"b+""""B**b+t"""""""""""*u"w"r $"""" g ""W}"%"""-b$""""rr٠M""Vp&]p&"'"]t""""""""" vg """"+RPF""I FF"""r""r +@g""""y&R*b""k"""gWu]G"""Bz*Bz"zU-rkz"""r"P&]P%""u"'""""""b+U"""""" ("]]""b" Wzr-q J""""")U }"!Fup"""""""+&"grjr}Zr+"r}Pt GeG@z"""rWxG'"ҽJ"""- ""b"WUW G{f"""""""""+B+"M"V"`""& Pjt"U"-"""'"p`&+j*rGUIkFjA" "rzJwf"""""""""w*+'""""R"bAg""""""z{v*"bѻr*bwMU"`ّU"""vWX!]Y+'B Xwu""""""R"ZUu ""t׽+"&""""""'t"""""R$z'"}w"""""{E*'zקMf"-Gݙ }t"%wQP r+""&fr-rj*+"wYw ݁ """"}p'"r -&}+vwzg {www"""""""-B"YGb*"+&G" z"B""&"b &""`{"&""""*"'"r"b$"r"z]"B+"b"K" K+"""""""&"r '""*b u&`]*r&"+"""""'r"""*br$""M *r"*""""""&""""""""""""""""""""b"""""""""""""b]uз&""*b&B"""+""""""""""""""""""""""" ""r"+"""'"""""""+' """"b"kd&+&& ""k"jz}U"""&*"b""""*"b""r"F"+Ҙ ݫ"+"-r&""""""""""p&"""M"bY """ G '"!"!""-"%"y"""wDYT] PE BԠb"i"wz"""""""""v'k""" "U]}""Y}D""""""** 'Yՙ@*""rp$Rb{{}g"""+z'ו"""{'"&Gr!Y""""""'+!""zuPb"""""""""$""""""$wz*""""""r"*"Н*"*"eP'}PP I &tPw r""YU +"{wYwU p{""""WpUi"-''b'zrww+rwM&{J""")r'""$wtww"]G&" R -PW q׭U]y+T""u G +dp&wDdBMpj-+KJ""")r'""rr"r'&rJ}w"J{zfw"e K]g" *R}vw$Km" "U &V"'" G}df VIZB"w+&%"""ZbW{PX!+fr'f׭ WT'&Bd""""&-Y){++"+""rz%"RWr&""rptb""m-{ PkpyJmdrb++&JdzF*"b""wj-%G""""""""-kKt'"""""""""E&""m"*"r *"""ְt ""{" "%B%" mz&"*vvu׷&ҔD&vWp" *ҠT'"""""""""Z *&+""+"}"bu'rb"""B""r*g-w"""b K'R'"""&"&""bjwyu}"""V ҧpwuy p"""rr"R]Y-B}а""""*"""'""""T"z}""vb+ (X]ug"bd҈p}uw(EF"r""""*"&%rkGf"k'wWwzwСpЧ"""fW*`*}'""*PdpT Mt"" M}"}" DW *rtG -KTTUPI}Y P GY}dUUTU]Y}IK]KuW E ]T Mt"" ] pMMФw"r]Uw"U}pMr*BWY{"@wTptW'"QwU ZY{{}YYMGPgUUYIzWVgwݙ Y DݦBzpTUGtzy׫z"b u% &+w JVBpdwURGM]UUUݪ]E}]BUUYU wpgD]]+GbJgJW"WYuWrUuJd MuZ"'q׊&!""]w d"*""D'"r$"$-zDD&J`" pM]ZGGG"b'f$"@jr+J b vk+B@{G"'q׊&!""۫vV`[y "B""*rv"" e""w"""""""z""G" {f"""rgw+" rz@}+"'"Vb"'"""""j "e*"+"+׶"W+*"+G`ktz"d+ z*G'""Z- m" -Z%z+&"%ҥUx&'"b'""""b"""+K""+f"&+"""""vMk$ *k"K"""""`z"&"d"g&j+B%""*"}{t&"r"vwp*r""""b"B$""{Mz"ri֠"{*ԍ!U" "Bet $-Bf'{"g'rKDJpkbZY"J"F uggp*r""""b"B'*p""" "pwp*ק "*"br݅]]f *"W" ""*{UP"""BKyW*+T}{שG""""""rrTpitPW j g""" """"""gFj""B%j"""r""&"+w+rv" gԫjwr"z*b&"""""""* b p@'' ՙUU t *kr""""r '"'"zjjrZu"k"w'""""""""M"EbWw&rQ%""gzU rb"V!}*EY+}"'tGAZ{+b D""BMНy'""""""""ww gw""+ZUM"vpzz&""""zU Ub+"rWu*'k{p @""rwZ݅""" ]iՙ**)ݙ"""""R@-RU]! ]Urdrk""""-""K"" u$%YE""'""U"'"Mw*B{"y[}Eyt-MZTYg'"b"r'r" YP{&t@ԑ@ }D """G YU"B'b"k+"wjUUGP{g"" `"Gg"J """ } ] ]ukr}jYUg&+{ Gݠۭ DzG]]k]ggudR P{g""WU{*kjg]ݠk"rwDdG"fr*gb"F"p """"p` v"&"} @wM*Y]GKwyPeWI}kpw*z"ZҧY YUukr T]vkb"YYuEtUAQAZ}[ U]yzwpfgMZpWZz'gjwwtwGzK*{zw'tںa]] GggיEtwr+"+R ]] v" "r&r*wJ}wG }]Wr+$G}'V}@ @z"UJ@rzDZD{}wW}zp իj" "r&r*wFz$Gpwwdp}-rw[w+w+zhJ{+BrGrW r$"&ݧwfҢ wrkvbp ׺"`'""@r{vfz- Zx z"PU}grw ]@RMGh}*"{wzp++k")"+"b -z+*{z`r{{kһ}-}j'zJgww wzz w{ݪG] 'w" "}+w % ]Ygw-rbv"wkk+{]{w]}Z+ݵ'Kyzݺ wPwupէGmfUw &JwUMTMwQtWwJw зRv"wkk+{pGuTkww ЧGyw+zJ@t -'vUU+ztۗ}ݭv'kwwwwMUww+Pww{"+Ewzw'JwwwEmf ppwzwDz{wzww+r{j*Bk&uwGk"k}*UMzutGWY}GwwGGGYUYݭY@PM}pGwwUEpuw{rw w]]KwGvb"r]mzk"*Grpu}""GDDZp"BM" b "$"g+V@- @Э M"p}p w@` @GMtD$ڰMmpwD"*Grpu}""r`z"zwwtDu}D""J@"u '& b"b+""ݧ"+B"rbz-+"`@vݧ+wzYZbV {)"r"Z]۷!"wGTM"`Ы BY''{"&"ԫM) wb*"+"'ttp'йY"&&rbf'z PU"@ubT*pw@v+'"'"b z*""t"v""ԷM *"++}gw**"mvwJG"""+&"r"rt'rkk"yG&fw $U"Ky{' r*@*"* ]]٤DIG+I"rwu"""+&"r"rGtpkG*""*vQQ ""$""' 'rYwdbv zUt"""bjFU"wGBp!""b""rf"-By{G r{w'+""'""&"&r+z*"v""'""R}"'p"rb -E UUUPUՕQ}w"z{tGDה GwwUUyw+ע""bWA"r-wkz u K]pw*MGwwUwr{Gt" Mwj"t"@w"&tWEvwMp jzvڝpEY}j'wםZI@tЕzV٘[m"rMD} r{Gt"}MMtz  "M}D{"bk&B*""wut'bJwUtת&rwtz ytt`*KytrPw'W{pwJ@u"vr"BZ]vw p'f'r+''+WYYw vT]"T]շvre}-W١GYqGz[zgzK{"wp}PYww*PUUP݀"zK"jEm"rMקJf&T}wMrbg ]W+u-wpGvY]նPp' twuz*rEW  Y]M MEJG}rbgww ] P@UU]wpP]Y݈+UTuYIG+t*+U'krwdTYYF'jgzG]@ww"uZu "zk&m'EwpPyG%ץwp'twzP՝w]] Wէw w'y"r"խppww'+r"'r"TIUg"u*׺rGТz}ЧUUQQP]PtP@w*tP}t]wp"G }T׺r""BzU[zG{"+"""""z'p"j"k'"""bze&"w}pbT-w*Y{+"brw{uVj"+ZvgZF$"zu{G{"+"""""Z+""*"wrre""P*f"""k""z""{&z""""w@+++fb""&wJe w""JpK+*դdw"z""" F" gvU-wb*""""wjjY]ZYyuגQEJ"""&++d'&'"""&'""+&*"{b*z&{w` "rkww}+*$"z+br"$+'""Ruvb*""+""""r*$v*""b"""+")"""U"$"+"$"""""""""""""$"""""+B*&+"J" " rq*$$"ԫ%!""+""""r*""Mz'""`""""""""+""""""""""""""""""""""MY-b"""'"""""""*"""""""" """""""""""""""""""""""""""-""&&"""""""""""""""""""""b"""""""""""""""""B"""""'*"""""*""""k"*""&"""""'+"&""&"{j }"""" + &""w'b""" ""+"r}{"r"""""՝-+bJp+*MYu Y"VQ"yr$pz -GWWtuu}}QzVuEڷU}ݑu}VMJDWIt UJp+*P]tUp]"bP"Trzp"r"&Y'J" תP}YwJT "BGp $rww[Iwt"rzGwwG"$}Zr$rzwWPEzwYUYU zjrG"bYI mwz'+&r'Yt}JW$Yy$}wwՙWzE ZUP{UYwj{Ч'+[UU}Kкt"YDWy r@FGw"}EtݕUwg{Dtpw +pGtwY]'teG{ zDMp]wG]w E Yw}v @@Gw}zgUY ݕYtJ{wywpwg{Dtpw +՝} wwzDwYz ]]' {vw{ +rU]YvGPPEEwvztwݕUrwwwwtUtWԤ }Uպz{w@UpvUU@GtMw{JkkrG$f'p]zv+G"EwG{vGwQ{wԕٕ] PD]}y UYUUU]twIw+w{bZPzPy]]GGwG@YyTwb-""""JPuj"B"rf"*}wD& JE$GkG t"}  "r'"GKtJK@{M $Bub-""""JK&j "{ Uw"f"" k"kr+"""b"j&w' Bgw{$&""GzJUur"""wG"+b"-"vz'"t" '["'$t"*rkr tvJ}w}'t"b"p-MKз$""'R"v""w"r&"+kw"&FBfr*jvpw]tM} G{t'Ԡ"v{pzb{zgQYw"Ч *Bk"b""""zwp%wz+"""""""{'Bw{ݶf&"*"'bJv*Ff"*"bdr""k"d"+{""j"B" ft& w"jK""BT*B*"""""""+"tJF'""tgkbYHj*+"&"'+"b"bb"j"B"r"&"uJP rt&'r"""r""D+""""""""r"""&""""" ""*z+"b*"br""  Yx]Ui"''"+"""""""""Bb""*"&""""""b"'"&br "&b*""&*"""' "+bfpww*Uk&""&pww"""""""kG"+"""B"B"vY@]zK"'+"bb"&"""""""dF'B""'b"""+"!"""+"&"&"""b"""""&""&"""""""""++&"""rBj &b{dB-i"""""""d""Gt'""$""""*"""++"""""""&"""""""""""""P%+"""+"""""""""""""""&""""b"""""+"""""""""""""""""*""&}*&&""""r""""""""""""r"""""""""""""""&"""""""'+"""""'"""""j"&"""""'{&'f&gR"""""t'""""t"'"&"Gp'+""""*"b*zz"""""t "+b]urkt"" @ ""tM)*GwE%P@Mdt`zppUݙGD@ڽzpJG@JGM@Rwb]urkt""TDWp"t&""bJҷ"wKpZ &B"W TH}twGZ[j""wU{p p]ݦ}jfdD"}{pYvEYt}}`z pw*wvB&ջU QjYZGRzU WU%T-$M{pD%vr һ ְT"{Ffw+&wwzw@GwG p} ׷trJ*"GP*rp{ "U@pKzww$UutfwzzKM Q$tJ}GJjw@}MwGpb*"zwzwp P]wMu}YyKzww$wzWAD`fPUwpwwf{pwGzzvg" r"zDz[pZX'""tpwv P}{www&GwJG"G*+"+rw*` ww{w{zЪ {kWwPWGD' חwwtjF*'Ъz+" *wwbwwrp tu}PTMԩywwЈU}G+wWЪGrwG}YU]}g&"zb&""&"""""d&r*+p""$&"""{&wpbp}"z " &* @w&&"FP]+ z+"jj"vJfwb&""&""""" g"&+"b"ҭGv""wt{""fr""f&b&b"""+""vk+"r"'wJw""&Kt'v 'urG{t*w'k"b"rrw$zw "Gp""""""bv&"+&k+r{K}}"@{w"vz{'tw{kb""*JpwMy"% ]Yr""-""'&""{"wW{{z+"rvGB۩""r"kפ`j"vg'j"""&"Gu}wz""""""rѐ-tt+v ""'"!"&"U*""""""""""""*f""""""""K B &B"rD+" "Ҕ-""""""r-"U%""@Ggrk""$+w """"""""""""r""y""b""Y%r+""&""""""+""""""""""+""""""""""&"""""""""""""g""Wb"pw '"r&""""""""*""""""""""""""b"""""""b"+""""%-"V+"" """M" "&&"""R * +"{ D"""" b b"+""bb" +""rUYUv""B"-"Uk""*++RݥR zrKX}w*g"Ty$b"kkf''w -k&*W+pw{wzMT]Gںr@"B+]zk""*++Ru-w"u*krG"&rfj&W+'"rwWr&uz """*"bf"gb&"*&&b*"++bb"+"k'j'"&$b"""bw mkpWe"b+*$b**""r""b""""""*&""&r""""ru*ۺbj"+{bbGb"g'wD v]ДfҠzJ ' tЪTj&&K """""z +&}WUzW`*'"zrz}""$&v""%֧jzw{""+"!+"+Ұ*""&"p+"TgD"""""Bw pwtPU&pzQz R@ryu""$&v""krU)bb}"rz+ `w{b"""&"""""""&*"R+"+(r+"" +"{+""""""" "+b"b"""*"&+"&&"""""""mz+"pbwUzJb"vk*B""B""r'v""""""""""*"B+"""" "{$""j"r"]&w&D'z"ppf*GpUU&"""zw&wE gwB" p Rj{ہv ""&U)wUwg"r""&"""b$+"z$"%B@""ugk rD" KpdK *+B"'rrBwz"Bdb"bG"r}w&"&""g"r""&"""bG b""zb""J*r& +&$bJ"""&"ZrڑQYU]"$"Ywvb""{w@@""BJz"""p{pGBB**@vd{""""rRb-*KpBz+b*B"" +p""""""""""+&z""""""""""""+{"'vJrbr+tf'""""""""B"""+""&""""b+UtGt """"B{Prgw&"""b"b"$J׷'"""&"""""&""""-""""$"""$"b""z" -"Pp+ {-&*"j+ "b*$"rpBz""""B ""ݠ&"'B+"""&""""*"""""""" b"r*j"""&"j"]q Ԫ""&""'+""&G""f{Z """ i$e* r"bB' { {[kb"""""b"&""""""""&w""""+b"rj%'R-""B+r$ҫ"'b"p"''"""""""""-""r&+}""""bp}jz} '"""b"&Pݭק&"""d"b"+"GDzp'"+v""G}׷""Dٝp"GG"Qw &"Rp$V]Ykw] jkTwݕ pQMMUppguG}׷""GwDz]GWwIGz"rttwF"QYuTJ*B"}m""Gz'w+ {*"&GDMDwuwpuݘTy'pp}Ye Xz} kGzDzvwGJw]QQTQ"uMYTMMٰ$J-WWFEtEݠwY zpITE*MuuGtԦ M}w{yMFUt@v]PY DMppGwbv{G'bfz}+g'""b }jt')zz+r y@YwUyGzEMGp{eDQ p@PwtWժr @{Dw}}+g'""b}PvpfkpwvFUww'GMUU{"G@Mѷzw@$W] u[YQIUU}wWTUtYݕyGz]Uzt pz{u]jp&@*+G}z rEJ*'gwwZF հuYrU]WX twgJw}w{rt ]YwwwzwIٝYTz"wwwPY{*{zzwwwwD}E zjzwgz"" }G]"R "Y%"$BppKy А PpIzgUP}fw&QYP ]u'AUr Iݩjzwgz"" DM}ww]""]ԕ"ٝT w'r"]@"*B" Izw*""]w TEpѕb YՅMҰ$wg i{GDսzgGw@{tЧWUt@Yu"YwTpw 'r'Ujvgb{[pdYu @z UGUrّUUtw"t &tY]Uw"{DUtWrWYuzr wz""R]U}ڕ{"b&"""""+vD&"&"WJ""""RGu'&" Eڵ-*""*"wٱڝ+g*"r&`bB+"J@@"֑*"Դ&"b&""""""bbb"Gtj&""rkf*""z"rb{kr""b""""" uTwB'""""""br{Z) &&WIz w"ej""""&rb!"z+""vw""""""""rw*t{Q['bz"RpwuQٵk"{P] T &Zw@+&b{-""'""""+"{ &"""D revWt""+WQ z+"r"۷"r"++"""UYv'"r""+""""*+"""""j""*"P"bw$-}tP`bd$+j"$+r ""&B""+Bb""* *'"r""+""""w"""rb"""""+"""&++"""k]XPi"%"fywbb"G}" {Rݪjw"&B@P@B&r*b *g{Bעd&}W+-ݫdbd-Ң""'""bbb"""b""F'""""++@jr"&""*&""+rJb 'vR۷b"W]{&b"""""""*"""""`"""""bUK """"++{"ڴ"""z""""+g Mw%'r""-"&*d""r'"Bz"K'""" @'$""w @t'"rJG{ۺgr@ dBݰ*"-"&*d""&p"k{&""wd" {g+"""Kv"""`[uGr ""zJ" طt"F{r}+{"+'"++{&REb$-B'""Jwjײ*bvk]P UYzy$RRB@pVF$%p"' Dw"" **b*+"&"""'&`*jz'z & %"v'zbpw""*+p]te"JgBݧk"z'"""t+*rw`UGwzjGpMrddzUGw }W}p@w۠M{*+З]]]QTݠDeDpWݷ*rw`]]]Eн{ptYQjGgr&p+B+""W]t*WKFV PEw$rwg*"{kKk-rK*k ڷzbvbd"Mw{zr""rF TtpGuGMjwwwwb"+""""v }+wzr"r&םGBIA+YTyWtGpQU@]PU@TU]D{ՐUpw* PW]UY&b&ZUeDYUGwzkGgUW]b&""zt` zKv`bwuw'ҽ@+'$J""T`@{FG"+ ЫpKPKR }z" db&""ztr]G gt$+w{bb)&%""R"}v{&vWwwthB'""Eս+{F +k"""rk"rb""+"v '"{*-m+J""@{GUu%+vw$JF""rrt++*&r"'b+F&p$"+G-+׭"r$"Rz" pwkMuMijpbppMU*Gb"pZ[۴& w'fr"K" TUb"""juE-t+rDTwY""u՗Iu"Vu" u&'K)ҐP ]E]UI@}YPWUIGYE p{]UE]}IyАUrDTwY""]Uw G]Yw"bݕUz"M }+ """b"WUuw`rDJ@gZ ""ZWYyGEGWٕݙEUtJPUwWky{`YwUEU{RU}MIYwUJP+r }Ww)+peDP{םU pUUgwpw@YݝUDkpԷjjwwPUU""@Y*E}YQzuEwk p] wW"WzM"P "YAJW}UpWzpMW} }Y E}PYMYU]@U *YD wW"w UTwE}"}@"YpJU'"RtXtU۷U ]Z*wwwErzt}bKGM zEwK"}@@UK}} $"tvpWMvwQ pGp}ҫpb"Rz*"""F uuEe{&'"r+W]tPG{I&UKwPrKY}Q] K]UY[]UpDеm]U*""+rW"Z}'*pнYY}-{ """"$"""w*""b{gr`De"@'" pk"""bgFgD""""`""" "bb&"b"@kfRշbK""bb`"B""""$"""w"r""""""+"&'"}f"&"'`' f*bt"j( rT!$z""zg {kװw"r""""""""""""""+"""&"&bw f{$"r"""*Fg rz &""&""""""""""""""""""""""p"""""""""""!""""+""b""""""K' '""""""rz f"j"kb&"+b"y]Kv"r""&@""""""bbbb""Ԣbbk"+k"""""""""""""""J&r""y""bG*""""vg+bU"Z-W "r)""'" B"-""""rzGYAbjy"b"")"һEi""""""""""rt'k"""'"w"" """"""z$bz""""bGy*r$"W""+"{*Z]"""brIP"&ru M""""""Bg&Jݐ)""+ww{""""""""""'""""""r'Kp'"R """""W"-P"""""(ut Ut ""'"b"z"YQw"b""wpK}u"""""%"''""+'+*"&ײUJQ+brg&+&K"""Tfb"mz'{p"ݺx t"*G@+g@"wv"&"zw z dbppԷ'Kp$Bbrg&+&K""z'rgb&"""JU*""k&*&+&+"Wֵ'p-mYզG{ 'b]Jmb'*rxww{j p+֪d""&"Bzw"""""+"&v*"{" '[&"+GGb""""rvGZBgv"'+k+"b""p"""&""{bwg'b"&*+"Һ"grb"z"*- k"+vwU+$%"bf*"}{"{'*ztݵB"{'Kp-"G+"""&Gt{krWi&y"["" @"@"Mvp"'Bpbp'U '{ @`U]۠&r*b }zDtGw tFyztzwX PU rWi&y"[""T Yzw"""{}g*F'""""}g*r"T'F-p{w&""U]${K ]uptw"b"z ""z"'"w @j& W$' bGװztk&zWwQUHRUd"TWUG]'$"Z{Mj""֦j+{*&'wG "gpzw}z}{z}Dbw''{vzwz"ڧ PUE] tK} &"Pu]wwҽ}F" E}wv *@w}Pzwt  ݷTG{} ]D$YD]}}Mp jR`W  wwwҽ}F" Y] tgxgwpzJtz*&w*"r"]g{z@JP` rwݰKMpW UM}wu@ ']W]z*bPUG{YUzpJ{*G*G*"f]I J-rբ""$DIUW*ѽwD{jZt]GWpװ w ww pDT]Ԫ{r{G}]}M"U"rmutp{ ]wGwwzpMtpv" } [}Zw{ut]J+ptpM p]EDUE תpvYD]y M ]U *v]GE ]Mtpv" zzP kէuwww+WwwGwt tTuy-׷WTKrGW zժ}pwwWU ԵT ׍ݐ@ٝ z tpE+EWpqW]]]UJGڐ٤{gzMD *&g&*""JMz$"e"*'zzugpu-}JTwGP EAuTwz}w}t{W}JwtwztMUEUE br""w'wtUGAww UEw""""""""""*+'"z" p+"""Bzt+""J { " "" "YV'"*"`z{JVMkD t&G "Rp]J*RPw""""""""""pv{"+"J{wb""}w`vr""&br+Ҳg"g""""Gv&"+""""""r {++"׽G}'Kz-z*j+"""+[д&w'""utt""""""""]$w*&*TU"w[" ZUqz{""'Dդd f!uz&kf" ""-'"{-FJwmw z&"z FG @W"""Mw]&'"'"'"bb"PGF"" """"b'r$+vM"r""&"*"""G"$""""""""'&""""&""""""r""B""""{""+"&""""rE""&"" """"b'"""d'$""""G$""""t"""""""""""""""j""""""$ $""""'"""""*"+"""""""""""""""""""b""""""""""""""d+"pZb'""&"f"""""+"""""""""""""&"""""""""b""""""""""""""""" +"""&""""b"""+""'"""""{'""""""""""""&&""""+""""r"RBQҲ""""""""+"b'tBB*zz"yqdr*"PMMY&"tIGЭwJ }EZ]wGPD tD @z Ur'p'Ҡ@b'tBB*zz"PTUQzww Jv"wwb"Ettr-W&"""TUe"Bz֤R m' {zԪպzԻIu{MpP "Ru} W yTpp Vۭ{+"gJMz*B"+b+Jp]&g"]$)WU]zx u GDtzzG""p*pJ M j$"+@@TUU"{B"fp}Mt'Kݭ"r w*tw t w pz]}""I EDѶQ"@GuW{'e} FGTpywMEuUt{Z [YUQPywZy%EpZw pz]}""U[UD&KP"W "J"""PwwZGP$"twGgҧrݧz}{wYwtwzmYEgzB*"ו@]]UU{zV]UUݥwpw{w&&r*r'""pt"'r"B+uZ 'Y` @JYU]G Gvٙwzw'tYA"r+zrz"ZYy%I zpzp ww ]@Dו]r$*$"""*"rw"""+"" '""b'"'J*tB +F@*B -FgE+""r"F`"""+" D&bBt b$*""]r$*$""""B+""""""w'""""""b""""+Rr&`""}bp"""v"rr"*"r& ""*{""w"B""+"""* r&"r"""+"Һ""r$r+B" "'r-"""" ݲ""""&G"""""Uw-v"-"""'"w"+"" b"+"""*""+""""""""""""""""""""rb$p"b"""&"+""*$""" b"""&bg}bԢ'b"""""""tf'* "{JwwФ wzM+T&Wy p w r*'E'GzzpJPG}KW+ tr@tf'* "{JzwzKk} { תtzzw{*{vrY]BuZjrz U wgwJ}jvGGz gz}+KrDBd++բD]{B*"r{@w@@ ]}{w*jwb""&&r"""br] & """B x"Ztr$*נ{wJ"z JtPWUT @GtUG зvp{"&b"Ztr'۷{Ztp'fg{'rz*r""&"""}+r&tI"M"r `+"{Wz$JQb}"!rz}'""g'w]UwDT'W}&B []*r""&"""wuj+""gBUG"RqPt""+""w Tjbt&"w}+wv}wD""w@TՀY"&*۔Y$]D'M- """rr$ҕ!rz]PB'{'*+""Bv-""{b"rE-+Զ"'""-pGG*"rv"yIYMIuww՝z"g tzG@WٕU]zw"wwyUpGԭ@z"{""JYUTp&B"rzj{Ի}Y""*'"VeUUڤbvGvbbq$gP%fwB+fz"wtbB"WG+"zzGB}GD'rdw`BED}""*'"VeUEW}U]){Mjz{"fzwzwvj""""&"""""K&w[JzgYV%&"+++bv{+"*b*"Dw&+*v""&"j"""kb"""*{"jz"w wz$ v*"g""+"b"""brpt"r*"rk"""""wu"'""*" "v'w+}ttJwVG*Yw'"""gGwz{&+""ww`B wzw@ w*$zw@WЧ"**"b"$&""@""""""""""""&""""* """"""""""$""""" $$[]-"""$""""""""""&""""""""Br""**"b"$&""" R""'""""""""""""""""""""""""""""""b"""""""""""""""""""""""""""b"""""""""""""""""""r ""&""""""""""""""""""""-"*b&+"p""""""-""&""I`% ҧ" """""""""'""""""""""""""""""""""""""""""""""""""'bb"""""""""""""""""""""""""""""+r"""}*rj" I םW "]y }Tvu"z+e*wrw]K p&"B t }wGft Yprd"E}*rj" I] PEz{z]I t{]"" r" "+Rp"$X*ҕpw@tPw"+ yzw"""bЪJEr*+r{f"&@"+'"""&r+w*wrwU wBYՕU$"'*gw"&r""r$&{r""e+"* bm"`-r gzjdZw{ww-VJMKzwzu J"T&"'PtYk"+@KK{B@Q "'bK'td"']Yv"'ԠPwGwdp`zD{pwWPu]U`  dЕ@UIt]uD@Mt]]ݠt' wUYY@ݕ ] ХkݠVݰwGwdp`zEM}@j*W Www]}ԕuz}dYWP٧ p@}GM}j+&[ yP YYU}w@TٙYݗY}EYْpGwpww@}uW]U}uD@՝DwG"bG EUrJRMצ[WwwMWppuJwr@mM wm UGZ]KP @P P Tېt[}PPkt ygfwUt&&"""""rP-r""pWtzz&"g"dt"& "+J"F"*P$kvDb&+&"rwҐ FGJ}"RE""$"rPu *&&"""""rM@wUuD-b"'"w{]'@uzUt"""""r""vw{"g"r&"JI&rWtw"b"+"b+M""""rwr+b"*{w""""""+""r${"*}}UUuG&"""+"""""+"v"""bקb""""r"""'{wgkb""%UiGbfyb& $z$ GUY ""b" PV WE&"b"&br" $"r'*RJrrw"zbDw""b{Jt"$K{*B@wDD`w$"w@M-@p}Gtpw'DDDtw+rGFGDG@wpDDJtgw'pJ$*DDtDJDDw""b{Jt"ggG""F""w@Dt'"BtwpFw*GGwwBGpvzG""{t {D'""r@z}]pwwDGIDwDtEgFty'rv$JwrzD@wpw"rt"v""B"""br w&+B"vrFgwrrzrJ"rtrktwrw"wdtzD'pwG JwD@MDwF'Gr$wjtGDDGvJw$vdtw"*Bvw""'{tGpG$*Dp " `wtwpG'K@DD Е'EXwvtzDfw'qrgkzjtJ*Y@tUEWGTIy"BGwwGvW$wwGJtD Е'wG R Yلu'-Gw'zwDU ׍{zvJr '"vy'w`K"&+{wz++w}dwwwz"zGz*+{v""YYt"@tz"G+RU ]uzJ{}""!zzG%b{Dt "tz""w+g'"wwz{zvw+p&"""v+"wG'$'zB""uM fgrzw"bg{G"kw' zv"+"""""&"u""b+t"Ҫ"G$""""m*"&z"$""*KGbJ """"TJF" &rU"""z "b "B`'"+"""""&"UUPw$"""""r wv""Эzz""""""wvBtGD"""""ЦBz-'"""""*&ww}M"+"rw'kwt'rM""""""*kzwG$"Y E"""""""j"'""""""z{"Gwt""""*tgp׭"""""&zw*k*b+ ۤ"b""""'wwwwwU}b&""WUU-""""""wzw "bmԲG""""""B{pM`k{"Dw""b{Jt"$K{*B@wDD`w$"w@M-@p}Gtpw'DDDtw+rGFGDG@wpDDJtgw'pJ$*DDtDJDDw""b{Jt"ggG""F""w@Dt'"BtwpFw*GGwwBGpvzG""{t {D'""r@z}]pwwDGIDwDtEgFty'rv$JwrzD@wpw"rt"v""B"""br w&+B"vrFgwrrzrJ"rtrktwrw"wdtzD'pwG JwD@MDwF'Gr$wjtGDDGvJw$vdtw"*Bvw""'{tGpG$*Dp " `wtwpG'K@D"""""""r*]'b""'pJ"""UJ"$"t"B b"U&'Bb -""""}AK Iw"W]&fK-"rzVH"""""""r*M U)g'""&"R՝w"p""""""r&"rPUE*"r+"PQhz{"b" "' """+t'U+vw-M""""""+""tM'b"ԕU$""""""t""""""""Fb*" U""""+'"& PU"""""wYhTpw{H{&J{"+ТMDww""wUА]@vk""+G]-"r ] z{j&ҷQ wDw""b{Jt"$K{*B@wDD`w$"w@M-@p}Gtpw'DDDtw+rGFGDG@wpDDJtgw'pJ$*DDtDJDDw""b{Jt"ggG""F""w@Dt'"BtwpFw*GGwwBGpvzG""{t {D'""r@z}]pwwDGIDwDtEgFty'rv$JwrzD@wpw"rt"v""B"""br w&+B"vrFgwrrzrJ"rtrktwrw"wdtzD'pwG JwD@MDwF'Gr$wjtGDDGvJw$vdtw"*Bvw""'{tGpG$*Dp " `wtwpG'K@Dr&"w""B$"M*{Q*Yp)"r*bxG$JQq"&KpZّYIpTUIw*w!"URyr&"w""B$"G@uw'b"Qz"Qp{w&Z}I]""{+w PqWw+""rY Yu]]YpY"f"z wwxGTW+ ""+Q"+uMv"B"@ Y'b$]DUYYPUQ}TQD QY} DwG]]]Uzww"rbwב!"ۙ]UU}}*"}QwDw""b{Jt"$K{*B@wDD`w$"w@M-@p}Gtpw'DDDtw+rGFGDG@wpDDJtgw'pJ$*DDtDJDDw""b{Jt"ggG""F""w@Dt'"BtwpFw*GGwwBGpvzG""{t {D'""r@z}]pwwDGIDwDtEgFty'rv$JwrzD@wpw"rt"v""B"""br w&+B"vrFgwrrzrJ"rtrktwrw"wdtzD'pwG JwD@MDwF'Gr$wjtGDDGvJw$vdtw"*Bvw""'{tGpG$*Dp " `wtwpG'K@D"r$"""""""}""'t"G&w """vp'"dzpJ"$r""*z bw$""""DW Jv"w"r "" """r*"r$"""""""pЪ'"""""zBwG"" JG&""+""rw+{p""""kwBr $""""r"*jww"$""{$rvzrr]E""""""*"rwwG r"}"""""""b"&'""b"*"gt+k"wEtG"""""rg+g*Gw"""""&w z$&**wup"""bzwgMtk""&] "&"""'r'K ""'gDDr """"""rrvw""B "r"""""'r{z*""b""z""""""""rj'&&"G&b+g+*F ""+""""""""""b"W'*R%""""""B "r"""""wr'f"""*""""""""+"""""w'+J{v"v*"""""")""""""""""z'b""jk'w'""kf'"&b""&"""""&br"p'r$""+b+*{w""""'"""*z""r{ wf+g""""rpwbw$'"""""""""""""""*b""""""""b""j*"+""v"""z]q"'""+""w}t"""{+R%+""""""""""""""""""Aw GGw}pD'zP` KYMY}]}@}MXy}נpr w U p}tpZGAw GGw%w@JywpGBzGUtUН[X"{f"b"* E ԧp@YTZ+љMַwWMىy}@}wPbwjwpQYw{j'UqP]iw z@ Љ״@zq`Rt@wwwwwGt '"j״J UgЛ"'rJtxtwtpDtUwfzw"j{'wGG"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""B""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""B""""""""""""""""""""""""""""""""""tqMGpj"$twzzG"WgRErw "Mwzg*P٧DtydWGwg"Brz z{G'Jzy$&dtqMGpj"Fz frw@GHbvzw*{wzw }ywzwKp*"""{u&U$w""&""""'w{w& dtzz'B"zzwr&jvrb"z PUW-gbDtGw"fjw}tUuי]yzJJwpb"+T{izGt-"rt{wp"G""+j"gw*r"wjzfv*k+"""v*wwG gr'r"&rp{wYyw+"yp}"""+bb&"""*"""""""&"ff""u"R}&G)""ruA*"W"zIw"w%&u&*rT%""""TwpJ*Y*""v%"gg"""""""&"UY&"++&"ݕw""P Tw&b"&"""r'p""b++W[A}''""""*"w'zPq"+"rgr $rKw{$r""""""'+"r$&UYrw""""""""""""b{+"bJY""""+B*"*+q"""""p*}dzwtwtPwwjwjz{ prww*"''՝YU'"""""+I "Yݍwtwzk"""@wzwf"""""""""""""""""""""""""""""""""""""""""""""$"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""@twP{pZt}twyGD}ڐYЕY}@UUYUРPP wQЕIMPWY@twP{U pj' QQG ՕёUTDGwwDtї ]$ZzYٙY] M]ّ]MFG@GוYՅY]G{@kpRuGwwTY]YUM @uWtUP] Ր]A[tp]ՕPt}Utׁ u ]UW I yYuG}@٭]"r$*""&""dDb+""""f""""rj""Bb+"+""""d"p--V""""""r"""*"bKWwF"b+j""""""r$*""&""wr "+"$ "v""""""""&"k""%"zr"&""""""""B)&""""""""" """"*'+"""+"'"{**"""""r""""r"'+r&"""""pztk""""""&r'k'"reb'""'""%""""B%"" """""""+""""""""""""""'""""b&"g"r&"""*"pzw]%Jrr"$"`""P ""&+j&""""""""""""""""""""GRd" *"}dv" w`'"J*]@'"RYMyPIz`wG}jwr'z'tWttP E $'I*R@*GRd" *" %rd b+&wYzww"Gаwz`KT@UQU]Ef""u tBwb*"""""PI]EtpݱgW YݽҷM]VwԷkbgwzwmwG ]d&z*""UvMPYUrkvbDQv'wrbrJw)%rtwg@M Up-"J@{p] UWP+ v "{t]tw$IpKb'++"""r" j"w wwtzg@rzrIg)rwGrwj{&"*GwGAw'kwzwd"BzJz"rb'z""GGzw wwtzg' Y]I+"jjb+z{++zr*"+"r*""z"w'r"r{rwG"&b$rw'{g*"*r"b"f""""r""w{zw r$"GwGWw"pgzzwzb{'rg"b"b"'""zwrw'"&'"""@pwG"rb'***j*rb&{j*zrr+*J""""b""ww{+"b*rb"{wwt*&"""f"""'"{t{K{zG"+zv"""""""""" """"}"Rz"""$""""r}"t"""F"B-b"" ""M"*b$ """"rwPkrw""rWG""Z$""b ""@"R$+""""""""""WE]'"+""""BPw""G{"""""""""b""" p"""""'rJJG''""""""""""@""""""$"r}v""""r" 'Tw""""""""""r&"" Gu{p"""""""""'""""""""b""""w]"""""""""u"""""w}"Uw%"g&"w{w'r"""""""""""'"wGZ]wwB""""b]] ep""""""""" '""gwGb"""""r-]t$b""""""""b""U+"""*Rw&"$""""" +""G"r-b""'""U"+r"*'""""TU}b u""-""$""R-'"""""""b""WU)b*""""@PP"}uww&""""""""""tw"""""Z-Uݤ "*b""""""+t}""""""$"r "bbb"`*Bu""""""""""zw'""Y]MPU """"""""*"""""""""""""""""""""vw"""""iu"I%b]@mr""&""""'""w@]pUz""""bwU] }"""""""b" p'""-w ww"r"""rgY-bv""""""""B"""$*RwT'"""Vq "]'WE" "u& T ""'"rGZ}PPKP&W "v+M$"""""""B"UU$"&"""J ݪ"UХw@w"""""֤ w pp""b+bw ݷ-""""" *-y"$"rzpMt+֧BY%t""""""ڥbw$"UUw*""""b""""""$jݵ ' tP""r"z}dD""r""M w`'f{@@upz"" fb-pGPY @p'+U@ԕս'j+""wwYG "v]]"+""BpMG"ѷBw*DzQ{Wuvvx+DAvKKM"Z+&)'{ tjzv *uuv"rwzzwwdJDgGwt"rzTwwѷBw*Dz YtxwwUGvא&&fB"wb+&$r" BtjGb{vwK"*" FI""""w{{y&"&r""&{""r'"&+B+'+ t՝wB@pijw&"&"r'"b""$+"g'bbf"g'b"RWg"Jr'jwwjg'rrvwt zv+""$+zjtz* vGr"rwDUw"'"+jt"r+"wGwDvx"+wwwK""""""""""""""]'G*""*""""b& """" """*""U"""J"'""""rf" ""[+"W]-""$"" """""""""""GЙ)"""""" וG" *""""""""""*"r""""""jr@$""""""""""z""""""*""w"""""""r'"""""""+"""r*""YU@y]Y'""""""""+""""""""b'""""*""""""""&*'"F+"""""Q &w'""""*Է'"""""""""&"w"&'"""g]U]U"""""""d$"'zWrKP""""""bu'"""k*""q'U rjp]t"q ]EEY bנr]$} pb$jrwU]QE 'W%"Qk*""q'U]uD-""՝p+Q]rg+ݷ۽tTuGw*gUۘ "r` WٝP" "MݒpW IM"&&&jtBKEtrM]Tyw@""+F'""r"'rGMZ@zr"*wG p}w'Ff*IUI YU]U ItMUt* }P]]G "r"'KM%"ԑQyzpٝ"""""""Bw$'j""tBw""w"+G{""p"Jg*"*""]**jr+""'"rGvwr{vw}D"*"$"wzrj"""""""Bw$}DpU'"*&"{w+www"""""&""+j"+"r'" bwwgz"b"""+z""""b{*v&+bf"w*r""""""&""*{*""wi+r""""b"{""""""""*""z"+"b"r"""+'+''""r""'w'k+"r'wt""&w"B"*&w*r'&wtwwG""rG{M"b""b'w'"'zrvww{"bF&"rrww'+""""""""""+"""$"b""""""""""r""""""""""""""W"""""""""""""b"""""""bw""z$"""""""""""""""""""""""U)b*"""""""jt""""""""""""""""""""""""""*"""""'"""""""""""""""""""""""""""""""""""""""""""""""""""w"DU)""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""b"ww""""""{wvGw""""""""""""""""""""""""""""""""""]IY }B ّ@]tTu uv'}U}Y@ѩ]]Yy*r ՔY HtyyG]IY }BP%V}xwu JUwT]P%JGXPg brz'&`IPwՅٔjDY]ݧwPvrY@wY kBup ЕrgAvՑGҐt}Ppҧ E UTp]uj&Wzݙdw{'P"+wUpEt} ztDgqw%wwG""""&""{Tw""vצF}&"z*"{+KJ+&""b&&+"""bb$"b"""""+b""r&b+fb"@"rw&b""r*k""""&""{t$ivg'"b"fzwm*"gbJ}"""""'""""r"""j""b" gvJ""+"""+"+"""""&&+b""""b"""r"""""""""""""""bb}wYUw """""b""""&"b"""+""""""""&""""+"""+""&+""++"+""""+"f&""b"""""r"""&"ptJzb"""twr{ww"&""""""r"""kzb*&*b"""""""r'@'r"jRww"""r']w"'K " "@+$ J""""rGא G }B t"bD "rP """""""r'}zGt'""'"Mݧ& wwb"'""tr"r""ݽ*"B+"GpV]}JJ""'"bwtM"&"t}D"wB{@%""""""""""Jw "pDDG"""""+""b""""""""rM""""""+&'@+""""z]] tkPy wGtw +w w" Dtwb"""+Bz "r }V]Uwvں չzk"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""B""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""B""""""""""""""""""""""""""""""""""""""""""b"-""{rBt""b"""""*z""""""""""""""""""""""""r"r"*""""P"rDq"""&"rg"*"""""""""b"+&%""+""+t g"d"t""""""""""""""&""""r""{w'"k{""""""""""""""""""""""""""""""""""""""""""""""""w")"""""""""""""""""""""""""""""""""""""&"""""'+"v+""""""{"*"""""""""""""""""""wY """"Gwrzw""""""""""+"+b""{z{""""+"**"""""""""""""I"""*""$"""")&D"* &׭ "R$"e"* " """"G+r`"kP frP""" "@"r'"""""""""" z$"""""B }""pt """"""rpx}"""""brtt *"""""'"*u }"+"rrM-{] "rtmu*R}$""""""r"rw*"Y "f""""""b"'""""""*gu$-pW""""r& A-"""""&wڪ'*"""$Gw""""r""*"$duGUԫ"+&"w ՙ &"""""rGp "PK""""""rw"G"b "&""+"&"J M+R@*]-"""BWM "r@ Y"-K"pv-b&""}pY}jWUݫ" )"&}'b "&""+"-"""p"ME*&+]JWE """"tp@m""""r"}GWG Q"$+Gz uYY }VY"&""ww@ $KY]+"""""rw'}""rk-@wD W""r+zG-ݭP"f"""jZ]ݽuw' pzgzJ]ITIWEU Gzbw PU]P Eg""rMWu%"M]KzWjf"&""@U}Gw"""""b""b&"E""B'*R+{-"""V"Bt*P"[%bjy" B-""&"WЧנvzp QU"]%"z &}g""""b""b&"]Tz$"""""tU'"UU+"*""zYMuXU""+"bU{ Rm-""""Bd Q&'"KJiٷ p)}""""""ڹ]-bj]]{{"""""""""""""]u ٕ"""@TYՙUE""b""]t'zuۭG wjv"rrgzqHYy zwpbU]T] "j"""zWU]Y%"zM]תT}*""""J@wB"""""r'"E*" &R Y(""Fu&ZGY؅"z{M*׀G h""bI@@UQpjGPU&)"K`MB"""""r'"@ @"*"""KYf"p&]}w ""*jTwp'"""w w+k@@pw}rb""{&gK{} ]PzG"rv"""y"f"'tww{׈"dF"kw&""f*@]ptGwDwpMDU{t]@ DQ]ԧ{kwUYpI`""z@@)"K]UMW"""B pG F'"z"fFg"M*r @$Bt]*"rrp}* ]udJzM* u]z'r{B}pw @}P g$"M*rz'F'"z"fFg"%t'"""zw "tG wk*]TM]fz""w+G WrJ{+r"""*Y}PWIpMe ]RdDwP Rr"&fJGWհzdJz]wj"'""&r-"rҪ']EUuur*"B"JgՕr'zrj+{jw}$trwwFzfr } tD$"wpwGw}tz-&rw&Yr$"@]w&"&"rDwzw"vv$+"*B}wTpw$&"*zgݴРu'Gp{wdwp@wg'KGWP E yzZE@t-bдJ'vv$+"*@pw+"ԧ{}zЧ}tE{Upbwz&wG*v*{Тdb"w@z@U`zg""gkIp" &pݻwzz'b''*vrz t{wYАЧ}w""*t""r+bv׷"r "***z+''wz{bk$Kppp{Ezvv{jwp@ g twzw PZם+"$KF bW D{"v"J"rr*""""&j&G+w$"""$"rjGpw" fu+p '""""TJ}"v }jWG"$"p&B rr*""""]Wm+&""zvb"ՠ}{G+v"&"{&pwv""""z Mr p b&""B"j"wwM"'"*rt'w{zKJzd]p"&"b&"**+{ fUYժ{"""+&"""*bw'f"rjr""+v+j-w"""""'{E wGb""wRwr""b&wr'z@pwwwY]]}wG""'rj{D'"`*zvw""""""pM "w Utw`wwz`w rD}pmw*p$tDK$* DTDpd* pYM'"r&z+"M'GDrKw Utw$P]}w'"*'"r"w}pbbb&""Gw&{w""rwkr &"z'z}f{"r*""{""}Ju[r{['-"GTpzG"Y yGpwG jbrz"""z{p r'b"Qt""j""""'*k+b"b{'rr"+b""""b""TW+&"'vr"b&G'"j&+Gw"$*brfJv"&rrG"""""""""" """"'"r"""&""""R$"'""""rG"$"""""@""""""w+""+""""r """w*""f""""""""""""""W{&"""""""rr+"""*&'"""""""""u'+*)"""""""E"""&'"""""""""""'w+""""b"'&k""J **"}w+""""""e$""""Wzg"'"""""""""""""""""*+-"'"+"R"""""""&'me&"""""""r"b""""""""'""""""""&""+r'r&brW""""""zR}'""""""b$b{+""""v&"br"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""B""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""B""""""""""""""""""""""""""""""""""JtwEztP TwwGE]XyzIP] եM}Dywww ]UUG]pA T}*PJtwYYu@PY@zGGM]pPwz Gw @fw p}wt]zpXEһUGzGٝQ[wpgTjgz@rwСW ٕ Tղ*zDz$׷@tԭrr p GڷIpwADwwGw}wpUPuE yW Qp W+GEMU{pww{tR"-tpEP}*G פ @AYXUPuw""""""""""u"""" "r&"'""""b'"D"""""-""'bbI""""b'""""B"+""P'"Z"""r """r'"""""""""""G+""""""Ҧ """{g+&""""""+"""*Jwv"""""v"Bp """"""""""""""""b"&&"Wz""""+"""""""""""Gz*bbGUU"""""""""""""""""&"&""kwu}"""""""""++Jw"""""{Gu+"""""z+""""""""&++{"{}R]'{""""*{}WФYU!+"""""""$+Bp+""Wr""""""rG'"""""""""""""u"""+$"B""T'""""'"""""Jt"R*""%"'{*""""{{"*"b *"BT"""'"t"'&""""""""""u'""""""""$""""""""r`'g*"""""q"rw+"""""b"""r&M"""rw'}ں"rD*"Wj'""""""q**z"""Օ]w""""""""F""""""""*wwA+$""""'r"`qz{'""""""kr+*""""*j'"""""b""*"*'@m 'r{Tb""&"GQ tpY*""""""rtzw*"$"rB""""""+k'"f"+"&"}]B{t@}*" Py]"rpU @ J}j*FwVWwPuwW %"BJu+"&"}]M]M"WDgYUב"${"'zUt"Yqr"$rz P"**wJ Pw]T D{[U b"""'b "rpTrpݐ]UMG""+ 'p""B""bgzڢfB]r"""*k*+$UukkWDqwWwzUw]}]w UwwPw]gkr"'Bg%"BUWzJpx]zzGwMDt}MGx @Tu'{ pr w*XEYuݕ @}MtYUq]wgIw{I]t Uՙ [zGwMDt}G%tDuDtu ՙ-T%'pp'"'ZX] GGxQYҪG YYקw]{r}u]]Iw @} P{ GpG"+wVyMtЗ]јYrd"[К}ٕUyzwpwD}Wp@uwqrW]tww }MZp} '&zwtwYՕ]}MԤ]'UYYyzww'ҝd p"""""""""")"""" "b*""""""""""r"""""""""""""&""""""""""""r"""&"&""K "$w"""""""""""""""""""""&"*!"""""""" """"*"""""""""""""""""""""*""""b"""r""""""""""""""""""""""""""""""""""""""""""""""""*""!"+""""""""""""""""""""""""""""""""""""""""""""""""""""""b"&"""""*"""""""""""""v&G"""""r+""rw""""""""""""""""""""""""""""""""""""""""""""*""m"w$"F)""""%'E""""")""}rvq""""%""""Pr "&'"+Z"""%""u&R """""""""""{""''""R&""Ttw'$"""""b"""bz"""""[rRw'*"""""""""""}"""""""""@"b"b{++"q""""""""""fwwrvAb"""""""""&""""""""""""mI"""b""b""j" """""}**""wT"b"&&"'""b"""UK"""+"DT!""""""""+" '"" IEwBb""""ٕ "b"""&&"b`{v}+""r*Ԫ"""'r""B"*j"'+p$Z b++B"&&bj"FbJpK"D+""""""&&"bw-++w+׷""""""'+"*"F)*r+&"r*""""rr w*"""""""bGk+v*"k"+&'r"+""""*r""+vk`Egr'""j"'zt"+f"b"Bw'b{y{-k""`"""{%bw$&"b+"$""r"""*"+"&"r"b""*+wzr*+'"""*DwЕ)Gj{"$ՙ f"""bD'"""b""""""""b""""""wtppw{} DzGwtDwt[}ztMy פ-wM P}m] P"rzzw ]ݠ-ZwwQwzwwtppw{G-ztP{gwwDwzwztwurjwrzr *"&{GէG{b{Zu +yyzz"zJyzd["bwpzpwwz{W`"wMD"է z}}pwtZ{zyb""ZZtiF wzu'rkp uw&"w'{f{www{z{kr"""kkW]TWz"brj pT}wקgwwQw{wg*{wzjz'{vwwz""""""""""d"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""+"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""M"""""B""+$""""r"M"""{"b$"K""$""E""""$'""""Gtr""rG""T*"""'""@"'+"""""""""" @'"+""""wv""pzgr"""""""""""" wD"""""w* J''""""""""""""""""&"btK""""b"*+"wG"""""""""""t+""Wݥ"""""""""+"""""""""""""w}"""""B""""r"""""gD"G'"*j"b&B'""""""""""'"w[@wB"""""{ Wt Dj"""""""""vw'""ggVKJzb"""""w'"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""B""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""B""""""""""""""""""""""""""""""""""""""""b&""""&u"R}+G%"""bruM+"DTjwu@W"%"u"'rT{-"+""RUGMzw d+JWU*"B-"rdҭ'""""""b&"U}$"""""bpUw"P]Pw+""+""ww"r&rY""""&Ww t*"*""b"`+*P "'"kr'rU +rvۧG'b""""""'"brwU "Ur{""+"""rb"G""b"""r+&Y٢""r"'rk"zgZU """"gpzDww" Dtkwztwק{UUpw+j"rwtՕYU+"""""'zpW "rE}PVvp"+""B}U zw"z t G&"'ptg&bjb{ "p+Rub+&vg*+&w wtwp*vzw*"k"Fb"f""BKj'B}z+&bz t G&"rt'"rڧD wp&"*b""""f{kw}g׫w*""b "U'z"""b"&"fGw'"""Gi'*'"b""""""ztzp{z &" wtv"wwwG׷wwzz{w"""kwZp-rw'"bwzw""v""&"""&-{"""""&&"*f"b"++"""""pPm'b*r""""{zZwwDj+'"zj""""bfb"""""bb*""""""""""@K'"""+"r """"`$}""""+v""DbK"+"F"B """"B z-'""{"""r "b +d+""""""""""}t""$'""rD""@G+"""""""""""G w""""" FBvM'+""""""""&"p"""""""bPp""rr"&"@}"""""""""""DGbK в"""""""""*""""""""""""wt@""""""""" "p"""""z}j'"w&M]"""'*"""+"v"WU{K"""""wGU """"""""""G}'"bD wЫwRbr""""rt""tD wUGwwGtwTKPEtwMtupwM׹-PQ} EY׊Qtդrwww]G]tvMtpqwtD wTUYPqtwwwwDwwzwwU{w{DB " U@wtpwKUyz{wwwtp`wwMwpG*t}x+]""TyGIWQ]www p GԠM}wpvw׷ygݕqJ]vwwzEQMvrwjf{wwwtwrzwww}ywGtwzzwwf"+{tPt{&{$tҧ wwY] Jg@wwwww-w؉wwg{www""""""""""p""""'"r'""r$"""""g"p""""""'"""'"""""r""$""""Dz" """'""B*"""$""g"r$"""""""""""{p*""""""b"r"""b'r""""""""""""""G+G"""""r&G*""""""""""""&+"""""""""jr"""""""""k"""""""""""$""" $b"""""""""""""""""""""""$""""""""""""r"-""""""'"r'""""""'-'""""""""""""""Bw&"""""""Gw}p'""""""""""$""'"r""""""""""v' """""""""""""""""t'""""""""R%""""z"br$""""u""-""""""""r+"'""B b"*""J$"k"*"""""""""""E """"""jwg"*+*""""""""b&"""%""""""""U""z*'""""b"""r"+wz""""""'&""""b"B""r&""""""""%""""""""UUYzt'"""""""""""""""&"%""&""""""""""&$&&""""""'*""""""""""z*$&"""""""""&"Z+'rGt z""f""p]]w""""""g+$"+"r""""""r"j'"""""""$""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""*"""""""""""""$""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""'r+"B"""""%"p"""j"r&"g""""""b*""""""b&vj"+""vd""T ""+"""*"""""""""""]%""""""BzG"'&+"""""""""" b""""""""[""}J*'""""""""r""+"""""""'""+""""""g"r+&"""""""'""""""""UUE """""""""""""""""'""""""""""""""*+""""""""g"&""""""{''&"""""""""*""'*ՠ@w+""""] wM}"""""""*&+""+r"b""""""r"*"""tzwttpGtYW׭{zrpGvd׺- z}GDg+GJRG}w*"r"{T'ں G`ztzwttpG@'wY]w+"zwݻjz׻zrfb"R+""wzptkwfvwt@z*$&'&f*w"rR+""R""{vjrgV+)"{GD@wp"pwPYYw{*kr&bbf'"""{{g r+"utw"bf&b*"*+k*"j"+v"""&b"G *f}rbbrGb'"{+&׺ z&**vzw &kr{zb+'t"Fd""u"bt'"r&""""K {" *VD+%"*"bErG` R*"""bBrj'" WG@z&t-rr"$+b+'t"Fd""mg""""Fw*r""'bz&b-"uT&""P*"""""԰w+"""'&""""r*$"]"'"bjk)K@tv"&**"""""r+"-'*b'"bЙ+b"""$B'w""-rbb-""I"-"B"B}%"&'$y""""&"b&f'j'*"""r&g"""b+ "Gp-W'"&k &zUww@w"@w"$r-G'rr&"rr&"""""""" *"""*""""'"*bjp*p*D-"""brM* 'rzJw}z" r""jzJ$""""w pf }+ZU"$""+'"*""""'"]]'*""Fww"ppw*'"+bprrPGD""""&פp "'""r"'&&zwp"+"'vz'{ t{rJjwrE""""""*""GW'r"UT Yw'""""""'"""'"w+w+"{t}"""r""rb+++zGp"""""w]W wwkb}w}{"kbb&k'UEpz""{YYU]u"""'+p$""'PGw"""""k ]r"t@dvppXGJFMzDkwM'q mzj UUPDpuUyDеPw&B Dw z٪WѷGtttdt@dv-GU ]u w{GDՕuAvwz]"vt'`""Gzw@jw@ }pڽ&zݪf ""U]U}Uݧ&PD} "t*UtwDW]Wp{{Gb+"!{٤*B]Ku*z׺z*zj%w wGwwwp{Z*g*"&+{gtPT v'b'rz `+Gtwvj"v+ z"&z&`zt*""""""b"Mu*"rr"'"ib*rW'""+" ""r""P%""""br""'&b"rr"$""""B p""""r'"*""""""b"u"G)w""""wx'"'bw"""""""""""r"""p"b&&""&{'vG]w""""""+r+"""""""'""""""""*"""""""""""""""r""kBUEDP)""""""""""""""""""&"""""""""""""*"""'"rb""b""'""""""{r" """"""""""""""""*"w+}""""GҢ"rקtp""""""""""r""r"zk"R''"&'b"""""""""""[%r""ݫp"B"&"""*B *""""""""""'""""r""""r"r&-"""p"X"""'" g"""""""""""'"]U%""'"""B]*"p""""""""""""""b""""+""@*fz'"""""""""""""""""""""""""""b'"""""""""""""""" bmK+""""""""""""""""""""""""""""""""$"""*""""++"R$+"&"b"BR"'"""""+""""""""""'"pz""""E]Rbr"""""""""$*"""r" w{bb""'"{'""{'"'"z+"E+`pfw*$"*+rG"U]]թkT wGu{u v*vwD}+P%v+r'{'"'"z+"Puz*""z  wzf@zw*жDu'PMEZ ""}Tzr *&"""ַ WpIY kkWI٩ }ٕzMEkb*kFzwuP'wGٕTG'&""$} "bڧzUWwb٦wwutu b"+k+Fw}{w*}zзYE%rgp]w qTZuvJj" Z-vw JBJ}k""""Bwݰz"""""""""""-"++*""""{ """""*"+""J*`$"""" "'{eP+"""""&r&""'"""R ""r}'"&"b""""""""""""V`b""""+""k'"""bf""""""**"{ $eg*"""""""rb"""""""""k* &'"rbz*'b*G+'+b """""b""e'B*"""""""""""rB&+"""*"b+Jg*bg"*"b"r") r""""""""k"""&""""""""'"""""""'"+w'+"&b""b""UYt}B""""""ukv'"+""""""""""""+""""B'&"'ݴBpwwRP} ""*v]u']Kw'v'G} j' Д zZP U f%"r]'B'&"' Muk"w Wݧ'I]}" ]* KEJE""bwUUPսw'"""JgUU"*& פFUUw]wzGWݦ$b'f *{BvUݕЪJ""f{'p""&*ݪзv"}F"++צ+g'Ppv"+)ZpUz+UE {{{gG pMе }ЕMUЪ@KYUU @+&"קP%"rհݝUv"ҢuPw"{w*rGw׭" vqguz`r*Q GqppXPyzG{U] Uy`]mbѩp{w*rGw׭"Gw@+wWMf uDY]qGU&w  zw+""ZXP@Aw НQYy[ {ww]ّqpp J{{g""ՁzG @}ԔU w{tPwYPшԝTU WؕQ@P] PUPj$z@+Vweb׈Muuu*fwQ}"''g""&"db+"Fr"""+@r""rdG'"$&"&+g$zk"""bBr&" "@bwwwB'rf+""""''g""&"$$&"v"&""bg& "G"*"r"b""r+""""r $w+"""+"""""B" &"d"'""&*"%"**""""*}"""""&''&*"""&ЫBz&"+'*K+"r'b'"b'""`"+"rbr'"'*'+"&"""*"&&'+&+""b&r&`"b""b+&{+""+g wGw'r }V"'rwwj{f*""'tB'r&""""b""""""+""""*"""*" '@$+ס٤rb""vp Ufp&}"t'r JGw""g&rgwG @T @!*['"Ju*"""*" 'ݥ }@ 'Jrw{P*t}zP"*""w"r&bT""'&(b wUGUU"bk+ gw"+"zw B+GpwP{zU-V{&""""""rB''r]E} '""+G""r""rb z+""b"r&'rz"'`*'r'"rf"*GB`wpk`p pJKk+****}G] Օ"+ w}jr]vzpD"r"+rD'"b wIp{rGfw{׷Uw"""""""r'm""zArzprv""z&T+ Gb""*+j"b*""*&+"""*"vzBw"w*"B*" g"""""""r'}tq-'*"rw$wkwpb""""dv"b""Bkb"*"g"K"bwwװp""""bf{j{"&""bk+&"{"""+v&b""""""&""&b*"" z{v*"""b"""""""""r""""&"""b"+b+""*k++"""'bv'*+"&zb"k"r"+&f&r*"]Gw""jrw{P&""b&*"+{rwbr{w'k"""""""b+""""&M+p*BG ""b"rg """z@"$"""*{"B-""&"Bw fҰb p'b$""J "r"Bm+"""""""b+"%"""""bPt*"w*"""""*"B'pr"""&"{vUTm """"r"&"'wݧ"""""r&Bt"&rw$ """"""+"Mw*""U{+""""""""'""""""*"r* *TP"""b"""&"jt-""b""MjGW'+++"R&"b&""*'"tBwGYw'v"""{t]Бxt"""""vG'"rWzzG""""""rzM b""&"""""']'"wwG""g"rPw"dצڭ " r&]*$rвK""""rD[ZXG IvWp"w-"BpA"&"""""'u} $""*ݐw+UUwv"'""wv"r+fBU*"r&"uBJJ""" "GM"+"]*w z%[ G""""""*"bGw$r&MԐ]v"""""""b"""&"r"""rE""""+*"+'PY+""""ݫؔwwf pvG}D&'tUPT wb"b"'rJW-"BmtZJvzjj qGԺzzGv}U wwwzJ rwjwzwGշtdm kKvw]ew Jvz*wG"vw{Kݷwq@{w*{G wzzGv}YY%UYE p{zz}{G++kvb*""wqwwzwzww T+$g&f`&kr""R""kbf&'+vw]ղU]UUd&Gkv+&r&&"b""v'r r'bbrw"fb'j+*jgfzvwwG+k""&gbwz W{*{ErwBwpw" wwkw*ۻkwwjJwww+{gwz"""""""b""""""u+Rw+" """"rp"Y""" " "b """''b """"BtԙebdP""T'""v$"&R%+"""""""b""ZM-"""""" Ww"yww+""""""""r"+"@"""""'wU-"""""""""" p""""""*"r@G"b"rbt$rMp""""""""""{ *""]wu@+""""""""'"""""""""&"{PB"""""""""+ p"""""*])w"PQY-"&" ""j""z"WUDw""""DPU }w""""""vkp'"dҐUb+"&""rYE)"""""""""&*b"" B """""""" "G""+""*"d""""""""""""""""vw&r*"b"r" %""B&"rK'r """"""""&w{a*""&"'Е+ """""""""""""""""""" ""JJw$""+"""""""b"""""""""""""""""""r""""""""""""b"""" GY!"""""""""""""""""""""""b"""""""""""""+"""""t'"r'"+""B"v'""""""""""+"b""rwjYUMD"""'DJ&"""""""+""r*wzB""b""""w'"""""""""""""t'""e"Rg'bv)""""")+E"""R""i"bB""b")""""Xr-&&'"$T"""%"" +$+""""""""""""''""R f"" twk'""""""""'"""""RE +""""""""+"by"""""b"""p"""r*'"q""""""""""+WwB""""""""""+""""""""""" x""""""""'"Z"""""k+)$"b&bP"""+&"""b""r"B"""$"@(""""""""k+G'""ٕR""""T "k""""""""j r"" Z}""""&b&P{""""&"b"""""*"b"""d""+"rBf""bw"Ryx""b'"rԤm+"""""""jYy@-""'"ݕ @]}""""""""""""b""*"k"vh""Wי%fw""""""""r"""""""""&b"""""""&b+""""""""""""""&""pYk{+"""""""""""b"""""""k""""""""""""""-&""")*"'ff""VZj"""""""b"""""f&+Yww""""]UUz{"""""""*"r v"W]"rbj'"]$"xU QzU]Wz@{}zݥAzח e) UuZ؅i&r G Bw]pGQqZxU Qzב)Quwz{JYQ{rr*"wMzvPKwۭz]GwGq&Z}ZfbD""]ױ[ f&wkXYYYPutw++"QHz!r{UѺ]wbzzu$rwqzڥ"""FwPM'&g+ҧbt fGtv!Q yGgGz '""""ubrd"*W'"+B$"r}UWu%$wpթ]$r'fbBw"]zwP{+W-Gp"g+ '""""Zi$&""MGb"w*"ר-yqPM"&"r"ԩz+r"*"""""z}ԩww"Zy})pgwIz }+""+'{ס]pwt$wpUG*'"""'t"wIW[}WpPb'{ yU Itr"wb&f"r '&*vgb""pgzU}E -"+tzwwqE*z"{wE wP Gwڢrz'&+""""zrgk""""""""""f)r""r]rw""b"""""{"r """"""""""b""*""""""""b"rv" """"Wp"dt""+"{*""""""""""fgb*UU)""'""""wPe'+"ww""""""""""""""&""""'""w*fz""""""""""""""""""""""""""""&""""""""""""""b""&vi{'""""""""""""""b"""""""""""""""""'"""*""""&+"r'&"""r"r" """"""""""""""""""wwYz""""GGBbGw"*"""""""&*"""r"zwz""""*"*""""""""""""" """""g"b{-""""-"""bF"b""$"y"""+$""""Yԫrd"bF*"*W$"" """R'+""""""""""g""&"""Gt""E Jb"""""""""$Mz""""""D '""""""&"+"w"""""b"+ @"br&+$bGy""""""""""fw'"Yqbd"""""""""+""""""""&""t """"""""+"wp"""""g*W-'"g""'Gb""""""+b"*MgZ]]w{"""'&rz Y!$"""""""+Ju'""m}DPrbb""""WG'""w""""kzM W&"vwv"'"hv'{ ""$"d""re"+&br"g*""r'bR P"BwY*&"BrG'w""""kz wwe""Gwxj"'z"""b"""""""r&"&}"r&jw""{{'vW"""&"'b""""""gb""""""'"+""""""""""&"rtwr ݕ)"*""""""""r+"""""'"""""""+&"+"**""+r"&""'&*"&*r"gbb&b"&&""""""'bzpP"""&pBrrz]r"""r""&"B""""wwwrp{wg"*'""""""""" q{'" pw""""""w+'br "+""&""&"""-"""""""""bB"" """" "%Uf"""""j"k""""""""""b*!F*w""""j"'"w""""""""""""""""""r"}""""g"b""""""'&""""""""""""""""""""k""""""""""""""*"y{ """"""""""""""""""""""""""""""""""""*+"""""""*""""""fr" """""""""&"""""""""+""""ER""RE+"""""""b&""""r"br"v""""""&+""tg+w gխBtPyKTQzGfz MwIU "פF@-p}T'utjpGPGݑ׸+G tg+w gUUp"DwJttGPQ{+ &pkzJ}wd]]Y'r{wGw}g&wAPR'}z*"&"zv[G'F@UU U]&"+B$b"&&r}t r" +$mBZ{z {RGzwFtuuu Uwwz$pZ*&pw}Y{kp{vw݈j" @w+TpyդT ݽwJtWpUݧykwg*+wJYb]""w*Irw'"*wwK++wzt'Tק'{"r'"GUz{jw'&f'ykwg*+F'vrzGzj"&"zb*b{]Ww """r$w'B""""""bvQz'gjz&zgt$z'B"* "+r""zwGwpww{`'"ztww"z"ww{w@wзKYvv"""DY-r]*"rzzr"bJ"""&"&"'+"gkkvg+wr**g*"""r+wUPer+zr"'ww*"b"w""""""bv"*"f"g"b"&"&rx "kwj"i z"g+ "B]%KtbK"'"+BGFz[T]"D} jv*"Rpg"b"&"&rxI ]UEע)vj{qr""+""r""""r+""&r&z"wzZ{B"&"+F"""""&r+v"r&b&'Z""""""""""&b"BrU]'""""&{""""*"r""'b*""""b&+""'"'**t+r+*r"'g *'ۦBwb"zB{+""+""'@UPU""""tMbBr WtY@r"+F"*"R"&rbr D "%{'rz*"r"+"+`+r{* ]+"r&rpg"t w" $"t Wg"+g+BzBwfWIM+w*"YD&B+*"r"+"PZ%**""$* w"z'*"g&& Etuff""g"G w{rJ*b""""tz}-"vzEer'wMtrwzҦk"""""rw w֤ *pTU+""&"""pgw"r+{Gu}+"rk{Gt gv&r"w'"''b*wjrfb"p++wwg}'"wzwUY@wwp$&bk"rGwr*"Ywz"+""""@bv+"""""""""""""""""""""""""""p""""""""""""""""""""""""""""""""""""""""""B""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""'""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""*"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""r"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""'"j""`"*B'p ݵbB Uוw] ]KE`M] M"&BRUTqwt]w*!" U'"j""`" нz*"{"Yp{& @}wUY{+*dWQt'v"wUMGw}RYwDPչF"b&+bwK]YKE{@'z""*r 'E"+B"'D]J ]]v"&dp*b*$UQYUٙYWuptTQUYYwwGP]]w}""{U!"UYٙYM@df XYYYj""""ݧb{-)PAw"by EI"$ w$}t"r UWUG iН "U@Buj""""UE}w'r" Y"}A" "Pڧw]r'"'ݐww+zAUpݪm"P] EwPݙp@eRp"""+frr׭$ wU]YT}@w"""B$""""B}rwrr"' zE$zB'+k*WzuV}EU wYW}{Gp׵ڵWg'GUݑ D]zt ' +"}QUG$"ׅIUUԻp'+r{}Pp Uw""""""""""""""""""""""""""b"""""""""""""""""""""""""""""""""""""""""""D""""""*"""""""""""""""""""""""""""""""""""""""""""""""""""""""""&""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" """"""""""""""""""""*""""""""""""""""""""""+"""""""E""u"p*w%""&"rt&""@{Z"zru&'b-""""Yz{&*""r "Aj}g"+""""""" ""*+*"]wb"TI*"""""*+r'zWG""b""G'+"""+"w'wu"+"b'r }* zz'U}""""""g&"rP׷r {t""""""r"w""b"""""{fg"zE"""""r"*+u"""""AwRUDyzj+z*wwWU]GG'+"*+wDYDm'"""""""G}$"UUz@vzf""Uuzwf""""""""""I""""+B&"t """"B-" ""W" "r$"""*rb@-""""Bж bT&rU"""K%" "m&""""""""""Pw$""&"""rzwk*"wt*&"""""bp*v'BGp""""""W@m'"""""+"z+t E"""bB'pM"tu -UE""""""'"GG'""Yyg""""""r&"*""""""rwz&wpU""""'Yp"""""zw}+&&'w}wuf"""""*pMppיtv*&""אYU]%"""""""wZ$"pT]rwT""""""r@`"""""""""&*""T""+""""b"""$""&""""b""'""""rzURmBt"]%""r$"BR%*"""""""& w Y'""+"Bp@+uU""""""""""""vf"""+")"b!""b"""""""r""""""&"r@b""""'"k+"""""""""""f"""E P-"b""""""""""""""b""""{*"""""""""""z$""""""U-""B+ݽ""""r"""-'kGt""bgەPU&""""""r"w'"B'GKBr""""Y)b"wup'"jwtj"jb{D{"kD&V&" k&v&"MKGp*{Kzj"r*"+bb+"bK g**v-""bb+wup'"'rzwG &"&"""&"f{zt t+""FdbU *r"""""""Ի+b+&""z+*+r""vb""""b""pwwpKd*"K""ww{TvGz"kg"""Gw['wg*"""v"""""""-""+b"b&b+"bb&"+""""""fG-""+bbݥ+"""v-&k"""""bb"""""+"j"""$"""""""}""b*@"w+" """"Bm" "" +r"$""e"+r "$""""DP@"rP$"P]""" ""@" &""$"""""""Wz'"""""tb"tz'+""""""k"'"rz """""&zM}'""""""*"'"t}"'""""*$r *"'' @""""""+"""z@w'""Eu""""""""""j""""""&"v"""r{u}""""""b+" "twp"""""'"t'"*"" "&&"b"'"+*T """""tE]]]%""""""""*v}$""-ڪB""""""r'}$""G@Gwwww*zt pqwvrMKtww'rwkw{ &$}@wtt`{wgzwzgrwJGpbwPwWtKwz{G@Gwwww*zw'{Uywkw"תz GtwwwB&r"{""{wzRQ*w'{"wJ"*$w'"r+"""fB""]wwwu'pzrz"wtwzw" TUzwtwwz֠" "e&"K@F%r"'-+"www&w++''rg{Jvwprw ''w*"""'zwww'{"'rJuGUz'j"+vwzj"*"B+{vb*{gr] YQ@ww DuzzGצDW{dpwKgg  u`Y@]X"Bww pfzPIW uwMUpw{J] YQ@wwz@ YY@Tw{wzwG٘{zwz{wvW'"z]AtUPݻ"vtgbG pwwZ'YIEpwwwDt&pww"z{GUUupdw DwG"[UQѝE @}trupb+"Tqݹ wpwprUUٲrwfwwww'rzwtwJ}zzzr*""+"w]Q ${*"rIP@zwgMUD-vgtpwwwzw+rzG""""""""""%""{+rg""""""""&"b"""""""""""""V*""""""""""""r""&"+"" "r Q"""""""""*""""""""""""""PU%""*""""r&"&"Fg"""""""""""""""""""""m"""""""b""""""""""""""""""""""""""""""""""""""""""""""""""bY-r'"""""""""""""""""""""""""""""""""""""""""""""b'""""""""""""""'"""""""""""""b""""J""Y""""""""""""""""""b"b"""""""""'b"""""""""""'b""{r w""""""""& """"""""""""""""""""""""bv{"*"""ݻ"rp""b+"B+*""""""""""&jqz'""&"+w]*&w"""""+"""""b""""""""r`""zJz "&"""""""""""""""""""&"""""""""b"&"""""""""""""""""!""""""""""""""""""""""""""""""""""""""&"""""'*"F+"""""r&*""""""b"""""""""+]@ݻ""""www{W *"""""""&++"""Jzr"""""""+""""""""""""""""""""""""""""""""""""""r"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""!"Gw'""JKkBt""{" G "ptutd'z]gzww ePw${"r-KbG{Gwg{'a &b&!"Gw'""r{-rr'@DfbDJ'wwwwM"""'" zҶ"""""""$z'$]'GgG'r"wwbjr""'{ wt}%'gzw&Gw"r"**$""tz}PjE]DywWp}""*wbU ut-"r'Jr"bW""+"`&%z+" {""f"{r+*""fzzwUPB'K{"*b*DAt&'a}բ""""""""z"&b&&""""""r " +"r$u+R}*w%""Z"r Y")b&E"-rU)""f"W]}ZYYz"Y)"{+E'"""""r "W{-"*"""GRz+"ՙuw*'"&{pI[Q""+"z M@$ """"BtM&'"zQuYMRQU"""f" )b&Uw""&"""BG*"bbf"+љ tYb""v"YU} ""b&"W]U}ww-GuwZ t"{f{QYUA Y zwt UUUPw""""wݕ)"{I]w'&"""z}pw""""""""""""""""""""""""""""""""""""r"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""B%""""""""""""""""""""""""""""""""R""""""""""""""""""""""B$"""z""""""""""""""""""""""""WU)""""""""*"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""UU%"b""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" F""""""""""""g""""""""""""""""""""""""""""""""""""""""""&"M"+"'"r&""""d&"b&& p"B+"j"+ "$""&"rz{&r`" FrI+"&'" "g*""""""""&"՗ """+"rrzwb"'"z"""""'jR+"""""IfBw++"""""++R'}uw"+"rr'"G+&B'"""""""'f&"jUG*'""""""v"+""""""'kk+uK""""rb*tw ""b""++'&+""+v`""""""'"'k԰z`{pz"k$"wptt{Pp$'""""}u}'" z{{v""""""bf{w&z""*"""""r'U$"{+ٺе""jbw"t"t)B&U*Pe""""RTwGyd "B)"BM"*"""""r']]g$""+Yݻ"кr"'""r+'B+"&&Ppԕѭw'v"""$GוY"*"rwRYY{GPz)RY""""""`&rT-B&UUڕ{""""}"""""f׶b""r"'rg"*'&""""y'qUGrDwtzwwzDvUYw&*'{Dwb"" zwY)"ByU]WG*"pq++"r""@'r+k{w&"""v w$&w'f"gb" +j&""""rwF{"K pEw' b&g*++"r""zww'""wg& w"&"J"&Fb'"""bpGb*&""r"'+j"wwt"'""'jwzb+g$к*"&"&"++&'gb"U{w+""+&+z""+"bk*""z*"r""r+""&+'&f"""""++r$d"b"zB'"""f"+z$kz}@wzfU[zwwr""** b++ r"""b"b"gw'r"}Ww}@@}PyAwJzxPPWֈI}K }xvtzת*- Ѐu uYזuQ"BJ@zDD{M]IG}Ww}@@}PP)wtg{wG P}@wwp {w*"ԗp{ {{Zuwv"k$ v{zzJ+{{j"+[""tw %""tg pMpb"r'bMEJY)r ku+bXEbrzתM Byuw wJ"p*"*+rjwP'Ҫ" '*jv{J+" tUGWԔA wJ[z """""""""""""""""""""""""""""""""""r"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""gwk*&Kۧݰrwdp]"vU'B@PYYu{ppMPݭ$z]НU٠WtԹ"]}ۙ}gwk*&Kۧ}""wYYGfUٝYppJP[Pի+rkw]P]U}t'&"B"wPuU*MtUMYpWTUAY]&rUU u{pUUk p""rw$E"&M]@۶+e[׺ժJyGEYݪwYUW]MUU P ]UЪt}GYݕp@twk+"}JPt" uPPU]wRuٕ]kr+"&"bvj*}*{'RշDY)""jr t*PUYfiwu*)"'"RU wUY}]ժ"z!"Kշkr+"&"bvj*MG{*""wUr"YUUU j{+@ժpԙ""&w@ח+""r"}YuQ&'@w}Y k""}{riwu]z{"rw""&r*y""r"&"Mww]r"b"WP'ХU"r""+@ UU}YEЧWTwwwW yY UU]wzzPUEw""r"JPp!"KP]wtk*&"zt} ݺ""""""""""}""""*"r"""""""R$"$""" "vzt"&""M""m"+""""{&"$""FF*"BEJ"""w*""+&""""""""""U׭$""""""rrg"""jk'""""""""r*++%Zkk&"""""E"b""""""""""r"g׷"""bb*"r rG+"{'""""""&&b"""tݧ" """"""b""""""""&e"**&b""""&"'u'""""""&""""""&f' +"""""""+"+k {'r""""JZIwpwG*""""""rwkz*"*r"r""""""&j+""r"""&{t"k$r-$@ Pj""WMwwjpT"'z*p Pb&$"rwBwp{}{ @MJ p'"@rtr"""&{t"Uu+*$"rwG"Gwz@{"*"}ME&"r*ztGrGwwjb"mWp-"JwtEIҺzp}UzZItzj"""""bw۽'z]]}z""" *""r""zէjurb+` WE {*fB""wwrw}wwW}w{jvݫdu۷w}wt]tw@}w*t""WQuv'"Wp@Gw{w"+"tww""'""""""""b*@"'@ """" }+ "Dzwpw"w """'rв """"@PG tj ]"rT"" "" "}*""'""""""]EW &"""" "" }G'+"*""r'&""""зMM """"" *t+wt"'"*"{z'rDMtrrwzd """"""'""b$""UU ղw"""""""""w""""""'{*""Pb""""r"-*tGM"""""jb "+Twwv""zk{}'rTU]D"""+wpYUe""""r"r*w $""`-{bb""""B}}{"zr*+z+{'"M'rItT+"rrw}d" QuuPwwM*}yԙz prBupZDzGGMPM' X$" *G*zr*+z+{'"G%Bz'"""wtwpw'+w wGtw$PYYP%f""w*G}Bw*b"""*PWEwwݭҴD}wz`fj{JU]yJww Pt*z*""kP]FYErg""WקՔՙu{' g*{bw})rvt{zfzwBw  "wPwzttU}tW ""r@ v$" t*gw+"&"r]kwJ"twtyw [tp[WwAwwWѝxJJYMy@ MwgwGw] ]w е+ Ptwtyw}@ tku@W]зUUzwJwGzKu}utww xBb ՙUPwTݕ}]Gw[}v}zwv@@}U }"+rtv'VBuEGrp[תVJw'pwpwvwtU ݑ MUїYUMz}TYQ GD]נ PU"-TpU+ G]@ tuU""""""""""""""@+w*F'""""r)' """ "r"B*"""&b "{$""""rwGt"r*""W`+"$""{'"b "-&""""""""""Й%""""""wt*"E}pww*"""""*"+r{Gg"""""rTt$ """"b"""r"}""""""'*rz"rbb''rj""""""r`""&zz*""]IJy+""""""""*""""""+"'++**zMb""""""g+r'"""""ppw{'""""rww*"""""""&'+P@wۙp+"""FpUwut"""""bwww'"b}wt""""""jw$"""""""""""""""""""""""""""""""""""""r"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""wwzzwk"QDg""r-b׻"w'"&"Re"+"b""*KzD""bwz+"r"""""B"bWjb&j"wb" -""wwzzwk"&xGt&"""""""""׶b+"+"""""""zwky"b""""""""""&"'""""""&"*"""b""""""r""'&*b*&"+'"zz'"pMP*++&"""""""*"""v&g*""""*"""pww""""""""""""""""""b*""""""""""""""""+{W&""*"""""*f&"""""wb"""""""{"""+%""""""""b"""""""" "*'"""""r"""""""""""&$"""" "+d-R""""""""""""bB""Ҥ""g+$""""""b"""""""" '"""""*"{""""""""""""""r$"v&'&+v"""""""{!"""""""""""b"&k""**"""""+"'"""z*""+""}""""""""-*""""""pz"""""""""{"""" ""++u""'"+"""+"ff)}"b"""""""""""""""""""""""""""""*"*"v*""""""b""]pGk"r"'""""""z"*"r"$""""""""""""""""""""""""""""""zri+""B*""""""&r&"&"""""""""r""R """"""""""""b""""""""v"" """"""f""""""""""""z&""wz!"""""""""r""""""""""""""""""rk"g""""""""""""""""""""""""""""""""""""""""""""""""""""r""&"""wabw-""""""""""""""""""""""""""""""""+"""""""""""""""""""""""""""""""""""""b"""""+"{"""""+b""Bm""""""""""""""""""""""""""""""w{ww׭EpGWԔДyuutZ WIwէ]}ׄJ]E@}} $pWYPGt @U f WPpw{ww׭Uн]U@pwtwJ]Mu ں ڻR}"[WGpzG Att"JTv]Z۷wwg +zzwwwRpwjJ]@ڕ]YU*'DrpЫ jRz{&Er'@zw Bf}''K@r'Z]ۥywy TPJtїM]WgU'"g tz*M +UDIb-wv f rwtYWp$uJ""""&""'"ٲ"*y'}gK)""+bqw"IT"J) " )"""bݗ]wuzwJz"")"BYgu""""&""'"T ""*""Ywg"wg"*""p'Kt"""fwM'b"""rbwgw"*"{tRGz]@)B""""""'+)"b""""r&}""""""'W""r"v zpQ""""&PP]ypwDw]Ptw+wwwppwpTUUQ+w&"b"k{Y)"BّYw&+" }ww""""""""""}"""""B&""$""""r "w""" " "r*""""b"v'""""BwG"*""'"bT$""$""p"r'"""""""""""Ttw'""""""B{z+""t """"""""$"b+}r *""""""rvDw&'"""""""""'$""""""-'pM""'")*'"""""""""zw*""z *"""""""""""""""""+''"*{ """""""'''v@'"""""{w}""""""kvz'+"""""""""-$przpBU$z"""""]M t-`""""""''w'""'FbBK""""""B*w'""""""""""""""""""""""""""""""""""""""r"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""Jgwdp"@ w]"wݧw*&ut wwDw} PP{'Gtbr wwJp]`E$bjjjJgwdp"%zD{zwjwwM{*UwJz'"&"z'}zwrvb"b"+"$ Gwtpa*wwpw-r+J w}vpz'"bzw}pwڽ'wDw']b*}""wrw}P{Zwup}u"""Vݩ wPw%gzrDb&bkk-G'rwwzrgwr*"b{zztwPPuE{gb*"pwjZDUw@r$bwzw&k+r"b+"w*f"""""""*"Y""+I+R}Jw-""+"ry""׶ztT"{-b "'r׷w """"АYw}zיz""F%"rYu"""""""*"Y'""*""UGk" wr"*""w$wwrW]""""Z]]Y'b"&"""++'tE"+"jj'rwKww """"""+"v bUz&"""""r"""""""*wg'zIUB"""z*wp"""""uutDKPAUz+zz+}JYGWw*wtYUj"""""fwwT -"rYDYkwgj*"Rݙy}wj""""""""""p""""+"r+""" """""$" """""'"b"" "" """b""$""""Bw"*"""K'"""""$""$"B+"""""""""""{}Gr*""""""b""""G"'r""""""""""""""&"""""B"r+ """"""""""""""'"""""""""ww"""""""""+"""""""""""'""'''""""""""""""""""""""""""""+""""""""""""&B""""""'"r""""""+B"z"""""""""""""""J '""""""w& w """""""""""'""'"b"+"""""""""Bj""""""""t""*"&"$D+DBp'""'rGwpb@G@t@M" **@*$pB@'"""rzDGGtt 'D $"{@Gt""""t""*"t b+"+"""@B@tt"TtGG""""rW'{w""r"wDpw}Jr&"@twttwrDw@}GgGBDJ%rw""""""ק"ptp**Kw&'"""rr*p""""""' ww"""""D'Gpw"""" tzvpttwww{pGt}MwtzMpw'wԤGz*w@ GJk'+*w"&@Wp$"{WG@Gtwg+"pzwJppz"""""""B{**"""-RT"'"""Q"f"""'k@"b$"""*" ""+"BGZjRmrrAp"P]-"" "BRi*"""""""B{*}Y)'""""B}"}utU"""""b""""+{K""*"%r!f""""""FGM"""""*"rww""kb+"+pt""""""""""+v'""]U-"""""""w"""""""""""F"j"""""""&'+{-""""I' T-""B'Yp""r&+r"""Y@Gw""Y] """""" '@ $"B ZPBU""r""rU)k"""""""""""r""""r*b"""""""""r&"""""""""""""""[ """"""""""""r"""'""""BK"r """"""""""""""""""""""""GVP)r""""""""""""""""""""""""""""""""""g""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""՝)K-""""""""""""""""""""""""""""""""""""""""""""""""""""""""'""""""""""""""""""""&p""""zwr""B"""""""""""""""""""""""""""""""""""&&""""rj&*b"&E&Rt%""*"Bu*"@׶J]"z-+ +'FT-"+""RД]GMz'Y"f-"UjR'"&&""""rj&PE$'""&bНG"yDw"*z"r*z """"Tې '""b" +t't]"*"{w*U`Bzvw%Y""""""'"rw +U]Yw+f"""bb""""""kB*b E"""+"j*WYE""""}kzww"}Gfz {t*{WUUUM{"'tYUU"""{U-"}]TPUWzz"k""Yw""""""""""""""""""""""""""""""""""""r"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""&""""*"ujb +REK h""zB EwE+wѝ"za* M!""bpIDԑJY"k!"v 'p&""""*" G"*+"&{Y"Ր]b&Bwۺׄ&"'Ptwg&"""EW+kztkwVtb"&b"jriEݝP p"w"""+}""r"""z ڷwG""r"Jۺ+"""&*ptw w{twpwU{ݧ@@GXUpP+gD YYP`&""+{)"vQGwzw+"""tMtwM""""b"""""Zr+"KGJBG""""""'K'"J""+"""""$"""""""""rB"`""bu"%""*""t*"*""""b"""""UPY%"""&Gt"'"DG""""""""""""""""""j*y""k}&"{wb"""""$+"""""""&""""""""""f*'""""""""""+""""dz" '"""""""""""""""""""""""""""""""""""+""""""" b"""""z""""""*"&"+"&"+""*pUw""""PEU"bb"r"*"""&z*"""""rGf{"b"""&"*$r"""""""""""""**"r""""""""j"ft+w$"*"" "+z`[*""""zB&*"kvK+Iw""&u*"J"b+"""""""""""Z*""""""v"""'""""""""rzgZ*j&"""""A+r+"""""&+'v*@"*"rrw'{עw*"&+""""""**w"""{""&"""""{"+""""""'ztл+bb""*"w'yt{j""""""b+"'+"""&g**""""""*"+*w'z*z*&"*"TYw@z{&"""""utw{{*"JBvbbv""""""""&+"""""""""ҷ"&"r 'U}Um""" YpUUY"%u+-WUzս""*"КUY]UДy}t+z%"Vpy""""""ҷ"PUmf&"""UY"YYU}"$""M]`Wu]ZIG&"r+PWսz*"r]Y "twUՒUwWpWYQ!P""""""mJUP%Uzw'z"""Br+""b""rwUE%TWErr"B"U }]G+"""uWUYUIWYUݝݻ}EGݤwQZyGՙQwGt]M'wk"r"w%"VPPّUз'"@ Y Yw""""""""""""r*'"""zU&"""'+g"w*tGG"$"""$Kr$""&"brgb "{zD*A"" '"wj"r+""""""""""Dpr*"""""bw"""{w*b&"""'*"r]y['+""*"yB"'"""""r{v'w&'"rJd'rw wtz w+B'*"""b"{g *""tGGw*b""""""B"""b+""ypb""B{'tUzۺ""b"""k"j'*+"+&`&"""{"bwtgw'bz{j"wpzrz"""""bZw@{z'"w{{""""""""G"'"*"b"""""+"$"'u"R}*{U!""&֥ "B{q" fE"m!""" ]uwU* Yz")"K *}$b"""""+"PYW`" """zUUz""UT*"b"FIw""b"k]VP} """""zGw"j"tG B"""bf"m'{fՕUJz""b"""ku"bb"*Zdb"&"חkw""""+Pywwpww{kwwzpP ИY]Uz{"PYY]Y}g"""jGwD)"KїJJgz*"""BpEzG""""""""""""""""""""""""""""""""""""r"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""B"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""%"""b"+""""""""&"""""""""""""""""""""""""""""""""""t&"+""""""""""""""""""""""""])"""""""+*""+"+""""""""""""""""""""bk""""b*""""""""""""""""""""""""""""""""""""""""""""""""""++""!""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""z""""""rb""v""""""""""""""""""""""""""""""""""""""""""""""""F*"""""""""""'""""""""""""""""U"""""""""""""&""""""rD""r%"""""""""""""""""""""*v)""""""b*""""""b"""""""""""""""""""""r""""""""""""""""""""""""""""""""""""""""""""""""""""""""""UдU%"""""""""""""""""""""""""""""""""""""""""""""+""""""""""""""""""""""""""""""rgDw$"""""+wwJ MU""""""""""""""""""""""""""""""""""""""""""r"*'"*-R}r*"""BbB&&p " ""Y&$Fpzv'""'"rwZջRrKԔy}b]p+jW "ݫҠ'"""""""r"UU)"'"'"RPM"UM }"""""r&&r'Rtwg""*" w-bb+"B"+"-}"+""bj"z}U-Э""""""v$"r t$""UUPY-&"""""@""""""+"B '"}t"r"B"&"*''wDt$""r""YU -**"B}"r"w"*M "]ҭt Yww"& А]Egk"r"wu]$"@ "r""r-z"ETttw'"r$u*"""'""*bww")""""""""""" jwݪ""Bz'""""""""""'""bRd"&"r-""ETttw'"r""Bww""""""r""""""b"'"bb""""""""{w'""""""""""" """"""""b""""""&""""""""""""""*+b'""++"ww"*"g"rGwyJwyr+r""""""""*"""B"+*""""'"""Mwz"""""""""""""""""""""""""""""""""""""""r{b""""""""""+tb""""""&"""""""""r"""%"""""""wwMGWE@ YGpG]WwMtE@{uPwmiwT uׇXuwfrЙPЧwKDTY Gt* НwwMGWE@Iw]wxw}pDDGPwwwRt wrpB-"}WDwPz}J ڔQMwbT٧{MMQZ'zwWtk*T&*zzz rwwk]٪@pzMMz-Jw K&r'ttFt)rzgMjuYwwp@TtսKW]tIT}Gr W&"'{@ՕwtwpUY"-wzwJp* ׭{pEYXGd+""z""r*y` ]"v-" y rDb " " $B*)&JG+gwzBwB "TU&r Wg"r$*d+""z""r*$TGw f"r bT]"""""""""B'"""+ ""bw'B]D"""+" """"k"f'""""*"+& """"""{"""r+""B*utfBYUU$""""&z""""b'"r"""j"""b"&rf&""+* "}rv{"B+' '"+&R+-"""b*"+""&"pvIU&b""zw"ҔpwJ" """bd"r*"" ڷrRr'"+z-rbDw+wt}"MKpG}'btr@թ*YEqYPG]p}MM]{*uG{BWt Y MI $&u@KwDw+wt}"% zft uMg@ww}}*UWMW]]W-"F*w TRz+&$XYPwpygWѝR'Ywdkjp M wupUUGwװ""wuU{ wTuMUB'"@R`Z]}zRwrJGD}wYK T JtwtVpt{M*&GwYU ݠ@Zw Y$[Uy{$&Tww G 'wdGwwpr$xp dvzw@zw 'gJJ*$DtP`$ UQ("+vww'vG`" p"xGgwzrprv$&R] &`+w{brtwMMpt+r{K"""{q+zw""rt*&MB+"wdw"+{v'""zz""@p FwK$+"tPPrG""RՍA Gp}w"+"""Uqz-Dg}""]"""b"rz'bwwJ{g{{v"k+""""r+bwGf"""&zr""j'pz'&"&&xG$b"''""wt{wwz*grvbwrۤ$w'""" d""""""{""*"R-"""""""""""t*bBtv&""rF"""""""""""""r`"""r"W""""""rۤ$w'""""""wKv+""""""""""""""*""r"""""""""+""""""""""""""""""""""""""""""""""""""""""+$"w""*&""&""b"""" ""w bB"+B+"b""""""+"""r""r'"""""""""gD*"+""""""""""+""""""""""""""""""""""""""""B"*"""""""""""F@&"""""W""""""""""""""""""""""GW@pUxgAt&wwGA &{'w*+Wjtw*AzyDw@dYYPe"B{wvH&' qzz'{{GW@pUx{w'ՐMbdrw$zwGtUx wGvzr}'"Gq"Y*zv"*"""Uw*&tg{j"{z+'krb"GYYЙxKtv"wyD{ww"zgUUPQt@k{vקb""p@@`zzDGe"z UUbbbw++gw'r"zgzzk""""r+"wW '+b&r""r}G'rwwv'*+&$rzk"fw'zjr""""&""B P$r"kxҗKD""&Brkb"$&$$F@B"+$"r E{]fP $ "G""""&""B Mpyw$b"'vz'}}wr"+b"p@"+*Kfk-"i"IrPy "r"*bvtGw "+" g{@%ݧk""""""'+rgrK & ڕyw """"B+""b""b+fb"}rb""" +'-w'*B""GZ`@PT{zwk d f}z&+rz]ݠ T]@t*"&TJ "kt[wvDpz} p""""""""b"""""- '""""""""u"J"""K"b""k""&""""b""b"""""F"r+""bvu"Z])""*"rt"r*"""""""""b"wt!"&""""r P"w`'""""""""""&b""""""""R'""$""""""""""ֶ""""""+"&"""""""*"*"""""""""""r"""DY!"""""""""""""""""b+"""""""""""""&+&"+"""""g"g*""""b*w&+"""""""""""""""{wwYէ""GЙ"""""""z++"r'rBv""""""rw*"""k"b"+""raխ +DFڙvGҦ"*gG"{`"F+Bz]- `vFv+&gb'wwtvwDT]]"G}y['" @puk"b"+""raս] v* zGiwvW"&r"z"r"k"+m*"z}v"GwW@]+r"*bJD""""wr*{* "g׷+"""""""&"{++BzB]P*"""r&""r""*"""eb&"""$bk&" &"br&*'{r'd+'gt{wr Gzbw b*'"' Y]Ub"kurrKPwr"*k{'""vywrw w w'KUwF'""bF'"*ۭu"R@T-"*rPtu}"]}UAwwE&uYr'rwTw}z*ZY%bw*$F'""bF'"I*""ڕ wb"Y}DDYQIP@E"b"EWwuz*""""[ՕYQUْYUXQRwbbwzzIEQwwՕP &bk"""RP &vvwwQ ]Pr"WpUU]*wr** uDeWP}wwZQّwTGwYQUPuUtzw{"r ՝%bw J}*"""Rݧ D"'{"b}* `rD'ptUuwbrG Uip]YUץK }WT M"+vRp؉Ptt*P!& U ڙث'{"b}*E@""Jw"YYpK{j{TWtYw'*wDZѐY)k"rbw]IY+WוUZu]Uy YQ*bwzFU٥KPwK@""*r*"&r"$"}PztwWvb"M{t*j'Tt  DQ@PYݐY]DtwP]G}zGt"r"](& E]YYpGՑUDJ@ w}QxDJKHvypB w T+%E@MAp }UDԠGw*rt  DPpTwzDJDJ@ wPM%wUGt {WwwGuֺr"R"&Y*ԠtJz{{wt{"gР}{twyZfvkbb*""twwݷtwww&Mut wpK}}t{wz v"r*bݗE)B"w +"M zD}*Fwwrwt}m pwGpvGP '`*"+&{z}]t'wҢ+r{'b&wPwz+bJwDG zzw*wwڪ """"""""""}"""""$""$""""""""r""$" ""'""m""bB"$""""wf""$" ]+"""'"""B$""""""""""" w'""""""r'{r""}k'b""""""""""""JwG"""""J+r{ @-&"""""""""""z""""""""bw""""""+'"G}"""""""""""J{*""peb""""""""""""""""""b"""bt"""""""""*"zD""""" "z'"&""*w"""""""&"""*"Jww """""wpE%*"""""""""w'""'*rֲzr""""""rkw """Gwwwq}t YUy@wqz(QXU ՝wGW}шQYY pݐgTQXGwwwq }wwtt+pYTՔ@U]WUtw@Qw]i& YYwXXXTwY ] WUݝ@wڧGp+wRZzMzQPБ}UPلJZzԝTp]Y}wtppMY]ՁYxݕp tP}՗t@VԙYgTQx@HIUYI"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""r""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""r"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""r""b"""""%""r """"R""""r"""" *F*$"R'""-"d}Қ&"""""rb""""B+"p""@$r""""""r""b"""""TR-"""""""""&"""""*"""""!+@*)'*]'""""""w!""b""""""""rk*w"' &""'*'b"j$z&"'*" """""""") B*"&'""W+""""""""+""ej "e"'"""rruD"w!ѫ"""""""""""+""""""""""""""j"kk'{+""pr""""MbB")"""""]b *r&""""""""""""""""""""&"""""""-""'+"b""KI""""&"&""'K-$"V&"" "jw '"""""rb""&"G"&IP""B*&""""&"""""""WR%"""""""z"*"""bb&"""""-"wagd *""""""a""r""""""""bzr-*'"rbw*'r`W"+++@"""""b"r-r*"&""""""""""r{z"bb"gtq "'&r"rG&wp JB"""""""f""+""""&b"""+""""b"bbw-w*""wW&""&&tGz""""""bpWy"rr++r""b""""""""{"&""""TQxgrWzwGw[r-$twTKm%MHg]h&zwwpKT&ڐqtApwzKTQxgrw$'R݀p{{zvwzGwpvDw{Gr'"zx*py{"'"wwwwww'wЕwy"w"bzqbbuPpJ}HKG"w+ҝ wpwwzzwtb+"H{wtpwbمrwvrzwww'rw}pװwwzw*w""+"{*]٪*+b+""uבG**zA-'"'Gw}wtzw$'rGGJwtG@GDww]+rڷR zM-+H@}tMM} u"r wZwwGrDYmڤIzHgtJwtG@-vtj{wקwwwGEDy@א`""}+ՠ "&b"*"+qGwzpdkwtVkwwgRrz}@WY]ztMdTݲg'p jG UEDwՕT ]U+"ZU ]a{z[w@rPrpw$rwwwDw֧zwzt*"vzvPPw{-Z"*zWYpwtzHy*+'z*"*brP* vwrb""""'"]$B*kЧ{'""&b{P''b&JbKk"b+$d{k "+""BDWTEbJE[@"k$"rкFu+b""""'"E p'""ww*@}uz@"+""zG"++r""b"u ]P v'b""*"&zp"+"**pz*+p wp""""""*""r*zb+GUP """"&d""""""&""$"""""""&Jt"""" gU%wM&]Zխ b&{f'p'{t@D@UMt"&]]Pp"""*r"{p$"r* @TGwff"v"}w"pUPIzMM@pWUYpНyw@GqWAyE] YIU@]p{yJP ٝ@QWpUPIz]%pD Iy@w]U]Y]PMݙwt٦GQkՉՠJէEX٧wT rUQI@]]z JԭE]QQQBdP]T]YPUy [wUI@QQUY@Zpз+z UwԽ[kwzՑY MIupYHDyGYtՙ""""""""""""""p"D""r-""""t" """" fw""$"" ""b&" """"rtD "R ""B'"" $"" ""P"-"""""""""""wr@-""""""rDw""wp t"""""""*"""+"W """""K'B '"""""""""""}""""""&"@{"""*"''""""""""""Mt&"" }}Jp+""""""""+""""""""b"""br$""""""""""E"""""Х*}w'"""r}'"""""""""""z "twwww"""""jp w}p""""""b"r$""$wr[ ݲ"""""rݭ-""""""""""""""""""""""""""""""""""""""r"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""@$rr""""""""""z""""""+"f""""""""b"""""""""r'"b""""""ې!""""""b"b""""""""""""w)""""""`rD"w+*br""""""""""""""""""""R+""'"""""""""""""""""""&""*"""""""+""+"""""""""""""""""U{ '""""""""""""""""""+""""r""""""""""""""""""""*'""""""""""r"""""""""""""""""""tj"""""jP""""""""""&"""""b""""""""""*&"""""&""""*" ""r'"& $""b g"rU* y"W ""y" Z B] ""+"rw "VTpgPb"U%"z}"Bp'"&""""*" """""wM}""g'&+*&]qw""*" rvB{w%*""""rzwIu+'" )U}YJ٧t"""r"WRpwW'""Y]'r""""""+w"bbk"wYyG}""{gWwYuy}"""""{D@j$'-r'{*""""qvIq% wpB{+Y]Y*"&b""D-"zW] bzG+"""""Drw+g"wfg$ PbrB*'rwW(vw"t&"$*ZrwM+'wR *{w"rzzwzF"zTGJ$wg"& wwfg$z'zPAk*""{v'P&"""k""""'"+rp"w'"b prWU""+"'rt{""""{r"b""""""k{""{"b"z+k"r'+"ZrwMDt$*z+"&"r&"""" """rdr'b"&**"""ՠww"r"''g&''rgr"zrG'&""""bJ"'wB"rwwDwb+"""&"""'*Тwzw"+w'r""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""B+""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" *""""""""""""""""""""""""""""""""""""r*""""k""D""{t$"BDKp$""&"t+w+"BtzMt'"t$"g"@tFD$"""""r@JJwbtGtzwGv" G'"b"p "r*""""k""p'&""""GDgb""GptK""t*ptww{$bp""b"Br'r"""""""B GtGw""WGt rMtDJw'+""""Br"p''rwg'"g$G}z"r""""""rK'D""rbw@p pr""rr r"w Mr""""""rprw*bt$*rz$b"@"G{Gwp$pg" w*rwwGww$wr $"kw""rJ'tz'"bj} """"""""rm"t"pEpty{}@u@@G ]P@wyJ@pIqPyIٔ@]@}}u}]P p&rwwp{YХA P`MpEpty{ U%DY@Tww}GtwGW }@v z}KP tWZMX}}AMy{}t@X*Hpw [kb@TG}]TUvww[Y jDMGWww G r'"}JPgwy r{Drwwwwp} wT@pwWwW zGJ++jwwMUװMwEVwjrwtW}Mpp ` wGwtw z""""""""""td*""vrw""""""z{R$j"+""""{"""""*"""""""""""BB"B """@"ҽ&""'""&"$""""""""""""wtw@'""""bbj+"'"ww""""""""""""""""""'E"""''""""br"*"""'F+"""""""""""""""""""g'"""""""""""""""""-z"p'""""""""""""""""""""""""""""""""""""""""""""r$""""""&g"""""&""&&"""b"""*'D"&""IR"rRY""""""""G&""""r""""""""""""'""b"*""""frPj"TY ZYJK'"j{ջJ"+w+z- DJ'gzwWpuvGv&RE r "TQ g*""""fr}GUUi"&wrU}Yj"+"v""+*t"rA*bGIк"*""ק""""*r+'"**tg"""+""""'&z]}WEGW'"+"f+""""*"""}bb""r"&B*" j{r${w% z"jWvr{f&zdz+ '+{$݈&""" V{@k"'r"w "'*vݙ{"iz"""""""B)`""ԘB"" +*G"""'&'"&"b$&rb"""'"rjBҷf"}& '"Pdw"""""""B)GI-" "jpT)]"""""`r"""r&"" ""z"" Wzw"""""""""b"*&r"""b+'J"""""""""""r&""&"bMt{ +"""b"""b""b""r"""'b'"""b"*""""+b+**"r""%J''"+w""rb$+""R+"fj"YG""b"EpwzWj"""w'""ҢU]vzjw$w"'""""&"""'}"D*%""" u "G] uT]"{%&"'{T%""""RPzEU+F]U""%"F+ "'""""&"U'"+"""zwb"Mt*"&+""{wkz'vY""""PwRTݧ """"r"twוY"$& t+zzB TpeYY""""b"zjbWU%&UY""b"""*""b"""zwgkgP""r"{zw'շU"""""wwuzwgwdgMW@z&zw}pPDGY]Up"wDPYUUU]Y-"""b"jzzY-"FT֢""""rսw"{r'"""""""wB *"+ ""r"B'g$"rp- "*brp"teW*"++"Bg*k"ۤt+[*I`"*{r'"""""" +"""''"wg"""w'+"w*+אMyMV-&*""'"yrv"*"""""wM@wzpt-"z}ekg}עz*&""""brbt}-z*br T $"""""""rzt"rrwg ty Gb""ڷuvwyUk""""w&"'++"*v*"bkb""""kr"zwjw "P wY }-"""ՀzT{{*IK["'""""""""r"'"*""""""z@]Z"" JU"b*"w'['T'"""'"""""-"k"bB+"'&"Btb"r]"ҵEz"*" `*""""""z@uw{UU)w'%"r+]`dU""""""""""""b&"rw"u""peTzb"""""*r*""""b""*""r"""""""rg""""""""""""""""} vYYIT "&""+""""""r"""""*"&"""""&r"+"*+"+"rb" bbr'k+""+{"'""f"""b++"""+"'bwYTU""""W R[b"""r"z+"""@wpzp`"*z$b""""""&"+"&E"y+rG)""KBruz+"Tf@y"F%"&tBPb)"""b}yt}Jdw""+%"$Ҡb""""""&"tDG""*+"bRٕD"" T]+"""""r&"B&*F""$$WGD}u +""""+"p*K "+"*{tr"{w """"""+*&rp-"pGW""*"""b""""r"""BK "J Y""""b""''E""""&tw* w wG@zТ'wjzzYwf&+'+wwTUM """"""BzPY%"Mw G""""Ptݻ@YM'"*x""+"+"ww"R"+""""""""BDtw*&r Gw'"B"""""""""r'"&ڠ"rq""+b"@YM'"bw*"Bww*+"&""""""b+$r"""""v"""rw'"+"""""""""z"""""&""b"&""""""""""""""""""wqqv'b*r*""BDtwb"r"rwEWGxwzwww+r&""""'"""zgv*b""'"""Gptw"""""""""""b"""""b""b"""""""""""""""""bzzb"""""""""'rZ*"""""rq+"""""""""""*"""""""""""""""""""" z'"&""""" """"r'""r+""""rd"r"""""r*J}"B'""Kj")""$"r"r """""""""""}W!""""""tp"uݽw'""""""""""'""""""*"@t """"""""r"&""""""'"g"b""""r'"""""""$"""++"" Y'""""""""&""""""""r """"r*""""""""+$j"b""""""}"G*""""r'פd*"""""""&"'"pb'$ YU""Q """""""pw$"r'{Tz""""""w$"""wB+zBy @UJw+}JԭЅty&WJie&KrG)Dw GTw+v"KDG @Dz' Dw֤&[ UwB+zByYUP{! twGUEwp{P"&'r"wr"v"+xRѧDJbZPr"${wAw"+"fwwpA*jFf'ww&*b&"" b&Bzp'rG BEY'"br'"&""rg&v+""+"v+r* "e'fBuRz`*z{p'zGKwtpwvw'{"jW&"'vݤ՝r&bD BZ}@K"'Z&gIp{*'׷ PT"""""""""k)r""vYrB""b""b"" "{ """""""""""""*"""""b"""""r"'"""""r"""""vw*'""""""""""k'"YU)""'"b*"w%d*"G"""""""""""b"""&""&" ""Gg" """"""""b""""""""""""""""""""b""""""""""""""""""g{ibv'""""""""""""""""""""""""""""""""+""&&""""+""r+"""""rr"'""""""""""""""""""DpYzz""""wwRb"&"""""""+""+""wzzw"r"""'"kw'"""zz}bE{ Q*u`r+R xD щ]X{zzڧZY]u] Ad]!ٵuzz}b ytz++Xz"YuGِM]Eؙz &w@A@+"&GwՋYQU{wP@ ]xDEPK"vb&RJ[J] ZzpPwQUQQ QQYuxUYwWMP@{KPt+V (ԑYw@yuU`jէ"""""""""""""""""""""""""""""""""""r"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""bK'U'++rrr""" ЪMt+@"K*b] gtJ""$"rwrwJ t%+ '"RDg""""""bK'UUM-r'rwF*twwP""""t"r&*'b+'"B-zWpGz"r&*'g@'K"'"b-f ײ-R+""""""*+"r *bUPe """f"G""""j"v'""+"r""*f''*"B""Gr''zg"MTgpr{t"R& +'*pt]M]"*Fww BTקpw""&vtpr'"RbGvFG{rv+"{ w'wf+"&"z""+e"ZuK{+"+ Tp"z"'&+w+ ${kf*&"{wۗ@y JybEٲ "rTt*+"&"z""+K@UYe"p+tF]ݭ uUu""*b"B"""Br""pb"pZ-K}z"&&b"w"+""r*b'{"+b'"*'*wt-&"""""""*bw+JPw+""""" ""b"""*"v"""b+"b""r"""""'jb"$Kg%z""v""g" 'z`Uw""+"] KbkB"'&@ "r -ڝTTrzK+"$%Zr""""""""'"U"'""$zgr+""""Rq*bB"M&z"B*"""*b+""&"r@" "WmGbY'"*'"p"r +"""""""'"YU%"&"'""rpGt"}wwg"""""r'&B'iR+"""""tpu b"+""""R'pt"*"+"*r"GKG+ *Vw'"""""" ""'w*""Up'""""""""""""""$"-""{z""""""*- M}z*""b""}"$""""r*Mm """"""'*"]z Y +wp""[QYYw Uuw"""r"w}{$"ҧGzJz"""b""kz} &"&""""""rvq]u"" vbb&"'b['ZԷ"f""++'"""T bb"fr+"$"+rwB&"P"Ҡu"+"Vdd&""""""rvquwMv"-"*a'&g"""""*"""""""m"r}"u""wzTepr""""b*"*"""""""&""""r""+&B&""""""""""""""@wrYyp*""""""""""""""+"*""""b""b"+"+"+""B"" &"B''b'b"+ r'"""""""R&""+"wY""""ݤzZb"""r""+""r"]Բv '"' w"+"""""u"*b"'-Ry Ф"""rUDwUZ " &U+ t`""*"TЗ]]@*fW%"R@ y"+"""""u"T]Uij'b"&rT "YY]y"*"" ' ' *"B*"WEDہYww""'fJeWP"'"{ RDUנ]@)""""""'rpp &]Umj{"""b"p""b"""ww'FtZr"r"&v+ }}Mw&""" UMХ@ EwuQ @wGZt{ }p}p'*G}Pw}G""+v]MT%"RYP wzt$"zٕyYw""""""""""w""""w"B""r'""""""+"""$"K""+"""""b"" """"GGJ'""J""rw$"""'""t"B'+""""""""""wzJw'b"""""r{ww""wj`""""""""""""bGg"""""r*rKzwg*"*""""""""'k""""""*"wG""""""*""w`"""""""""""bk+""Gw *""""""""&""""""""""""""&"""""""""""ҽ"""""'j"'"""""ww'b""""""""&"'""kJGj}w""""""zwwwwG'"""""""""+""'"rv"""""""b*pw'""fkkJf*vMz { Mfg&*wK@+ڷ+$gzvdwzz*zGw{KP rezKf dJwfkkJf*vK}wjGM&fv&{"&"rz""vfpY+bwjfkB"*kk}wp"'+wz{%r{&r*"+jG&"w*v*+r+vz ]}}pp+"jw&b+"'bvk""G+bzr'r"k*''"r'rwrgg&jRg{wt}w+'"* }{Y '"GtRbRYvJb''tzf*+rr׺ Bv&"-zgwv"""""""&""""*I&Rp+ %""""rgY"b"zP"-"b "'$%""""QvJ @g'""v-"Y+*"""""""&"-""+""RUtf"UUI w+b""""{'*rgGrPE"""""zVUY'""""r"&"'w]E"""""r*BY"r"rzw-Y""""""r&"]U'"bQzu+"""""""g""""""""vg$'}MBb"b""&"zWUy"""""Quy'j*VU"{gb"p'*T{PUD״z+"+wtՕyw"""""bzW "Y"+""Rݑ {"""""""""""""r'$"B"*"b""g&"B+G "R'""e"$yr$""""wFw*+"DT״+P""f "w"r&""""""""""{ """""wJt""ww$*"""&""}`g""&""qf{{**""""b*'* }"'"Bz-}wG]tp*]'""""""mrwG+""M"""""""@"*""""""kDuqp* z{""r' bUM """"""J+*'"&"*r'j"""" & b@'wTj"&ݍu wY*""""" Ez'"w`{ z"z""""""rwg"f""""""""b""$j"Bt""""""z-"b"K+b+""r""*'"k""""""rwҶ}""B}E$k" "b+rd*"""""""b""}rM'""&"'z+G$"t"""""""""""""""g""g+"&"""&"""'k"*""""b'"+""""""'&p**""""""""""$"'"" w'""""""B""""""""r"""""&""""""""""""""""""""" f*"b"R-J"""""""b"&""r'"r'ppw"*""PU" R""*"""f'"b""""""""""$ 'r"r""""""+"Ej"'u"y*rt!""{rryz &" pq"{ib"GB@)"""pyt@Db""&)" dҠr""""""+"@DYtw""''&rRYYw""Д*"""""B+B+r""''Gt w &""""j"}*J"j"wkr"wJפ'""""""*&&rDeb}w""f""""b'""r"""{G${&tb""" "`*""""+uDdzw@FwzDwGtwݢjpw{wgb++GY@-""""""rtQ%"YY]wz """B ݧzDbv+bG"fg"}* 'MP "r'r}*rYQIUw}*pb+w Q@TIJ'-"Wٰҕ}bv+bG"fg"׭wj*b"ZY]w"@ MJp&UX] J""w"GYYw+""rPU UtY}PՕQYY!"""vQԩw}P]ww+{""+P$Y"r+ڕYٝWDJ"+Յqw'rj*Ww DyZԝGztuGI}ՕQUjwYY]Uw Dw"Ҷ-"W] gk*+R]U z"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$""""""""""""""""""""""""""""""""""""""""""""""""""""""""r"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""B'+J"'""b$"rr*""*'r+"rwt'-b*fjMM"++rb"rkb'" wtP"T''"b+"B'+J"'""])j""+"z@"k""*+'"*"W(*'++Z"""rb!w*r""+"""""z*zw"{&*) "uK"+[""""*vzbD'&&'fjpН*k*"""'R&"K""'""[Ay{Eaѫ+"'"bb+'&*"&+"'"b""z'Mwz''""k$bwwtGvG ")""U*{G'&"b""""""""b*""""""""""k"&""+U*Rgb ""f"rE*"" "v"$""U"$B+r-""""WYeFu"`""w "rj*"""""""k"MGY)"+"""RPz"UE@g"""""+""t""b&"Wq%"&""r"&"+v} """""g&rU"r&rgbw'r u""""""r""{G$""UPU'""""""r"""""""+"B++" p}"""""&'&wUu"""""`YU-k"RpQY&"&vj"*"wwp}Uww+""}U]]}Mb"""""rJ "rr&""" )"+*""+"+з]" RGD*"}*F tzDgt"K @tj"'"rҐ GzEK[ "Qѥ+*""+"+зp ev"- p wyJ"$b"@"B*kpzj"ҧbDUx]}Ԣr"*tww"&"{z{ 'vbkDd t""""&""bz* ԙ@*"""'""r""r*&{""tK"""*&'+-}p&r"" Gq]p'GTAJ pEz gwקwwwUp$fjW@Еk"*Bg "Һwr Z }ww"]z"""""""""""""" "B"""b$""""'"@"""""'"""$"" ""bB""$""""Bt"B*"""+""G""""'"""$""""""""""" Pf*"""""""""""$""""""""""""""B"""""{"rrb+"""""""""""""""""""&"'w"""""""*" }"""""""""""&'""}@-"""""""""""""""""""""""""'"""""""""""""""""'"r"&"+"""$wf""""""""""&"""v}*""""""rj@w G """"""""""$+""*"v"'r"""""""*""""'"r"""""'r"+"""""Fk""""rb"""bF+"+" """$"-m"""""""r"""""&"ڪ ""J"&r*""""""'"r"""""zB'""""$"""""""""&"""""{ "v&*"""""""""!&""""""""""r""""*w """"*"'"++'"""""{"""""bb"g+r""""""Jw"&"""""""r*&""%"*""-""%"*"""rrd"&%b"""""""""""""""""""""""""""""""*"+""""{+""""]"gr"-"""""g&"&"&r*"""""""""""""""""""""""""""""""""""r """"""""""v"""""""""""""""""""""""""""""""t""r%""""""b""""""""""""""kk)""""""b&"p""kb"""""""""""""""""""""r*""f++'""""""""""""""""""""""""""""""""""""""""""""""""""" t&M-""""""""""""""""""""""""""""""""""""""""""""k&"fb+"""""""""""""""""""""""""{"pww""""""wwwrz"""""""""""""""""b+"""""""""""""" QzmAqzfzw g(w+x+tr+*pWyM dQWi"Bww}"$ufXzw QzwY '$jk{bvzwpzTt{+"bJy"z{"b{*kzb+&"KJggw"bw+""v{"" EJJG{'*"WyUzw" +IYUDpwvw"r`b""yJ)r}k'"bPp"kz""bv'z*"w{{'zrw"""""r&"jwT{*"""B""bzu{'+"&+BXz""'&jwzv*$vjz"""""""r'$r""җ}vz"""rz"*bBgj"b*b"]*+vb'""*"rw֝pVyv{vQwbZuf"z "rG y"""""""r'ptzU$""'"rwG*uw}""+""r"""z*'"r*"ױ+r{J"""'""JG"""+"w'zz"&z$K""""""""""z*b"}}JWYfr""""""""""""""""Gw""""+"+"&*p'""""pU)@twt]yvf{b{"w+fv{www"+]U]zf+"&r{"G "r GrzKzjbuavwj"K+""""+"y""r d"z&K*"b"rW$"GU']" b&"r] +""rwD "pݶ"%"{@"r*"K+""""+"y'"""""rt""p&g+* q Dwg""&"wuJrr'"""""tp"'"[p)}wM}ttk"""r"Rt'b&+r""""""BGw"rrwuyM{ }""{ק qw"""""rw't+''{k&"" "KEA -rT]pww+QYPyڧ$+b"wGw'"{wT&"""""wz"r{t*G*j&"+J"""*" b"fw"u""""v""""b"" rfgJG'$trgr""b""""""""F*& "$"""""r{t*G*j&"b'"{GwvJ """""""""""*'b"""""""bv'Y'""""""""""z"""&""""b""&""""b""""""""""""'bwf'"r*""rfg'"+"fbz*b`z+w*r wv$""""" """Jr*""v&'"""+w&+'"""""""""'"""""""""""""""""""""""""""p%'"""""""'}p-"""""$"""""""""""""&"""""""""""""""""u"""&t"{*P """"R)""+"ۤw"'"""+"W """"rwG"r*"+Z "YP+""w$"t"r$'""""""""""Ew'"""""bzw{""M k'*"""""r'kRtg""""""GGw'*"""""*"B+wut"&""m'z"rzrD''@`"""""""bjw'""Ut"""""""""*"""""""**'z"""b"" yM$"""""$t{&&"""ww&""""r""*"'gРw Upt""""Y d*"""""rwtwww$"@{r""""""*t*"K"b""""&"}""B p+wwJ'"""Mp"rD`Py"W$t"uvPd""$"DpptPPpDի& "Wkrwb""""&"Wuw$"""""rGz"Dwwww"*"" u Yі}t""*"rDwwg""""Bwuw-" utwWEu Rw""""""GK}G'tUTz&"+"""r+p"""" Iսzwz""{"Gu zG&"B""@}ppZ}wpbrtwUEwpݕwztMP Z++""J "W }g"+""rDwGw"""""""""""""""""""""""""""""""""""r"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""-"w&""pzK`kzgT ""w+Rw*"R}Gg''{w-ZP'*"r B"Kw{GPvm$'""&-"w&""-zr+w+t fkbkz'g+]wutקGd"""r"U)z'Bb"&"""""U-zwp{g*w*ww'F&G w{'r""+ pG%'b'{wj@b{"+ ""vp+T]WwTG}""+zf[ {Uu-"+zb"""b+"'"-{*"'"""gbwvw+w'""fz{wGUpwKB"'"+Ԉqu*f'w"&"""""""z""""f"j"ff+tٔ`FxB"re+''rgکz"*"'$rij"{ 'kjr"wTk'wtJ&BG'z+j"ff+*zqTD fk"'b """""r""""'""Wry"w&"""rjrGr"&"*bw""""+'"r"""+"&"'J""@&""" """+""ru brpe"""+z""""'""""*"""b*Bk*b""*++"ppv{"+k"** *"*&g+'"b"vJ-" """""rw+"&+B""rzzJ"'"""g"J&+"""+wrvr*""'rbwפtzڷ zP հT]}w'vPGQu+UQItyG@YYYw wwGwYUW] UհV]wפtzڷE@pw+*PKMU}@y QTUIz {wbuuww+&&wYQUwU݉Y}YYI[t{JtTGIY yG@U`z""z]uw{YԕU]Zww@ٕyPzrwwYUڝЩђ]]@} Iصw@]pYqݝMU-rוt*[w؝ ]UJy} **]wP """"""""""""""$ +""""""""I"@""""""+""""""""""""&"""""z"r'""bBy*"V!"""&"""B*"""""""""""{)""""""Bgz]D"pz+""""""""""""""""""""$""P'"""""""""""b""""""""""'"""""""""bB&""""""""""""""""Uݷ$""""""""""""""""""""""""""""""""""""+"""""]'"pz "&""""Kzv'"""""""""""'""""@'Ywr""""*U"""""""""&*"""""br}""""""""p*""""""""""""""""""""""""""""""""""""""r"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""&"b"r""b"DIt'"zBp""b'"'U*r$"z"z"r "$$Rr&%"+"b"rK+"+{r*b'"""G"'t""fz"&"b"r""b"r'wiDtw""""{r'"'"p""""""b""""b"""v"rR"G""""k"bwB"""""$"w"""""""$"""""""""'""*""""&"r"""Rr&g"YP-""""f""""""'"b""""""""""""""""+&"""""r"""*''&"""r"'b"""""+"*+"r&""""gb""""gr""rzF}v"'"""'"t""""""r"{rr&+"*'rb"G*"G +rw`rwpPf*uDwtPEtddF`}PB$wGr'Bw{wDwz@wWAMW$"DwG*"G +]]e}t"wvwp*twzwp"m"D $bkR'@tWrwvz r}qJAwDzm&zDmB&wTxzzBk""&"jrwtbݰ'gFPU{קww""'`""+K}vw'kI*"r"f )Zpy$r Drw$z*wtwwwG{D w j{d{J+"wwwpt] }pErwvkU$R"@w t$"tDp w wBw*&fzwwzDujp*}wpwJz'p YrM"[@pt ttp}ѭPz$wzr} tzD wEww*r'Dujp*)zzv' zwr{pgvwwxYJ}pwM"" %$Ҫ"'""""UР}GwpwwW@%*w}vJjtz""ww}QttpGPw+D}"vzY {yZG **pYI$rrGBz*vW{gwk ڴ{wzp{Z} I "'JgDБKgR" rzwwrwzz*{zf"""rwzb""""""""""Z&"""'*"""""""""w"""b""""B"""""P"""""""""""rrzt"'"""""R("""'"""*"""""""""""&rU%"+""""r v]w" w*""""""""""""b"""""""R)""tw'"""""""""""b"""""""""&"""""""""$'""""""""""""""""pz@UU-""""""""""""""""""""""""""""""""""""""+""""" '"J'""""""Gb'""""""""""""""""rz+YE"b""""]]VTJ"""""""""''"""*"w"""""""w*"""'""""""r&pu $"r"r "'A"r$ ""+"$'"Ҳ"@-"b""fr"+*"r+'"""{"'Pf"&"bBz "'""""""r&E+w)J{@"b"v{'"*"z"""""""""""r*"""r$"G"""b*wTb"""""+""""""""'""""""""""""z""""""""""""Ҳ""DGDW%"""""b""b""""""""""""""""""b""""*""+""r"""+*"""""r"'"""""""""""+""""""zwW""""bj"Bb"rw@U"+"""""&"b""""B{&zbrw ""'rb"'""""""ebr -'"r+Y&"{"rj*"r@}@} T'F"@UW B'+"r{r{f{ww}v*$r"r&'""""""R)b+++"вwb""zw'j+*&u xM}f*"'"שjr"&"""""G }ugwm& z}p- G]Jd&""+*{M}z'F`W v+"+""&pw"KU }yuI+grbRpp Y{"t"""wb**k'{'kkb&+vvw{tw `E "bGPgrzwwwt{+ibbv" YYwz'rwwڲ*"+""""Gf&"""""""""+"+"""RD$z)""""rgI"bb{"uFq"*J)""""[{'"v*""r%"+*""""""""+"ת""'*""Rݙ""UE$"""""r+&r"""""{VP '"""""""+z"+"*"+*"zwg'b""""""*""ztFQw""""""""g""""""++*&"t"""r"r"w*q"""""@QE'fwUTIv"j*f"&gGzJ&""&'zwq&""""""jW "QQ] pb"""Yu""""""""""""""""""""""""""""""""""""r"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""Dr'"{&J&""MfB +"{*D""r"ݺw*"t`G f*{zp&tp-J+j"r*fr"wrzwpr+y*x'""Dr'"{&J&""@R%"+"" "*""fz'v*"wj'JwGzw $""""'"Э{r"""""""Dzzt* +{gww-r&zwpwrrkR"""+bkrpw-&'{z r&"f*""+w"zw zzttu"""r"r{wvw}$+b+f"w""b"&+"'z*""*""""g"ww'*""kw{bzwuwB'{ &$""w"r PYw+r*xgGB"+""f"""""w"""""+"""""r+"&"""+ukwe""&"BEz"fE P"{%bb "'rWz%"""" wyzG $"br%"ry"+"""""r+"U%"*""""Y"]Xwk""""j'r*r&"b""TWЙq'+"""'"z'wPI"+"+"'Y'J{{w-r""""""*""rW bbUّGE'"b"""""w""""""""zv+UB""r""r""&gUI"""""YH`QwtwzՕXpzw{&ptբYЪ**&wYUU`b""""+bzzW-"rEYvwg+"uwwj+"""""r* g"zI "r%"wrg)"{'"`*bf)"+jw&w{brJBb&Kgp'bk"r-tj+"""""r*٤'P{y&brwG"'ڔ""""""""b""B$""Y"rz'w&"vvb""""{""""kd"r""""""'++"z"""""""*""bf@M U PU%"&"""""r""b""""""g"""""&r"&"&"*&"b}gB{&rg"b$*+"++tr"b""+{b*"["""*w@W&b"*Ggr"vק]B"+"""k"""""zrz `"" rr""""""""""E"""&*""""""""'"'""b "pKg"'""%"*r-Z*"""""+w"""'"F""""" "b'""+"""""""""""+"""""b"g"""+*""""""+"$%je&""""""}"r"'&"""""""""W"""b'${&Jt+z'*"w+""""""r$r&"B"""Tt""""""""rr"""""""""w*"""""r"*"$eywz+"""""""+""""""+""""'"""""""'"j*z F+"b &"""""TItt'""""""r$"b*"""""""""""""*""""+"""b""b"Tw'"Zrt""b*"+}+r' g"""*"'*"Ҳ"%"""""r"""r&b'""b" "r'w &"j"bG+"+"""b""b"Ttr+t!wp""""rv"*"wt"""""""""""b""""ҷ"w""""&zw"""""'""""""""+""r"""""""&B"&&""""""""""Ҳ"'v"EJ!"""""b"""""""""""""""""""""""""""&""'*""""""++"""""r"'"""""""""""""r""""""""""r""rzp"+""""fj"b""""G"fb&*"+b*""w gtt{'rKuwwz GpW''My kztPФetPttw M}uPpw'z{tr@M{}UP]Mw tjrw gtt{'rWG{k*TwwwzwwvDpKIgA dvM"b{rФgrwf"+ںww ww}w wyעww*"wwڠwytzptw՝vwpt"wRu}jz}{wp"'wpEa -vwww'B}wB}tk'JwRwwwKzpw zUpmQ-b'gpGUݝw}b FGZmG{Jw{rww{""*brwwwwp+"""frtM *" D vm"wJe"$"'b{rz]Ek+ Gw"gg"BwvrKۦP"zM*'"rݽwp+"""frtjwPz"rfA""""b"""b"*r"'&r$p*"{[Jղ"""*r&}"""" rb&F"bb""""g"B"""""""""&"zrz]wvUPU-" ""+""""*"""""-""""""'*r"*"' ""p'rv&'{br'+{k"''wbr"*gj"*""+'rjT"""'zwvWpYYr"&""jK*"r"""kMwYrt""J'wwr""""""""" iF""p""+""*"R& '""""""&""""$"""""r"""""r"'""""W}"B%v""&"v+g""""""""""'"ח!&$"""b{zyg"+"p"""""""""""""""""""e"""bz+ Ч"""""""""""""""""""""""""""r""""""""""""""""""rY """"""""""""""""""""""""""""""""&"""'""""""""*""""""rr"'""""""""""""""""""w'z""""GGGR""]}+g"""""""*""""r"{"J"r"""'"&'"""""""""""""""""""""""""""""""""""""r"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""$""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""b""I""b++R+b%""""!fE"W+ ]"B-"&"*]BP%""""PUj jD'+"" %""ҽ'"""""""b""G'"""""RPM+"Uխ+"""""kw*r}"""""bUE'"""""$&w*wY"*""B%r&r*P%ҙy""""""r"btU "& """""""""g""""""*w'%yE""""W'I"""""@UUj'f+MYz"r"{"+bUՙPw ""kUe*"""""bGT "PTGM""""""ҭ@u&z""""""""""""""&"""B"""B""""""B """Br"J"" """"""""""""""""""rBg"$"bF"r"B""D"""*"B"""$&"""""""""""""""""""b"""b"""$""""""""""""""""" """""""""""""""""""""" """B"""""r" """"""""" ""&"""""""""""""""""" "b"""""""""""""""""""""""""""""""""""""""""""""""""""F&"""""" """"""""'"""""&"""r""" """"""""@G"""""""""r""B"""""""""""""""" """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""w+rf" rwuTU{xv٩B]ݙI]MM G] U{gpw{ ]YQD@"UQTw+rf"ݥ@p`rbwWّ+Ypzp*U]TY}gwZ]Y"GUGEYUtQUy@Ktz*p U@ ]pMMuUMGG""mU'rVYUTA}}{Z{RdU]UۤuTwwwUYQUQم }Yp]UGt@MTmv *ҲtQ"YMy}tqݔX"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""uwGw }pAD* GpTmJY+}QQu Pp ptx@Et*rA]DQe}tEIзuwGw D%w{}rgptw}wwpUXXuz{J&Эpg""'QuwwQ}uV [t]Vrz}Dptp p]jwwPUvjWzt@ZD@z[wrTpD wRIpDt wz}wWP}GUg"zW}zYut`]"*zEupwtEt kttg"'R V w{"R$]fPy֔ "GuJD"GBw]-ptD'g+ W]wZ "{"R$}]Mb`v @YgMpG"'& rg}&q*y{]w]TP*" Kw"*"wPDT'w }g"&""'bkrz'Bw  ]]M"""rJ'@"&r"&rgw g+}Fb"r+$r*J{r"WwG}EuwEZW]Pzgw]'"}וY*Fj@JWvTٺr"'{tp "FtZJYYP$}W"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""GzpZjMpGwGZw w{z}}] wzTUP@ tu]PuzwY]]ЕYYMtMPU}tu]GzpZj]U]@ MwtWUU w]]w@ DMէpM TUUpWG tpzwwwwD }D]UGG ]]D]UtդWUY@}Yw@T GEP]t]UՕ}GwGuI]JzݤDTTFW@UGzڪEWITuWYwwpWtYyMWp} ݕYY UT]Pw]Y]]UptwwpPUY}wGwG@]um] ם ppWPUtpwUP}wM @U GPUPU }GUE]]uwt]՝ݕU] ԕUUEwU tpwU]UU}}UU Ut]QEYY]]uU]wtTE M w@ }UwРumPPM]Р@RM@}GU]UUUU]zpGMtPMuwt$U]wp[DI }pYwKG}էP@]YUY]UUUUYUT T]UUYD]YY]]PUUp@]UEw}EPUUUpW]UUP tp{{twUyP@tttEGݗUD]M}ԕE uw@P]PUP YPMUD}wG]]Mttp{{tw]PU]wGMDDw@@@Gtםٕ@UGwWU]]]tpT @WTTp]w@@ @YUUM]TZu @R@P}y@TMUU wM {w GUuU WTPvMU}XUPPw}uY Ew]GEuw@GEWwp U@ UUU]]tUEwtwP}wGw WPP]}]T EDGwpGwU}pD] Ptw pDT]@UU]UuUWU] wGW]]ݕUU PU uzDYّ]MpGwTU]U wwMWUP pU] קPtԧvUTUMJp TUP}pwGtPPEEUwpT]UpP@EEUwZRwuYu]UY]ݰWYu } Z}ِwrWP p tuե{wtUw@ EGYU ]P UUUUQU]UUU@w@ WUUU]]P pPuzDYU]Q]]]PPDpPtUPWwY}UMpwwM PTWEP]]@W] Y@pUPUU ՕuPUݐpD UTUPPDpPtUUU uUU]]w]]UU}yUGUugwG ]]wwT PE @] UG Uz@UTpUG UuWGP]M PMMJU@W]UIGU}Pt ]ݻz pխytwPUw]]P}ݙTPU UUUuEM]Uw}UU@}G@UUM] utzD]}p wpP]UTu }]T]նv"{""E]$r@Yt$&"A@  rwWduwU&{"]' ]wWuj&"bwїG]]]{ayr+uv"{""EtTU}w b"tw}GY$""+*+tb{Q`BUPj" @P]I}$bvwG"++'wU" "+z}gBU*r&ryBY&+"""KWU"M ]Ut+"" *]'br *$"WYUtwb"zgztw$@Uݧf""fUupw wt}UEpq ٙY{GpYUQPfJgrוur]] U׻b"r+DYw"""+""% rb'yRG vT*[pPbw`p "%rk$u{`""MM]F]@}-"WU}"""+""%wwp}p ""'vY'UuwG &"z rpD@u{ Gyp"wA-+V -w it"&""""]U)rkp}UW{w-"" 'U""Bj"U$Dp"r+yD&"+*y E G@q]PU}G}ww]U]՝EUfwPTu@ݧr"]-"WWY{+"B EPP}E ]Jz PP w}Y ]]wWu uP]P]]YU@ G]MG M}]T]P}E ]Jz U]p] wUpMtD]uGpUWp]WWuwPPUUuP]tPU]wMJ] ]UwGMp Uݕ]Uݐ@pTUUݐUUUUYMg@tEYPՕuEpzzTTpTM PEJPuDPU׽G] ]UUzJW]]] DwpuGM] TG]@'DM u wwDU]}]]WUUpw+G+Wݴt{t tW}zuz" YDzwPYکwEPUtUM*$DW ݐU]Y G]IuPJU@Zٙpw+G+WݴݙEvG@ GwU}@}w*v*tАAۑY٧'RpEԗurzwDpבU"wUR՝GwyUy[ U&*gZd ҔU UUYuww'"BF{rB`Kvu]mWՙ v{{WYwwYPԴB{IY ٙTpGWy Y wDT]՝U{pYUJuPUDpwGw*}YyYwzt[u pzu[PEէWt]U UYPuDwՠE]UWEwzWUU]UU W eZ@wzt[u @pzwWW՝U]]U]DTtz]]zwFTU}zEwU@U]p&{YYY UPu]u]UPUY}]wZ@YUYuDw U ݽwZ EUwz}tW]ٕYYUzGUPwG]YUtwڪwTMMMW]UG՝ UUUU]JDUUTYU]wUp]U }J]PeUE@E Utj]UPG""+"f""ru"P r&[%vZ`""Du٢+"Kv"b&&{vp""""rw]yZPוEݙ%)bRU&Rue""+"f""ru"}ե-""wjR GUսz%""+*"r"rТE }&"R*J]GQYE'"{v"*"&" "&""r'+bguҠG""""&"v"b*G}b&tw]Te&&""&*p""r*&"*+v''"z@b"B*k{'wwG+""""%Zp Й}w Qppzwt tTק) p ՙUJwzYM}U"r"'rwz%bRԙ]U""""ҰYY-+UEUWWG] UUT]MݕU@ՠ]U] Е]UUU]]YEUU ] P Up]UU UEUWWGUU MUUEU]Uԕ]ԗDw@W]Yu T J P]]U]TPMpPU}G}z u UUPYUMWDtpЕE U]U]U]YUYY} tZ]]UՕ DM UՕUTP @  UZPu EU{}]U] p@p}M]Y]٥UU@wG]UUUPWUUUUT}M {wb*fvZu zRwI]@}]vyQ]QݷudEU YJ'B PU ]}@Pu&GUT{wb*fvZu@ EzWUUЙ-UUEwGpIGr @W]RY]&vِՕyuMԕ]YYY@]z' wvWԑPuPYppt@$"]MbGpUP@Wurb{ۤYYy Tժt*$yեME@ tPUPwDpPU] U]]}PwUDYMT ] @pwՕu@WUu&GMZՙuUIwPUUw ]pUtW]YW]UDppy} }UTWMPUE]t ѕM נU Up}DG ]pUtWՕYݝ}]]UDUyM}ԧ'pDpDGM] J]}wU{Y%GwWuw eYz{] twpu@YytrtMPt qwuU]E MdKkFPYTUw{D p ]TztUZPTUU]wMݤwtM]MzDDpwp D Mw}vp G}DuD}p @]]}pwנ ]y wUpYPPp@}M]} GPwPwUzG T t{GP ]]@@TU }GpW@}pwנ U]Uwwp]]]IUr{wz"}л׷U GPݷrGwzwt}}Uz+wMҕսw{GwU٪jGJ WTzG@UT{j w pzTwٺG'G]}JMDupt]@ztWw݅upwzUDwUDDPUDpwpUU]p{G'P]}Gu]MGpzzU PY}DT]@YWP zyw ԕ ՝Y]UEQEUPEMY] @ }G G}]UP pU]] PY}DuD@IED@ PYِdդwpݠp٤WPY TDp@ ]YP  MGtݕYUWQPP PUEDMwMQUUYYY] WU@wMwz]Uu wPwUԔpբ}pwGWp G]p W {G@{tG G PYU'DP pw GwUUUEU] ݕ Pw{zwZ[ }wJu[ ժww}]]wzUpUԧץww }PTuwwWYYݙYUU U}]j ]ժw{zwZ[ U@ uwTWUU}U]UU upj]t WUխ ywUuwtw'zttM]UDpwPp[YYGݗEDv էwz{G}zUUwwPD]wzw g'{Нwtt}U v}}W]t PUzwwpեtT} YY MUUW]U uDp]UW w*E]եj՝]]tG{[P]] @}fw+f{wz`UpWԤJuzGYpY@pwuvTdM]ٝ D'w WUWuGםPU @t{ wWup@}fw+f{wz-k]W pUupPztUJP wt@WUY}vG]MwM QYpp'w tݕ@ WGuYEwrzKpw}PuvTy@w'" ݤ {MT}yYupXE}GR UEDEU@trzՔUUY}DMwY uwpwzw@UE@@YU]t]YttwwwDwY{ՐwwzzzzWDUuwwP@}EGM@TT@ @tGwtM]P] WMw UYuwu]M ]M uM}wIP@}EG}PD@tDuME D}@ pDJDDubKPP@wtpGp@uttPuM PUUM@ UtwD] wW ]UyG]}]@wD }@WU]P]UUU@WU*ҭ}uE YХ z YwWE GrMG ]G$wG ]ЪwUz ׷ @twpP]]GUwPpwI$ }MP]p Tu@P@ @I{w}W w tYM @Wu@ uPP ]M]]MՕU wP]M GG  @ MUTPu@P@ @I{ww }קG ptP]J+{WPqtUtMtT]}w uW} PTPp]w tGGP]U UUTekTt]]TGwTUUUYEEu*֕u]]Jp}%WpI Wpmp]ںzD] w{w@pE @D}GD EJ@@@}wݕG}ztw}@tTEDTUGT]Uս]MtYw ݗtUYM}@yp}WTPu]U Y]}@t}]PUM  @ݔ}}ս]MtYw }UM}]@@PUU]Yuդt w]Дt Mw}TE wuWU ЛU}tgPtEGuuz UU}אY]}GtMw]UP DY]UU Yw קj{G@y Фzpuz] AחGMjpWUUJp wYU @UDDԝM]YM}t@ ]}w zz}`T M P @ p]w PWwwU] wWݝU]]]]@EUP Wuw P UG Mp ]@ p]w]P]Uq@ wG w qP@K@՝@ pwED] ԝQtT pY]]Y]EUP WwEtՕ @t ׽@ED]G DDPUuw@WUUPUUugrwJ ]up}йTpUw д@M GMUUTU wGMUUuGD  @]}z@tpT MtzwwMݕ]UݙwwwwtwwW$M A@Ip ]ww{w՝G P wԭpM@ pzwp Gw]]U Mup]UZUwwwwtwwW$  }wtt@ G tEp{'TMԕB@wyww}IP]zGI @WYqpU}DՐ]@ PMpDwwzGG W}p@ TpGwwwpzG U ]Ap @WJG]WtMwp}tUTUP@]PYՕU]UUUp t  @@D ]t]U׺ @ݧ PGU]٠Z@YUU'{'"jZ@wMZYt]IuwwP}]wKWwMP}]Ezէp WzywtYY]]UUY w P@rDuW]u'{'"jZ@YU]}P]ppWUݤUݕ]t U]z]TwwW Uwvwwkt{}'GUzw'wPrUYЧ֔tGYUD@zGYEz Y }wwjwGDwwzz @MwvwYY{bwzwGWpwpYwGwpzwGDPU]UztPP]]UUUUGY]P}wPYYU]wwY]pUUE@]YM TUrDuu@ZwwGwwW]}@PM@]wpppgzԴ} }UPuPUէw]wptPՐUwP{wU}MЕt ]]U]UUUUUUU}tuWUWUpppgzԴYUݭ{@WUUU UUUYutzٕTUUU}Z}]E]U}rww@w{M MYptkwZURUzYUVUPzw PRUU{wYYUUY@JUG{ 'zW׷M*Y՝wzzY pYPPJKwzU U@]UUP]P]UY]YU]YU ]UUU PUU]ݕ KwGY]uWM @UUYQUեgW@Y]U}Y pDw YT *M wpqM@ Y}wT}pG }wڕ } Zyz}t}Y pDw ݐUD wpM*GP$db BU pwp@wZ U{Gmpwp u]zwzݠTww{wpupww]Kp+wzPԝpGM M@IDDpD@ёwYt{"Gp}DD zmp-p]Y&ݭDG]]kG U]pMwDG*wzUw UzgBwzwwwwJztwWuEwU]])r@]՚GJG@gMdpWUG& - @Tt Y}pYPt]D UyI@GDpGDt B@j ])rpJ]P]I{DtG@tgUՠG '"B"b{wUudzb$"RԠ $wtGv'Ruwz`g"۠UUU-*jg%wYP pGWY]UYE ""{׷`UYiu$K'& vG]UQr+$Gw B"$* pGpz"*[bv @ k"ջ*kj}w*"p*k"z&"MJ E } &zZG tEKI}DPM MttwM]ݗ G U YQuGM}]UMU}ww}w} W]ZG tEKYwP@pwu pp@@]]w  w$-wuUDGIwzT]]p ݧ@Gw }P p׭ twU wI}WԐ}wWUWW]U GU@TUUUUUU}GMWAUuIPUU) mTT]Pw}}}PDUGwMU]]Ug u]Up wwwwUwwMMtwP}w e}zgU wpwU]wyGzGKuu[wtwDw}wWwWwwtUp Ppz PM} @w wW@D wp}wpGMtwyGzGKMwEwqGt}wwGwwtwwG{w b vMwwuw}w uzrwtrwtQUw}w[AR ]{MpՇ teFPGpzM]G `z} w ۭMպ{Wwtם} wwDp{ wWwwPw}Wup wwwwwqTДTtM@}tG@pwp wG@T@wM׷zG}wzuwtJJwGPMwGwb"""*""{jrb$}zwD*&z]DIg"Vf* Ivdb"BD G }JGUTG-&]wݷb"""*""{wzԭ'f"'FGp'@ݭzzw++*"[ٙWJ tpbwJ U D"DwGIUwwd&uٙV ّ[p`p""bYvuwpfYDYmz*""r*"""rm*Zuw"Fz@TWw&&r++ @Pp״Dmt}Upz'zzz@tݥpz]]wwGU]k]@GppwrbU &חTG]@wzvz&bGUz TٙpvWtztgu wR%wtpMwPDU GG ԈEtzGwG B p G TٙpvMpp}}uz{{{tgU't'b+v{pq'UrGwMw*Mww mBgg}]uD p{DЦpBg{EtՕE-"ԧbGڤGЦZ]Y]U]Pw}p "r wY-r+R'{wp@]B "zk{G"`zwtzw"&w"b"www@b"]j""D@tG}G"r D'+pb'{ }Dtw{Gz WEpwpwz Up pUtpMwwP@U]tPUWEw]ե P]uwwGT@ @TPww Uut WEpwpwzU] wz]W@pWtEGpv@Dg@w]twzwY tWWpJUUzwG wUUp+D RU٠z}uRDwwzt UuUEw]] U}GUtJy@Рw$TUM M} UUYwGzpttP]AwAG@TDD ԙݭ UPU]tEP]U]՝Y@@pwU w YTu wUuGDwGwpjwd{} u@}@twT@U  }U}pupP}up@TTpY]}ww]Gwpjwd{} T@uwp  ]G@t}wم] E U]}y@ETW]M JW w]@pPPg@ tDwDtp R}PzwuEUMyU}pu@M wwMGzp ۧ]t]M@JJuz UQPU]X}@wu GDWWyG}YY@J{]@TpwYUGIM]] pG}@tt]}ww@@tMtPU p]M+"+"bv"PgG'% Gj{t+&r yI] wG D "{ "k*wFW&+*BTՖ]T]yJP]U Wm"rM+"+"bv"}K'"zttwU}tzGj''zw*JwGb-t]u%"wgz'"`KpB*z׷pwu"""+"gw "kP]p'"""r*t*"r+j"+''*pbb&BbzJiPuץj"+mQZPMkمW VuyJWqp}pE}]wwU ]UU""K] g"zwJpJڲb"rwupG@tכ @ՙTUԐ՝}JP]}՝ם@ٝtw] З}G${]]]UUUUНP]PppG@tכݝy ZՕݙIU]UU]ԶDvQw٧W vUEZyݷ]YIPuG`ِٗt$FZ @ZQ] w]U]UݕizZ{Yw  W{ך}UTwDr} W]]E ]t}M] DYUՙUUUU UU]P]TU} YPYЧPUtZYIw]YYՐwY՝w ]]G w@ zWEpG@]MUT UUUYYԐY @ @ p }w] G ]Y՝wUUTݕqD pzGG @w]]u}w GG@@wUwt}t@pUUՙUսWDUu] p@D}T ԔpMUUUtPpPGDtWU]UUUU]U@Pp}ԠBEpTYUiu%RmUE UGtpw pDD pGPZJd@M tM] pM M tGUuz* M] G}'wKPY]TEwU JZ @wzuR]UG}ݝYEUYGuԧM]uzWYUYݕUU ]}M}PՕW]  JZ D@}wWWUUԕ-UUMwu ] p]MUuzDypWEPg Q Y]ՕytP]T[UUUP wJwG tGY]}ԧDP]yU[]ՙPUU۲t[ՙ}]wpzwP@P@p]ݙWU YUPUU]U] UU@D TU]tww]Et}PPݙZ]]UP]IYy+Gw{M tUvb%+EtT DMYDT]jKD] IDDvGwD@p$wI D]IYy+W]pwv'Ug$"b*RBrDYe'Vb BۭZ P*W j"۵K E+g'RyjBUUPE$"*BGTtpw ՝U]U"w"""'۷U)w'j"*-bUq"'frw*b'KFw zt}"'*r"jpw "& *f"+rg{'*t*b"'*{'I@-b}"BvwbDQ] }b{}WtzJ@pzWGt} tT@ w@p Q @pDGD@w D@DMw@ DQ] }b{Q }u@twvw GGu**r Kרw{DjdRD}w-wwwwנtDuFKwBM-"wwJzww @GWU՝ PM Ԡt'r"r'{JuaI@%*% Wк"{ְw@B&t GDD+GJv"dr'w' + @DdwD*PGw"kwp' }"J DMקKzwp}tWpJw U]upU]@Wu}Tuԝ] UPYٙY]tDPPUU}G uMpE]]]}tWpJw PpTUUUE]U]GG]UEUuUwTtppUGY}]@W]uwGPU٩MP@YUG }UU]YDu]Py Q]M wY  XTP֔wUpYЭDgT IGWpzGUִP@U]UYw@ WBPUUM wwtGppM] WGMpEMpYpwwP]PP]www}pGYW@]W]]ݝup]E Е]՝ Y]@}]IUY P] U]ՐuG U]Mwww}pG]pP]]yU]u]]p]ݻ MתYUJ ]@ZpWPUUIM}MU՝] ٙEEpVM@W YUUP@}DM ]]yD@TUuEGPYZYFpU{YYUw@wI@pP{TEPU]U ]z@UUYP]]UtU]]]TU] YЕUwG շDGU]PpwQUЕGwJ@wU@YuW}UUww K}]zU]UUUGuGtUMUwt@wWUUUUUUE]PU]p ]uwUYTwJ@wUՙU Gtp UUwUU}uDUTMP]UuwװtWUUZUwUUw WP@Z]]YyU՝YwwwDMEwM]PuGt]]UUUݥGzwMU{g}{]PU]]] p ۠ ]Y tUUpGtwUQ U}UUYUM ٝYYYYUPU}]YUUYG ]] @WY]UwWpUUuwU} YUYYWUP]UwzGwWpG}w ]wpTQٝYP}w}]uzpwwWUU U MYMM]}PTPݧwzGwWp@p@DMwt] PP]Y]wYY]MMGPJvKPzpwGMP]"U YPQ]w ]@u]twJ]w}ttzzuM}w E DptwDMM]zt{M]D @  YU]PէwwwTu Uup PUwwU]Uw TpP]U t@UDDU ] tpYM}PM} QxtW@P]ݷm"pu Gw]ժtut}@D} GTwuw*DuwU@pPGץ{+{W ]]pwDwtT@}m"p]]UuwpT]ݧ]UUU]rKb PUY]wKDTMDtMzrzЙݢGU*w&wG{ҕJBtwU*"zt'vtYYuw]UYpttw w{pw ڦ{uwFK@GzG%]]T{ M]UGw]W]]U]t՝@t]]]U zGzw{G]MtQ)zjTUwETzwwwwwtPpztwJ ]PEwU ]]Pu }IGuT]@]]G]M EWPD}TPU]]]UUYGUTtM ttwJ PUUtW]UU UDДA]}} E ]ЗpTEwwzMuzwuJ@Up } ]UuEuMZ]gwTUTMMU]G} TpW }wG}@zJwTPUuY} GEu]PpP@GtGGUU PUGDuUUP]]]UYw@@@] ]]U } @MUDD] Utٙ}{wW]UTtEwWtDGw p MM wT{ԫr  pwMMݧw}Ww@p D]UA PMGwww]U @ @twt]EGu]T{ԫr]tPwU p U wGWjкJ}zGzE zpwKGvw קuGwz]@׷ ק@zzfPe+]]AwP +Ҋzݝ wGEwJ-WUttwwt+UEwW]W'pPGwUDuMWrT]MpwwwwG U}JݕwJwwT]EG z@yw]p b{Wpݥ@PUw]uMGp}tG]Pp }EuzWUU] UUUEUUMGG tp b{Wp] ]Uy{DPUU@UUUUwpWPP zBYUWtT t}ww wwwtwGWUUt}ZUUM@GzupMU]w}]Pp utW]]MGyuwG VJTv]wp}TUUGz{zPM @U]DpPU]UUUUUݕYUtGwPUUUUU]]Dp tGUU@w Y}zWGGYu@]Mt@] tww uptGWEuwwM}wzG]wPTGGGMTT@uwwwpWY]YݙY]UMUtEzzMTpww P]UGGwTYU@}]]UUԧptw @]DMTUww}yEU}zwwwzwtwTUUwwGMw UwEG}TDwUYwztz @}]GG]]]}GpwE@@}GPUwt{tUU}w wz}]Uwwww TuMPUYYPU]UUU]G@ GEWU]Օ UGwwwwPUEzzETwGwU] w**b+++RpUJzwYݗUpJ]E} GGTwUժd}PWukz[ ]]UU]UUYTprpWEp**b+++RpU]PE`vwU }YYpk{wUJUPUDjPEݠr {wwDtwDUU*եUUFpyuUUgvzZ]Uժt]U]@GdbbtzzYz @wzMYUwWEt wMUUFWGUPEYY@zUP]]GݕYIUUՕUP P PUݝUtUz]pwgWrpuMMTWwz GtGtTG WwWݠzWwwut@u PttTG@GTGUzztZ uwwpUUUUU]UUUYWP@pEZG DP@u WwW]TM}G WYUpUUU wwzt wz[ݕUGw TWuEݭKtwtwvtGUUwwgtttKUw{w@p UwzwwwJDUUzzU pG{ pE}Gwwpww*YYUw ЭzUUwww wE]]YVUPٕUUwUPY] UYUUPD@wpGPUUY ]pw UEZGpP p{JzJtp]}GUwzwzjwZwG@Yٛ] Mקzu WU wYp@t uwwz Y]U] ԕPtеwU@T zwzjwZ twwUUU @zwww]uB] t}JwPW w}+@G @zzwpUw zE}ҕ٪w z pUwU UUytJKpݧJ{wWu]yKww}tMPٷzwYQIYU]UY YQА]U]UЕ]]UUM ]W]@UUwGMwP]Uw]]]DtpT UPPtpwzwzTwU]G Y@wwp ]MJPUU]U UE @ U wtwY ݙYYu Uהu@ P tpwzwzTwUUUPuUUа]ݕ] Uٔp@zzw U pwEPpwzD@zDMUtР]Ww YMPYMZU ]GwyWUUM PUUUE MMztzzU} TUwwp}ut}zzY}MwUuMWYUݕYPUP]pU]wݙ@wpݕYUU GGYJ]u@ ut}Օy}WԝPwGtzwwWGpW wGpUEMP T@UD]pEGw}] W}wwpYݙYU@pUWwEp}tEwGtzwwWGUU@M twwխPUUEw]PUw DԤBvt}UWpWUwwp@wmwPUgG pGzUUTwG]UY@wwWU@jtJpНGwUP uzwWDݙUYUG'wwYUЙU}wwT PUwww@UTՙYJ }UUU pMttwpPYU]UwUzw+GEpսիGzwpzwT DUtwk zp WwUuwUtڗ ]UUwwMYДuGwzTUU]]]UUUUАEz} YP}wk pWUUpU wzwEUݠRP]Uww@ PuJ]פJtGwDUywMwt]UM] uwU m tWz}Y]]ww T DD@W]pYwY]DQYYwJz rW}YGP wDzGT@]UUtU]]UU] U]UUwUU]@ ]M]PGU}Ez}U]zzutGwYU@Pw"""**rBuK}W'&@}p٧YIr+%VU$*W]ХzD]M]}UJA"y I'"""**rBpwMP]iwMPwUx EG"b"DTB}@pbrDGBq }w ww z'"Y-}MRG]}Mz'"zwrU'ZE Ԡr+}]Y]%""ҝ ""r"RUETu]w"pYEt*J"+} WץDwEwww{w }ԝE]PMGY U]W pzUUrww"tz Yw'{}My@zb'rd"+durݴt{Y'{PkyWEEP{pwGyG+G j$}zMij&ݑݕU]դGw[v }y'rd"+dur]@D b@YUw ]U'"b'&vt&$rUP&wUTUQ}'Gw"+fj"GU+"wrw'BU*z&r}})Bj+"++pBW U jM PMpt$"+rj*vr+w**UBwKz$PUf"+kE U ZM]]U]UwAw}]UYUtGwDpِY]Y ݙ@{zz'zv EUDEzbrb+ݙUtf'""&{w&P'w'P! eKtG}}@{wkz@+ "U+Jttr'{wMwZpDGtxBD)РݪJppf'""&{w&@G}}z'&+{w}@ݠ{pekb+z}dwwDpw'{zd{KEtgbwwj{wt+bһJrGwkwpwpk+" wtw"UUU dk*"""&*G&vrw}'w p &bzGu@z'wrUzwwwwywwwwz@pwpwwwt]Dwtw&}p}wD"wT]פ}]@PԺz*w Gpw tp@pzG w G}DGDMT uJu] G MUYwx Pp @DխM W tp@pzG Up p]pwtw }$Pv*z Mz}DDGP ЗEtz UyG}]GGt]tP  zpWI UU G M]pwpYYUU uP[tWIUpt}JKxGGpMJ}M]z@ M]]UUp UM]T ww@w ]@]twPP ݠMխ E}wt]wWT W}zg GJG Z]t@twMսwݗT}@D G pMEPMGTpGIptY TY Dw}p}WwW}zg GJGUPP}ԪEwwGGt}wGMKGKՠuU]{y}IU@Tu{zzw ]I]@ pMk} E@}tGGpR TPpMu}pG@] wwݤ@pDzuU}ڤDJ@UYWU JuPݙq}ww wDwwy@@wwpwwY EM D pU ]MDGDt tuGwWP}puwwwwwwZ}uwwUYQyJzpY DYUwuUp pTYUD@UUIGDzpw@@K z@pZt}UUYQyJz@MwzWYuqppppwzy y bzp{ UzzgzqztZUp]]@wzDyGzZEpw JygrwwYU%kYp WYU GtpzYU٥M " guwzYнrmۭJJ]UՙwwwwrGwDG z{r'GwGww+ppt'KGwzzYU Eww"}* ++{ Y]U }wGuz tGp WUUM@UYD ]EPU P} T }PYUM WYPUUMUWGuwGT Guz tGpU]]]pUUU]]U@M}wZT]UuM}pUw@U MUUW uU]}WG UU}PаpMPU} T TU U} EwtwwtJEKUUYYyEyJGu}WUuYДpWt UuWPU}PUUUPU U TZPUPD pU]MԧwMMw}wGUtPz@}GUU]]j '"j'wՠPDW]wJT@tIu@@Dէ}ս З]}ktwDW]GwTWtu Utj '"j'wY]zzE] www{JwwJG DJp]zDrwGw@wGEЧ}+]tGݵMDtK}}ZGjvښzME}IQ] еݷGzЫDw Ew٭ݔEywFwwpPGUywpDz]]PpwwwQU]G ]tЧwG]]TݝݧxGtWu ptzGM GpwWMTwwwd{ Gt Kt}w}zpg{wwWw}Y] E@]pwtU$}]T]p+w{ WUtW}ww]ݔGX}A }wwd{ GUEUIw'wzDww wtפww}{Gbw@w wwwwp֙MUTԧёXMPgYy@MUD JKWwTէ pMpwtEUUUut'"ݷw pUUUDG{WUY u rp IP}twwGGMpwwwwwzzz]} PU@ GGUU wp GwЭ WE@tJgG}wwEjdtZ ] @]}Pw]PppW }ET]@ zpխ}`JPW}UUU T wG@]EjdtZ ] UU}uY Еw yw pD WpY Dr]Uv}Uw@'[ M}u`w z} prppZ}tu zpU]UUU]]egzڪR}ڷ*MwJr wwFEwDpt] WPYw@Y]]@WuQ}TW UUUU]UY]U]ԙ @puK@]U] wGp @GW ]MuuWJUUWMW] JMMp T]UU@Y Yy]UYݙ]UE ] tuG TuuWJ]]UYDUu}Ut}]U]UU}v ` W@p Mt}t }w@P pupE@]TtwppMDM]Y]}T]T] ]]U]]Uz}GpGg]J}]]MwՙuPEtP}MWUPՐP}UYYzp}PTUUUUUDp@TDՐUE t GwwTuGݧGU]DYwU]ztv GwJդGtwTtPywu wwzzIwywJt yzwpPUUP UUY}UYw{yp٪[ztv GwJ]uw{wDw@YtKG&@UٕwZPP pvwwwzw]z+wwtG{u @Uw{t}wtvYUywJ}Gdw}] pI' +wUUE} DG]YwwMDtU UGD UYYUUYUTU]ՕUY}w} U]UYUwzwWUypU ]z{KzUtpww@zg יpt wE ]]UUU]@uD PP wppTUUPTUUYMDM Pu ]]tpww@zgUU]@M@tpYUU@P]Ut ppU}]wGPYPpp}GPԙ]}@P@P]uP]՝QU]U]]ЙUUpUpJW uPYuD]UU MPDEww w}W]G}@W׭w Uu}]UUpG@ @]pT]U D]]UUUYUU]WY TD@PtwUUM]}tzuוyUMPՕ wW]ݐ]Uz GpGwJ ݠЧ]w @M @MM t@}pM pz GpGwJW }@p @@zDЧy] YM[]݅z wKPGM@wzMzpDp DGpڥjwGzpDW} ]u{ G T@zutpp@TpwGz{׭ {@wGEE PаJ}GPpWPw{Z}uGGkGpDMz Gݙuw p}twYwE} pT  wJ]P GpYUQQQM{}]U]t@GTtWp ]@P ] P٤PuЙ D}wpwMGG @UWYUQQQM{wPUu GD@Gw tGEۥgzrwZ@G}MwU wEuWT]PP[ww@YI@pMM]wIpEMGUT'  Pz}]U]UY Gt}"B׭EpGuJ*r'z}UYw*wM {zw{D"tttrwzMvw]rG@wpp]WGM{"w@'' wzUY]}ww]GIGPA{G@M }D}z@ }@@ Е]݇EP@M PMt Ep wp]GIGPA{GDM tz@wD@MWGtP]w}MMGPp]ڽwGMMwMG zT wM}w]ԩU@Pp@ZDtDzD Mp׭}Er}ݥyUW}XU zзpWtp@{DU @ݲGpG}G@p tG @Gp}t]wt pjp t wMmf GWUU]UYE{GM]]@w@@GTPtPE@wpEU@MPYPՙ }@@ @JDGWդP ]W]UYE{GMtWDw @tG]U ԷBG"tUAUtGEJPEGPUPuZwpM] ]WppՕwp p}UYWI{GDwԗYUYUYٝ T+ԻG }UY wW-{DMYY@"Mw K{w@w@pM"wGz @{GDtGtppwDwUEww"{P  D} ]U] PwU J}jwwJU}wYt]YG EutM GTDUzUPuwGWUUUUY UDTU]}pZ J}jwwJUUU JW}YUו]UzwwwGwWDwBPUUtzZGT@Up pGUpt@}YJ}p}֕wkJwK@G @Uz]]]U Эw@pխpWgTU}] }pUPwJ{wt@yTU]]PMYUUY@ PUUYY Dwp ]YUUYww}{GDUMZ]]P GzGwD@] W}@]GJ tMww@Du }YPP]PUt wYuTEUwPPUU PU]UMGT]UW}@]GJUP UMy]DW]U} 'PۧvP]]}wDT}w]J@PuMTw]ԝ M]@W K]PwpM׭ p]UwY]U]UYuwwW@wwwPU E@uԙ-J$WUUEpwW KP ]ק}tPYP]UP}]zUUUUUU} PU]UGWGt@w{]GeQzTUU@DW]UUGpGwJٙ ]tWI}PT]TPG] ]]PEGpty]UU UU}w w]TMEѐGpGwJ]UU] P }]wM]UDP T}]}נRPU]MwpMtPGtF PЩpG]tD ]] M UEPMGwz zuw@]]M ] PETMMtU{p]MzԝUYwVTUUtGח]u}UZpUUU] ]UP]MwwwMwUUP pMuz+]TMDzGՕE@P ]P@ pEw p wէMwJz} Ԕ@ ՔI@pݕppMGD]]UT U Mp]}p} ]P@ pEw]]tt pg@Wݧ@T}} Fw{W]ttwGPppG TWw]з @wwGԪuwDDYՑI+Dzw@p@]}PUUU]UJtz"wyMU }Et$F$ZTzDWptTU UUUU ]DT+U ] gwwEwG Ъ}}p`vww w]U *ReU{{uER UG*vEե]Mж%Gwݰ W pff'pUUU]MG upQ-"]t} *Re PEbW] ]TUw+@MݥݭbwI{ [p "vppTՙgJty wpWU}BEkz}TT%GwMM d"rwg]&f'rWGT] UPprfFug gfvb{PTEtG}wU]w U UUUUZՕYД ]] ptG@ ]P@@]w U@U-"}P GDzw'"Pw{k&+yuvr[ݔWY*&u K@ٽ Qj*P-Y* MY]}]WYUG٠Ye"ٰ{k&+y@ ])z'[U] ݔ"j"W]r brzYrPD @pp@yW +]]}wQ]tBMr'"{rm]]*@]] ]%""TU& t"BTu'ZG"$T @yTE*+p@P ]ݐ]YwtvG]ِTՔPU GUwݙTU]]utMrWE]e"ԭ zz*"r׶zJ{zwzWpw{}pT]ttW@w Y UYGԵGG}T ]@{wDD  DЗ }D]P @zJ{zwzWDt}w@D]w@wGpkY YPr@MEwMwt  Hp]՛ ]tpB wpK@M{GGDDpwwzzJwպ{zwPE ]t]K{ DAWGwwzzpwp}wD@wP} @pD G JMW GwpGYY tpDt]w wMнPGwMU[TMwwKwptG G UWMwpM]}{P]PtJ] UP@@wypWUUUUUMPz T}wwKwptG@UݝpU]]}]U]Gz@ DtTzU]t UZwwWYu]tp]Y@t]UYtpUUt{}]]]UJ E YU]]yWUEwEgtYwz]]@ItW tUP tw]} U P] UUUU]UYYYUUGMDt@ ] ]UJ DݺWUz]t @T] wg"W ݭ{zpEpZYYIWw wrpEUZ)z]QukzW]UU]YUuUչt]e]UEg"W M-zUDݝU]Ywz"MYE}r]YzuGM Wpwww"rwpP@p@U YwGPWUuUfz ]!zP@]UD-+FGm+ 'J % ԺD]YUP'vw ݕ]UE@MUPU ]UMPݕYPUUUTU]wUݧ]]MUPݕEݙGW U]e U}ejTUUUG"*""&VqbT`rwY'T""z@}MI"Z'P"e+*W%"""Bwє@]T@{WUiҹr"R}"*""&VqbGE-b"wYw{pGY'""kk"wb -rJ+" U t'"zw""&""w]"'"+@ rU"{"pU""""""rzWe+p w@]u*"""++"r*f$* ''"{ZD}b""{Gt'W""""+@wٙWՔwpDݕ}аGE ]Y JGzYP}MYB-wr ЗEWfb"""-t])ZYI"r]EtbzpG}zݪ)'-ФWuQ@KTD{U AD"D&w"-D"@" yGd}MrF])ZYI"rлwr{WPtJpg"$j G{GUݴr*w*""r"ww٭r%""&Rp}fwP &vWb"RI Je'b"RwYu$ B{"fKTBtr D]U}׷+"w'BY)G'""-"*}PUѐr"""* vtb"r&b"tGw"""""r zr"""""+ d*"""$"""" yG""bf"{Ewm""r{wypztנ EMZw@t pww}{tp}PT wMww pDMT@p{zw@ @ w zTpt@twypztנ  w @z{qwtGM@wwzgz ۥr@TwGzMGpM}wwtJ@]]zfwGKyU$v]MMԧww}'rt}Mww W ppt{p@wvpv@`JfvGԠpJWWz' wwPu@Dt}wwG] @GtPWzpp}M}PGw@p @G]pvgDTpzתJ{twWtGGwMYYI  ]wGPypTUP YP MY@uP] pKy M }WMYYI  ]p՝Yu@@wwDpU {)շv]M @py{pUY t]UUU%w@ w]I]KTt]E]J٠UQy& P@}YP@ GYUYUUQuwG&uGMIY @ Mg'MYYYdGPG Rgw @] էt KJ+]MppwtwDz@MMMpWpP }'GpM -d UU TGwWЕwtDMpMנ]Y tupU Uww@ ՝UU]} ]wYwTU]UGU}wMUWP]wtDMpMנ]Mut]UwpUYPU GPWpw}GMՔPיYI UY]GY]UYT UU E]]՗yt]T}@ Mt@EEYDg MWT ]]Tw}wuG}tGWGݙGՕUvtpP ]Up@}wwGU Ut@]PE}wm z@wUYUUuWPYU]"@]՗DJKdz KtUz)ME@ЧJuQt]t ]qDGpK@'}t{@" w'} K ]"tݭT՝]}y wt wzUհ }"""KwY'Bjyr'VԤ$p @հBbr{j"vgJ`e"&qrYUM "vk&pҰ ]UU]Uf'wB" 'ٙt-"''rrUAr*"&"{"{'twG@}b"+brBM""*w'&&G{"'+`""""r` ww+&w"b}v]`` +t""""""rE"T$r*!)BD""t} + "z{&K "&+ Gp'""+"rwD Mz vT%z-"Uk""""""rE"DpJ]*""RPp"E{)""&+"k+Bw$Dz+"B'{PJ'"++"*"&"wp""""B&rwp*r"g*r+"""""z'} "&E]M]խ+*""b"'w""&"'*u'$&wtz""&EJw'GJw"""" G]@DDk-DMwzD@wgzz%@wwG@P ժwwUpKM}pU"r&'B$"ՔPWbf""B"Etw+zwgzW}Uzu} וUWpWpDYu]UwPuw@U}}YٕwpGGTI @MY u W pzwgzW}U U԰zwWw@Pw]@E@JwGJUZYYYuzpw ]}MttzEYU}PUUZUUDMԕUyVUzzGzTݐ uw@U] pzz UGztppZ]UِyYutzwQTPyw wtyYUYYqww]QUy@ @}w{DGYQU]UDUwUYUU@GUt]Uu U  wZPUI ww{ww w@[UpUG P]]]U]Mpp PEwpwwZUPU]UU} UНuwwՕ] w{ww wUPU@@}}@]UUа]]UUUp]Օ՝pwDT]UP}DpАT } P*TPUPu]]wP]zY@tUUpIK UPMpY@tDwwݭppyJ]z}YIwp}MUu]YtwwWpw} TTUTݕ]]U]U ]]] tP]U wp}tDU Yy}pTUuwwEPJUYE]]@""""""}'r{zru$&zprG@*@wM$ڧ""$ wrw"+""J mTwGBvE$"GWry+""""""Eb{www'""{ wwwJ{""r""r w"t{Ab{w*WײB'Gmzv*"zG''zuJ{{'}B"""W]*gt""`bpGf '""B&""w""'w"Bj""rrK '"""ZwPdg'%W}-""r GڗpvzGp"t@u@pw}{Yp$"GrUUb""ww{"Ut} wt} wM]Y@JMwUtwupG}UZUMY P] U] pw]G @MwtwyGD uTUt} wt} wUPu D pt@twYyptGRR PEw]wzݕUUUuWuDYITڦ]p @UtD w PP%b} p}YU]]YUQ}IUTղGM}W@uTw K}wG @t+ wGGv JG &wGzrzJG] @D{wzJ}}zGwݕu {p"zt  drQ] ]D]Y Y] UUw@GUЕYWpUՙU U UY ՕUU]P]P pP ]wPUT]Y Y]]UU wG@@tGUU]tj T]Yu}UwPWUU]PݙYUU]] @ Dp ԝUJuGM UYP@TUU]UUYUGE٭t@pPYUGE]ETUUYWzݠTZG]]@t M}pwp]]D PpzU}Gtdz@]U} wՕ]UwT]UvM PZ@Pݕ tGtTK]PUU]tUGtUUWGwE UUPUYU EUTMu UU vMUU }u@]խ]UUM@@PPGPEMwZ]]UU@wTMW@pwwz]]y ]UMtU]tMZUI]Y]ZgzWPMu}ZUG]MJ{wWUԺJIYUtw]EwG]UEP G}TUUptWpTGYIEUK U]UUPMT@UUU]UMDMUU]U@qФWUu P}EGXՙY]ݕ@pwwzzPw@G[EGMGD} @@pݕ@U uw] WYݕU}D]Pt}p]@pwwzzPwUU pD}}TUUн]UUG]}z up@[WUPtDT }J@}ttwDW D@}GzU@GDpG]pzM@tz}DDuЕUMwtWUUU wyEtwEGM]EzzuGwGPUwpՠ] ݙptP UUUG]TJT]UUPJtGDwU]G pwppJEZ P]Yt D{wz+g+T Uptzy]y]@{ T ]DzG]pP]gWG}TY}jvT]UPuUݩpegUU{wz+g+T UՕDdwZUQYPydM] Օp`JMZ ]uptjwvw ]Рt*խRtzUTUuW@*&{ruzB]UݥG]UUYuz-gr U*"{'{ TI-Yw"&]ԥIgFjwYU p} p]UW pp]@UG}P]YUwU]D ]]ݙv۪GpYUmgUQ]P+ @U b&"*&{W'U'vuG @*k ]@t TMG&ڰ* Tf*'BGWZ}PI P W $ZGUpb&"*&{W'yTug""jwM]wu}uzgz PzYp} }r D]@uDG"JtWp׭Dww&JzG z@w{pYt&&""+GIvзU@]m*bb*}""*kwE$`{ݥ"""{DױTUukr"+uPtM}YEMw M GP]KpYUpGD]ЕYp"ڲww $Z} ZJwJz WPUUwzJj"+{twtdBw wzvW${w pwp}f]$D}Z"jGW] Ez@ {T]uw tv EtzJj"+{twpzwwzdbbzwwpwww"+{"{KuJwztgwzw} G"p+ zwէzwwzUuGzb&vfvpGw wUTеz`""rt&pr{zgDrrZ I{w'mwp+&j)WKPWzztݚ uK{zkf}԰yuwpp]MDGPאUTw{wwz*}GtvpН{W}UGf&Fm}upGGTpww D} wt tDz}p@p w U@ Gt]Mtzt wzwtuPGTpwwD@wptp w'w w Jwk@zrGp@GGMJwwKMwwzW-wJw wu M WwWwחz}pWU YDDw zڕUUUUUwF"rgtPUy kpjT@{DI GzEM pzw Urzp" pwwGgt ]} }wtzgww@wt t{Tz{tp]کp{W E wUwYuutytPMzWGEGPժw MWEw{WUUU]YUEUpDUWJUw M کp{W tPYuwpWUUw]UzywԤ*wzTUWJGE p{z@YzzgtUwjpw]t'ztGK www-wvUUݪw]] ]zzwwwDW@EG}GGWUzzGJ WUPtwG}]pPPUYw ]UUUTwUUUUwGtw@TGUMrGPUUwE{T{wZG{ z@tPM}GЪJz}E@G @ywpD}GGDMp p }w@}MI@Twt@p tTDU EGwyW @JzEwGwUuwtp@@ @@@{K zz VwAtݧw{}wtzwtwwwjT}DrDwww R}MԧwW@w@@]pw}p @DPzwWEwDGY{}ҶMGDz] tww'@w ttUyw}}GPP@pG*@@]UtUp@]EtwtwwwGWPTY@@qwJ+ yGGpTztwGt]utwtpwzw M}@P}pM]GwMp}PP]w] MYUYEz@tGWUE]MU pU G Ptwtpwzw] MUGw]MUT IjgzPY]utwPt}zTw]]yPt]IUPT UwU]wwwwzWuU]P]U @ u@wYUEY@ETYYGvYGTTUTTUDwtu]upG TUG{tU]Uw TD{WUUPM@w  pUDEt@ԝ up}* GD UX Pz] pp{ pWpwD}@M}tG}}D @ tpM tw@ @ t w} z] pp{T]pwwpE@wwG tt}ڧ@zGJ}wHUwAw} pG Fק]Pw Dt@{]tWwww p ]YD[pPtpM pG GW]UKM B pUQw}W`MGpPPpzwwwwwGppww&G]ݧGG @ p P pD]]@MtM w}  DG} U}ZpwDt}zw{wztwwwuUpz}y} J UP@@] UME WYU}UԐwpMT]}zw{wztUU]ݙ}wPUUww]]UwMGMUtJwWUPWח wݧ@{M@DzDw@]է״ЪKEWpԤwUGtzwwDP] PU@]UUw]UU]DDuz׫zGpU{wu }{Z]Ut@MpZpwUMTUU]UUUzUUEP]UP MGwUM{U]uGU}zG+WpզGwwDT]QE U+{"+ktUJwzY}ZYwMETww۔tIDժgUgpחztz]YYUtU]wԩvtWMI+{"+kt]UUuwzzt UUvw"ԪڴdҐzT]DTTYݽrwkz+tp'Dr'JwB@ mۙwfJdgBtUժgTU]]Pww*b{wp zwGwԧ'zzwzz wwztuЕYYYpՕYtUTuYݕYUUGwtM]]]Y]YUUzw{z]Yvp]W}F{  wt{t*{w׷zwMupA}t}GwMUMݐ ]JwUEPYTM'wwDWtuDU]pQYUEuݭpYw{t*{w׷UY׭jwpD DUw MGAw@J U Xէz}@wQ D}zwDw GTYUp'ЗYU D YYYVPw@E WUՙJwYUUU}Dw' MU{wKP UQaUGz@]QAI}rwM]U wtww PuGwttwwY}M] @wG]UU]GէGWu]]pU] ]Y]YgwEtw zww[}pwYtWYptݩtj}E E]G Tw էzՠԗ}Iw{wY]Y՝Uՙ]Pwt twZ}u zww[Pݵz wUUDwYUp{tgwww}'RYJWP]wrwGMp'GUY{+vGY$vDEGYDdvwjZrwPէz]UUDw@JJtJwwz+g'w wUp'jwtwwMpuYYUZtP]YUUYUU UUPpp]YYU]pMwEYUYU UUwFzW t} GG{{' pU}}wUwzwVZUtz@pZP w TݧUw]]]GTew]M]Ty{zYU]UUY@UupХ+DZ}zwVZUUUUUzGTYU@]]U{pР{ٝ@t۔YzyW@EME}zzf{ww@ ]UUwtMUU}RYUpp[՝ݥrUzz t]YewPUUU]}{{tuzwWwDUUUBbKGYTwwzwWYMU]tP] ]]UUYZ]ڕUYUU p@DPUUUUEUwz]MP٥+EuwUuTDtp]]Pw ptGz]}W utMGttPU]T zpwpPM]@ pMDETE]u T@t P ptGzDUpwG}pMMwM}@wMp wzt  qDW}@T uUUpUGMݧ]t W t uZzzGG D]MptwpP]ݭz @t G ww }խwD ww u}wGM tٝ GWUp YUuUY YuPyMU ] ] GUw@pGU}MttDDT@W UYQYEKp ]DJpЕwWyu] P]YDY@ u] D } pJy@wT D YTPUYQYEKp ]WUYY Ap@wMGyW%հ+ ]Ipw{I@]Y ՝i[M@yM$y ]]z@RYUUPeU ptzDYDwZ]ِYUUUQDYp 'ЧJ}DUt`M-ZTWM]WQٕקpG Gwv+pJp p'wwr-WPpwtwpw@E}wDUTpGՠIwUQUG]@GtwZw@ }EwEЕ]wJwy Y w ]]wEp Y G GUP@]UUБUE}ݔ]M@GtwZwY wtzw@ pUtMpwwEwG@ۻTU]Y]UUuywTUJ@ GUUU tДݕ۝P]ՙAuZt{wPUU DY]Ep UUupv@UpwpMUU MpzPYYMMUp UMTDUP A]pU @TM@pU ]UՕUUUY]YYUUU ЗE]}]]P} wtEP]pwwww}GW`U pDEGw{DpT zUUY]wԵ@wUM}T]GtPY ]U Dp}U}UYTwwww}GW`Y]]]M@PUU]]UDupUpTGJJW]}tGGGUTM}MzP@}UUYp WWUT UpU٧wzww Gw ս@w]UUUUU]wwGjzdWMPGWPu{'{] ]UYz@K]DItGՙtwMUY ݕtPUU]]tt}UE zZTuUmU]YսەԔU+jpr p zEp]t ]IwkywGYMGUzt gydp puZ]YU]]U]UUpwTUUtwwuzW ٧+jpr]}Pp}{ЭWYUtוU]t{+Gbۥ}UtwwE TMrwtUUtg&tpBwv}EUgb{wwrWP]yPP]]EGD$"vwPGJw[zt+zzzUwzw wwWPPkuEUDPYP]UUU եUUUYUYUMwwwDwUUPUUYUtzwwBJzWUuzץUzP MwzzJj[pY} ]fz"""ہ&w'iZ{}f&ywUkzk* wp "״"*J tP+'zw U]pPW} P{ڕuufz"""ہ&DTz''zwR]ՙYYYuGfj+zww Urpugfi{wו-"*+*"{$wMGr*"fr}rwt'vjtu`w}p"""b""W}bpDw"YUU'"+***'"G%'MpG""BjFww }*rbEUQGW tyUUtpwwpptEwtTYU]w*w}G]]MU+{fjrPY {PZ"BUuwUGtwDwtWzUMM DtGw }WwwTPPu} W wt@YP]YY U]DG}G ]]GtwDwtWz]]Up]@TYUp]]tE@ Ww[Y }D}wu]E{wwJGz}G]w}DYմtT@ UU@uztPDUP}]U]Pݭww MWwwtp}'rwzYzgw} }t]UUpG@ZU]]t}PPUUYw]U]T{Y]UwY MMUUtMYtDwtWU}GE}wt UP]++ww&FwP P}Gwp w ԧ}wWMw'wUwP}z*З]uGM PUխ@ P }w++ww&TktwKM]Ppz@{GmJФ[ zzt Mupzvg @pժ'w wBt Y pz$&Jj׹ @ Ew M@tz'"&']*rzvwwz PWUwzk{w p ݧrkPEtGz%]}WyGzwwtwpDuPUyP@@ ו] ݺ  }UUYW+ wuwww+G "+kprݠDYUPj"uwwzuJy 'wyrk]dMwzMIg&bV]Yݝ]UUխJ]wGwMI+G "+kpr uDrkMtYGpUUU""+&{}+ y$K&RwwW]M wG]"kw+pU"g"p B*vbrpE%f'"&"w'rWUyrkU}zp'"'r]rrrzvz+*zYz"{Wz'Ptf"kpYQ pEUQ ]Wu}UՙUU}zp@YYUYUݪGrtYuI]wrrbz* MEMptJwp]Ew{u UMgpT U K u] ݺWuG]}}fwz ]YЙEٕUypեНMI}JwpD]]U]zWU@U] }gpJ*Y]t&{GPUPY+D@]U]URG[ ]e {{vէMUuGpUU] ]KTݺ+G@ېY}}DUpv YݠTշjvw]]uWp]]}QUwYYwTU]UUYUUP T]]QIݙwڪ]PU ]יWwD ]Uy@wYUyv]twD+զze ]WE@UpppDyDDpww{tt@{tJtpEDڙYUyvpzuww&ztGpt+qr y 'RRrtvQmjKg]}]U%RpwzиGqwZAԪՐ%"G B@U} wUYv}uB"$tgU]%z-BJ% F{pHYR**kB{zw"r{www+zֲf "zzwԺ׶&"*{wD*G}rG"'&pb*YYuww@w{ݲf&&F}`r{t}gpMp yY F $ p{'JFwUtWztUЧQUp}G}bpywf&&F}}GM-f"WJwpwgwpwкZ@X]DE}vjPY"Y}]YtMy'WYѕ]G]]MuPf{zZMupF@@UЭGw'""r` vwrGԑp KptzfUqէwwjpTtwwח]zw}wzzzEݥMG@pTwwUWwwwzzTwGРb}zwG uwwwk{@Еyzwz Qu ЗzbG*IJTU)gyu]t}@QDY@EtՕywGg{wJ'rrf[ Uuw Quuv݄ }zw"vzp`*) p"""RDUejrf{"g$]uwDUU%$wwz{rW y"rbR+Օ%"tZpGQrw}RUUYU'wv"Z&wFUU%pz r++R$KDW]ٙ{*"zf"+mw"&f+{ww"r{r"{zp'""w++"&rtw*++]]&z"G M""""rKEUUujrbw{fԻwp&Wpzu [MUwwWppEUYIUՙ]wPPYzu{WU ]U}PU}eUUUZ]wp&WUН] t`wzgP ]]MMwG'TEU]vTPPuwww WM wY" UUUPUyםYUН}RUzzzp]UMJUUUPU@}wGg+J@uU*&zP ՝YYvk{w MPUP{zE] }w]t@T@]MPUU]]U]] w@wU U]U@w @Uu@TeUpUU WY ]UzzGw+wZwp I]U]vyTK ]ݧ} pY}P] PMvpJTٝ}]]ՐYu}Uו]zzGw+wZw D}twpА]YUݙMuU]}ZW@u mGY]}JPUkDuG]wUUեUEMu]{t GUU} pYUUUm{zJJ gGm{DUutEv+*wEEd Yp@Օՙ}WuYU@P U]YUUUU Y ЕUU}]ztY]U ]UU]pPU]YDGwDGtw GMP}wT}PMАPWp՝D EUPwtwGWUUUD@MP DGwDGtw]DptTPDMPPEݧwvTU]pzGUD]GZGЕyGPw]}]tU YzpwGwUGpwWwwuEٝD]U TU]uwwPU@UPYUt KKw KWUMEwWWUUpGwwtpzMP  UWJtPUUUUU T ]U Ppuw@] @Mwt@U@ЭtzWEG PMDtDwpהwDpU]]JyPU]M]]M@ Up T՝]]UPU]]@M UDtDw DpwzMIMtw@@}tpY p u UE}ݝЕ}TtT ]YU}MJPW] P WԐyU]DP uEwPtD G GWM] E@׭GG WUUݕ w]}TPwpMt] DUЕUPՙ]P ] ]UUYPY]]U]] w tw@MpDZD D}T@Q]]z''wIE D@$НMj*Iw ]Q{ttP]Х{pm PDUv$gJTّ՝P UUIp w֙t٧z''wIݙU}@YDB]r*pWQBEtP]ѽwDwbU]{g"rM}EU f}Uk'zk}pݥ{pU]-"+v$*  `+MWEMGz]w$ Y]UjGrDyIUUеPE] YE] ItMPUY ]  JYUPYYUYJ zݕ wЙPtw+V y wתPwTwzUMGդwwpw} pqPJ E]]@uwtuMPTGEEwpz}Y]]UEU}tUuwתPwTwzYUՕ tTUUФ]UU tpGw}*P]PU}wwp wp֤wwt}GוUwW] Y@p]p]BUU pvGPUuwtP PխzwGwt]Gw g}uP zwwUuw@t] *GtTUt]p @DDݙMPՙz UP]U]UDwp@}YYUUM GJwwJ wUUuE}YuUYpw P]UwwztZGzz} MPוw{TPEtՙpUYzPywtUuUw{Z]UUUՕU]DYU}wUjU[]UwwztZGU нz UpPU]zwGv*٠YUU}G U]YE}Kww YUwwՙUU@ٕ g{zwTEDEUywtU]UU zvKD}Ut{wp{W UwwpwU}pWUU}g ]W]U]u ]@UUU]U]]]YٕUU@UDGYYUYU]Uݧ{wݙYUjMUPUU ݤ&U]ЕUwzwZU { UW]}j U JpUUUtPu }UU w*JԐ@ Е]E]U qwE]MWupwzwZ ]]IWPuETIt G" ]DKէJ PՐ]uPTp{E QU p]M PYPU]uBEժwPtEUu UPUY]U ݵݧtpPЙڧ Mz wYUGU pMڙUq}pUНq@ pvpY@Y]UUDU]U]]UUwGwPEMݕTPGGԕuwwzjwjDݡGt TG ]Aww G]ٝݴUwwM P} wT YDu{wUUUpzjwjDPG zD}DGDP]M @GwPE {VPtwP P ]pW PwTMQ }UA]Juuյ @r}٩JUww}D ]G{Z]tUzM@ tzwUIpPݥTpzzU qGDtjYA@DYG]Pw UUtYqG@'Uu{w}WWtU]אUUPUPԧ**GgBIWw W % TM TYPI @z% ZUD{'gDWWytzUP MpWYt**GgBp@@zuwEUqu""Pp } EY Mrwq GzGԝ]yJ+@-ryp@{}pDz}Eי)b"]$&rUW}uGt"VEYwwwrf*tКU]qwwEwwPYqwzp{rw{ @]uwUUG] TT]UDQwtPMptw{GWV}{YyP{zb*+ Р VYj W}PݢD٭Yٻz]`}UjtB@WUU@U]EwU]W}p-*Pp֙uzb*+ tpp*Pݙ`IGPz& ]IBMiFpZYQ]"v@ppYPڐUEWՙUrEk+rZu @zG]-"BG-U&{TY}T}pB"v]}WzF'$ՙQU@@U YY]Up}UЕ՝ ]UUGU@wwT]Upw W] -*tUYY]wzg"[UwPUUPyzwUpDQAz}GP@@Y pW ppMtJ JG pPUUPyzw@wMU]EywzJwy@rrp} wwtMP[]DD]UpYy@{@w}{}G vG@YU]%k]tp{ @ppUUYUYDU}D J"rݺ׭m`J)J MwpYZzwt@'Kzw@@+GtwGwwGtz' @@@pppYtMBFKtp@ujwU PDtvGPz{zGkwZ@}wwWYwyu]MJTz uT]pw@PuutwwYP]UUYuMWUT tGu{MM z{zGkwZ@P]MPнwwwzppUUww }UнBYYwKp Pu]}wFK Ugz]p]Dw ZЭ UG`vGwpUw U wj jMWpwj TUzzpMYwWUYJwww t] ]UY MUP]UUUՕ PUWTwPYYUUUwDEzMWUYUUE'wzttUu{E}uTJDpEwMU P """"w&r w}Ym'ZypЦT٠ z+ $ ]p{'rpTMw@U}ZYt] m"НI[Ѡ""""w&rzt@ r} @wME"rTїTvw rםA@P&vptqUT -+UPmBwQ]EDm} &"rz uMUz+ $"" ""rp&DЅPMp}"rwUp w++u ]}}GP}}wJ JYU@}]]}wwݙՙUU Etwre"{zYٙDFDkU P wf"""  V}z]{W}Ի@}]Ubm$ZKU}* @ PP]Ewz t+]t]wf""" Y tm*kZYj]}'w*t]BMw {GPTu+ФT]}gZY R]P՝]ٙRE""+fW gV}P m]yJ'+"r'ݦ"z++rGU )}"z WUD W']YUGIM}I@DT PT]UUEDGwwM]U* zЁս+PЕY]wwwg"PUUGwwjtwGw wpWPMpMP GTP ]DWu}ٙUUtpWUU]UUU@uUQGwwjtwGw} pwpUUw]]UU TuE}ՠJBTUU wp pUT T}wGPEPMPIY UYU@WM}ڕtwzPM@QYUWu]PUDwљUM Mg] WUpvԭ]Y}ЕU}@wpU pU}Ww]MU] TUUT UUU ]]p@  U] ttw }DuבYUUQU ]wzwGZ uwwut[PPWG ]p UtU]Pzpݭ}WwTYUY ]U Gu*@PwzwGZ tUݥ{wwWWUU@p]UPpp' G TUU{u@Y ]MEtw MppݕUUDtwוpZUG ZM}zUի{twUUUzp]U }KDժwgZW]wwGW]{wwPէ] PUU{[{GEPݙpDUGYYDU]U]] wG}@U UwګБU*E] PpwPP]ݻj"j"GG*P*z'U%TWpf"w" խz pwMk "U* t&'"vwpZtGWW}u]pd{ "tj"j"GG*pU'&&wPՕbp U"&j&"vzA{pg&r'PJTYե*jzw*"jrv@pr@pzjrw{Mrp*&"fbZwrwGt-" TUUp+""**+b*@h&T@ݷwb"ktz'Gwjkr"bW @Mtw)GwtwwwpzDקwGqDwu MwUwPY]p] @wDfwB  "GzM*"M@pDwwGppwԛypJ} ]PݕppZ}YKYU]YDutu ]}zwww]]UUM]U yխPݕW] wGppwԛy MDwWu PwU ]w'UP]F] p]uݝUGYEYYq}UTY[M]YT ]DtDD UutT]]wwGEw W]EPw  JvwՐUPwwwwTEtUuMݕWwWUU@UU]UUT[U}pU]]]} w@UE TݭP TՔyw] wtwwwtWp ptGwpw tp }GWWU]tՕאMU ]PwwWUUP]UYUDUwDED}EW} wtwwwtWpE tpwt]U]wW PUGpwwwwwJpzKUYp@ PDTuwwpGWGzJ]UW tMUUݠGEM@yGՕDtWU]}M ]אUTuGWUݕՙUyj UY }Y}}UdԤP]}w{pwpPUM]UYUYMUАD]UUPEUpDGw}UUUUwwGt' ED}tUwt}wW]MtTwp*DtUzzwY`pYE@]GtyWzԩհ}אwIuzwTUUU]UUՕ ݐUU TyG Wp*DtUUEЭ{zwUpFUYYp$grYYY{[ WGrz +*Ug*w@R'wrUյFU{*r'W{KU t'$Uv'vG@׷w'ڝY{zYwPUgzwGYyPuTUYYUU MUUUUUYU]UUE }UYYY]} YYUUY@ J uG E@PP]Gpw'ڭYEzwwzEw w} wwwM@w]T}Q]PUwWUUDwU@pwt }]zwwzQGנww@]w]UwwpvgݷTzzzݕU}w{zpyZ} t Jww}]zP W U]pTw}}BUU PE YYTݕE {Y]Yw]Y [٧׭wPzzpMGuMw UPtppݕ]UDMP]UYU @DDwwGwUUD@wu}TUwtEwp pwMUuTUt}zԧww ]PMwMt] U @ @PE P]PU]]@Y]qEUY]UPUUPUU P p]]t}zԧww ]P DDtwDtݠWEpZrԙ]wGWM]]]uuT]Up]@U]P]Up]TT UUDGIUY]qU U]U}GTUUUWYYu]$y YuڕwZ-WUYEpEwUE@D]UݧpP UU]]p] ]ݔ UGpUY } ]P@MEpDz}]I]YUP@wY ]xw}] W pz Mp@}PTp Q}] D @M @z MtWuw @ P@wY ]xwEMGW Up ppw@ zUU՚' DRPpz@}z}]ut]P%wwTUuwzzt K з z}GYE%*EwG QT@pwwZPU]՝Up}u&]U]յW eGMp@Z&}Tw*rGwMЫtMz}M"TDЧ}Jwpgww ww]wtww"M @-נMD ]P]UUGU]PtpYMMu]ݕUUT U]UY U]] ]UMD   ՕP]UUG PYU wwpYt)UРwGBwGp]GE@T P]MUu p]U] PD]D G}tP]DUUYPEz]] PU@АYUUUUPw[TEDP Wp M ݭW PYw}g}G]PUKwtPMP]Y]UuUWЭT] tt @t}GDD]Н}w G wpzWUU pjwtg֗e }zuVP]ww}]UBUYyYݙФTuՠ PU u{v]P]UUUUMEDe"T]ە jwtg֗e ] }ZWU]ՙm]UU]}-ՙ ]uwz}wוV]ݕY" MEU]UyאVЗݝYBU wD]Uu]U]UMG'Gզ"wݝݡ]Ur"U}UUwjIDt]U]pY]U]UU]ZUUUZݕ]tM ] D ] wT]Ue"T]wDUUMխkP՝]лgkvtחyptyWݐՕ} UG]tU]]pTwk]}U ݥwYU]UUUUQWM%w]WUMgkvtחyP@pw 'zZYYݙwUUY]ݷz]-UPp@RUPUIKwЭ U]uzw"zzwG Uwg@W]R]ZI] mR ]תGGz}UUwk ]Uuw jjKp@]{ԤTpWTբ"{}@]JDUUUzzw UuuUUU]U UYYUZUYUՕ ]UPU]MU]z]E]wTU%wEtWY]wzW}UU]G{`"J"+Z}РpwWPmf"yJtU}vfWI{bKy"$JMe+""tIUU@{]mtF{ jTIy{`"J"+Z}@pݭDrbwZMwwUUUm""&&" urQTYj&DWGU'vzUp"++&tY'*"gr t]pw٩}"&"+fz'TUy"pUp$""]b$v*'wYݪrZpw$g]"""y}p}p@p@EP@y QGwYM]}] J'zT{ }Ppժ"B&RUDpwU] zw PpG pjYݍqw}}]P EЕYpݝt] p@ t @G y}M PpwU] zw}T pDwwwj ٷb RWwz}ԧ T}@TݵJMw]EuMpwIG԰ݝD] %+wt MЕYP@Dw{ ]]]YUwu}}ײrzEp}MM$E- %Ww MIU@wz{{tGw Bt pKw{JY}wJD@@pK@z]w }v}@*M DtPJW]wpvtMtw}tGwTm  wY U]I}zPpWP]p'pPWyz ]UUuMMtEWwpvttMGMtwGwwwttwwwնK"GwDwU p@P { P׽zzQYtuk DGMpww v@pM}zGЕUЭ{p'ww{ PJ}w{Z U t}P}ww`WfUqwzz{  u@ U U]]U]zDDP]y' MtwGU]wDtwpUUzzMpzw }PwpPMНwztG P]]Yt]uGUM UEtwW] ] UU } Ew UYWMpzw M pzGu ]pPKtG{WYY]UpGwt@PЧ@p{D UYww* DݝR]pTp]] wDw}UYuG]]UU}G]wuй}@ YTU YUYY]t UDw{pp]UPptTI w@U @Q U]YM@}t]U]UՐttEPp]UEw E YYUU}'[UEWb"""+""rr}gr$pD۪wrp'"{pٷPy 'Z"&'$Iv&&+"BwUtZ PK]wt{ -"G]ru*b"""+""rr}p pw'"gKݧtMm{w""k"ww]Mw"} qJt"w}pz'&yE-MtJGz}GK""bAjp"&}w]p׵z{'""r'G"""w"rwZG w"rrgzDGAu}Mkb""qu]]ekpmJ]}kfҫ }] U@z U+UUuw{W -"GwѕP {&"vwz"jr'"+""u]gwgY]{kbwU{Pyי&zyk*ݗ ݹ"kk@ԝQ]U]DYDzi٫yjr'"+""u WХw'b}wUUp U"b+"FMreYU&Vz]U Y'bz{&*+ggwY+g" Y+wkBpyٱU""j"g'rUYykp] ԥz'""rg]*"uvMݧ+Bw{brִwtUP+"]IXYYD@БDP]]UpyyYY}wTUUՕpt{ziYTPff }Yfzk pM[T]y z}UMUwwzGGywIէp yzzzZUU]UUUPUU]wJtGuufzkU }ݧzUݴYY{zD zPUڠ]נYTP]սrwww{z{GzGwwzpF'w{r{pYtMM}RݕUI]]UPpwzzKtww}{wUwpwww@EYUYU]uUU]YUUUUUUPUUUUՕ@DU] ]UUUU UYtFzWYJt Gz{p@YGUwzwJ{wG׷}wzwZUu w ] ]wPwwݭ}WPyIzY]]YE U}GUzwJ{wG׷] wwwWUU@]UUUխUpprPUzpEEwp {wppwTUpPקיU@wWU t{UUz GGUw] ԠzJw]w'z{IPG}GYUzpJ UwwGwz]UG]tUMMٕ]E]YUUUG@ D TYYUPMw{GptUGu} Upݽ UUw U M Uݝ}ww]MD} qԕ՝UU UPU EU Ut PM@}} Pw U MW tww]w][uݴ'WRtMpwqtTTUP]t ]TUYPPwEU UUU P UU pT]]UUUUQDpUEpPgRttUu @UPTQנzpWGUz YU]U} {]U Dpww MtpU PuG@@UWt pwGu}} @pMwUU]pT WPYJU}@pUPPP ]PytU]]] ]}]YtU PMU}P ]] UP] JU}@pp  PU]EpPРwM @]ww{ZWy MאPPU]]UUuTM E]}PEpu]T]E}G]ٕ]]U] pD YUMЙ]tyG U]yWݕEYuU]yGu TppwwU]}tPP UwpU @ ]אY@UYUG} M }ptM]UUpTYݔ]URUUu pWg+D]]zgu @ UPU]pUUuu@zDt@@zu D[pKPU @]URUUu z WUM]}wVtG+tTukFr`pwեwVGJ ] Up{ tpJ@Uwgm- @uk*KjݭGU]P *w UPwzjwpZUY] U$$"@{t۠UIE]%z"-V+ ]UUWWz'vz@r"}zwwwz}t Jzzppz٧'rgwtk@+ wPU p+ } }GJUwzw P tJէYuQGMppUM Й ]U} WU]M }Ww GPUwzwu } E tw@PUݧYUyUKwrJM}PutM KpwZTU wepE p EUGJw@@} YYU)uwpM T ]ՕU]U PUGy}GMktGt}Y}mw%JU GpUUZt+pwW Kw@}M{w }GbU }wzUz }GUwuw+G G @zp}P}PJp]@Upz}@pWpU@ MEWM@pwTM}M ٝ p uٙPw} P]]U] @]@ ppz}@pWp]]UU]Ф]t p@YUtЕYpDr U wGuYD ]UZpIE] ՕЗMMGPEp]UpM@]UYIzwUٙpUPp }u{TݝYYpT}pקp}]UUWDM]UYՕUYUPwPP]E @E]PYDPDPMp pЙpGՙ]UDwwzwTwv}TD EpEwDEGGw}}] tGTMPPGUw]PuGwG}YUUU}DTU}@]Ww }PDwwzwTwvUU]pPpGEUUDG]]]UtwDwgwwwBUUDpttu}wwtwzGGwGUzGpPTwG]JUMp UUwtw mwUUUw]Y]]]UUG tPTwwGg{}WU D]Zww՗UYwtw}pUu]UwPUU]Uw]WGUUUU ]GttG w}WUUUU@]t wT]Wwu T @Ptw@E]D*""Xb] vD z'FDp"bX{wt vG*KM"Fb**zvGb&&fKw QPp{iۭDf y*""Xbpu b+GZtz wzw'b+j+J+Kt tM'"wGU$bwJ" ktbg"ֶ}wr*vb-BD""""""pwb*} ]+""r&w"br&j'{''bt}"+rkw{{'wpw+fbbWtQ]MmYDYwUuݤJtt@}Dwzww@ @f&'r՗zDJwGGb"ruwjjtuwwwGZ ٺkWuՠvڝwUٝPUwݭMНJyJz]UUUYUY@YPY}ԥ{uZywjjtUM]UwwwwWUUwUՕ zy}էTG}vvuPP[GUEMJzfz{w M]GDYw wZU}vYU dKwUw]]P{zzݷkJPG}KWYYv]ptUwzU@YMYUUPMݕU]UUUUUםYUUՕDU՗YUMw{GwݤY{Eu}W]UW}w UUE Gw+*ZfGG Ԥݦ{EЙw]W} f{UgD@GpgwGDY]}]UUu}wWDYw+*ZfY]IдtZ @zMMݤj'MUt]YyBE] mwPב wrY +wKzPէGzGYPpf+&* {vu {] YYpGw'b&zg@j'T}dm-GwG{*Bz uwgzv{wYXPDYYwY U}}tYUDYD UYtU]]]է{kwG}wWwUםU]J@@k[wGpp] wUt@MyWUݐ՝ Y UU UzpyPUU]PU]Y up T]wGpp] Pt @@U]tUUwU]G}]zН@GMU]uwPUUMYUPԙwYpw]MtPЙ]U UU]UU@WUUQ YEPpW}E]zpwYmwTUw PEw] PU]UY՝]ՙPWt]U]] ] }w@UU]pНw Mu}P]upI]p PtDUTTP]ݤwpwwp }wzDwPGy ww]M PpPUTwp t] WuztwWYP]UU tUWU uJtMpwpwwp]]}wwpWUUD]]Uw PէTw@{WYpwET]Dpptz׽ ]UtP]ww UPwDwGUGtW{ JUUUwpGGGwwtY@y"w{UUY {Et@ԤPYGzwФKMTUWwݕ ЕUUUUwUTMzPUUDw@ wGUUEwUUuJt}]r wGzGMTMpDwXtw vv MpW}w w pMwG } Ep WD] U GGT] @MtpKt@pG PXtw vv w w ]w zg'BBDpww@uвPWuwzT%zztW pG}PE*ptwT'GT]W]MzWPPU]QXIuv"w Pt @$ +$ZT}t@ZbEEpz j}w նwJ ТP]G{'w'MMgwGk}@pGM-j MtupwUb"+j"fTg]U}Pי@rkT PuݝY "%rJ] Pzpk&DU]DP]]uuU]PemwRIb"+j"fTgE-jk{ZYշٝE@]''+EE$FU} qz"'uYw*{Jw ݪt Q%"""&"٪RUU%rJE]Uuw-""-U""r'bRM]ٱ$]r""BTqDfr+jYEWYwU]Gw}U]PEP] UwUGG]UY PU UUfr&GXmY Ywzw'"@]ٙDUUYY zG}Y@j@YYGuzuݕ@Pu Y ݙPY  GDt y@WtPYWUUYY zGקWݐYqtFt@U `Ez$v[J}םutYwAUU@]P]YZwDՕT w]yU]}zz }YYMY ]-z@}YUYYU@]G" ]}UY-J-ۥݝ wtm{ r{wwJwMDwDbww{M@DwwgDwDpUt '@T$+}UUQUY JPw]GDMDzt wuUzIGGPpEW]zwuztUppPEzJW]UUPUU]UDUpwuww UGDMDztUYy`}U Z]]ut'DjW ZUYz U}wvwGUw@UU pfwwG ]pzwUW]֕]{wzwwwzzGuztU]] p}{K{pw Gzwgwjw]}UU t}ZէwPPwtUUUP]YUz}UUUUYT UUUU ttwwUYUUUU tJzzG]uwwM]DTMp+pUUWkw+WEUzUPuE]E}MWw]wUEGU}Tyzv}ݙݕ]U}GUT IWՔG uWkw+WE֕UUUYzzWUUw U]UY+{wtgtzGT ]wzPUWW wB]QGzUw*Z}}V]U'jvPIEeUUw*zzGzwGWYEGUY] gf]J{wwKg ]wzWtuUЕwk]M]PPtpP]UTYYYEYUW]UwtDtG UUtY@Yw`KpTUٔpWw{KwG]u@]wyшHbb@PUMzJw"{zGGK%+ uuwݧZw}MDMPUt @DEywwggtD*Gw `pryшHbbMtp@]Uմyvf'pt" ݵr''*b"Brrwt$PTP}wwP-B'*Wzr"!'vGw&"Bw] "wMZGMPJkQUUYY}w{"r$r'kY)}{'+*@Tt]Q""'""w""z'"fww{""r" w*z""]*&""rwprj""wD}"bGw p-"}""*}MptwfbrzBw{zrGIwGG PqpJUtzE@@PwԽMEJpGwGGUtWuzt]}tP }ݭ{@ W w{zrww]zzpwwG}}wGݗ@v BMTuMJ]@{zMY٠XՔpQU @tд wG@JGzI wPwtGGݵpzpU Urwz{pJ}G z w{twt]PjtzwEw UzwGKw{uzuwwwwUwpJЙwDEgW{@GwwpTw]G w]YywUYU w YpDT]wyGu]YMP YY]@UD@YPБ M@z`{EGTtWPUYU w]} ݝYU G}wtUUyK)ս"JRw@GUywz {wG} UY][}Dՙ wyMw]WG YPYYUYd }MY] @DG UՕUUYwpt}z"rڧKpY U`z}UY K '}MGM"G pG"}zJРpkkw]ptzKM@}gtUPE@pw"p'dbvUQ]UUKwU@UwwDwpWw@WPpp PwpzM}՝ PUU]M ]P wtWUUU]]UUU ] }zEАwwDwpWwU}D}U]ק]P]U]pYEtUMw]wwP uW]PtWuUU P]DU]WTwQ UU@U]Et}UMPU]@]]M]uUE]zWw zw w }-קTPpGM@w]YWPPU]wUTUUU]U]Y PG]UUU]M]@M ]tpwpM}zЕp]Dtݕ @PДYpzkwjjW {ՠ{wФPPptzw Ww]tT}է z}մ}}zt@TW}Ѐ]UYppuzGMwEupzkwjjW { }}D w}Ч ک} GWp}פrGwUzwzwՙt*GDy]]wGzEqZwJuz} pG z}]]U ww}p wzWdz Mw{wKw}U]ݧwKwppEԝwwT MP p}YEwpt] u]]UUwwJ@PuzG}tzwzzzzwWYuD]w] zwPPз@PuD[uwݔPt UE YUMp] ppGD p А] zwMDMT]Y]  @w@p ݷqwuխ ftDwXGUwG}tpUtP԰DM@P]upw{wtwMpKE` T Z%&ptz p w UUU]UUG}GwM w GGdG Uzjjtv{} GMJwzwMD @w@ wzDtpD]pGpwp @Dzgt ]wהYЙu+`* wUzzgDww{uZwUtD gԭ$DT r{ DT]]PM TqUЭzzDwMu+`* wETYzz}@wv@wpGt}׸HwU}z]WAJM@WUtvzGYUJt*w[D@mpgG{G}upEz'" u[rtEU]@]DtJ-b+rztzgwzJJz*w]{bRwJUI] {uM z'u}zwzMAMpww G G]wwIUY }tpG ݝzzw JwwwztKGMwPp tzWtwwy@wwzMww UUUMW}UIuUWP}PMwGG@@tDUGputWT}pUpPp tzWw{zTٕ yzwwwwz@IЧzzvrwww]tww]wDםU]PPwDU]P wUPwwG@Wwz] UEY}p }GttADUUU Ԫ{{wJU]PwTtz  խG{MWtz@pwMwMG}wgzWG MpwwDGUUuwpGwWwGY ztWT}{pzwwUݕ]]uU] ]w""&&w"&wE]){wUW]P`bP}UUgT}k]e[] {*g@TU UWUE%"EI`""&&w"&wEw] YU)bwP]UU]y ]Zt] zwr]w@&F  KrMzДyUD*UݵRuYאGe Mz*vz{JIMpkTY НiU"պt I]Ԣ"MEIUyUݰr&+PPِ}uteETuz}pGw Y՝U ]UUwUUPU]DG]YPWU-"MM Qv+JיyJ f]G]pzMP@ ppzG@@ ]p} ݁tEt @ p Gw pMԷ]G]pzPMW M@tGzwJEzPw PY רwp{p DDM]E tudۧTKM @p׫}TUEw}t@p @p}ww { }UU${HYKpzw j}}wt rwDԦMw@ t pwG }{M p'p rDUMy t kw*zK-ݽ{Gy}պzWwWMPPByU]z׵gݠ PUuj+zZYUD M] }}p %+]w }kw*zK-MwUU ']]UЪwק]}rPU]wuw] MU"KMpp@]ՙuwPݥН՝terUvzw{zzDPUgME@`rzgݲbw]uMUuB"zB]Yw}Ur]@I}t@D tU}t]]] GPWTU@ww]] U]Ew kGWD%+}EY]TwGwwgf D]w""""*&"rrX}$v'wwz  %{Hw'T@bGu'Ew$d"@'rק++&"rwGէWw]F y'" z&""""*&"rrX{wz $"mwzwpz"bk"rקwvPtwpwЕz`G"GשJJz*"Vw'rzJIF Gz b+rr*{+'d"}}{wwz*""B+""rt+bzz" b"rrG* D{b""D}ڭvg pmk"*+BwP}wwwwUGGMwD@Yr Qwzz$" rGwԻ&"ҧwݥz"pzp*wzGG@MptwGMU}wPw E]UpDw@u]P EwwD]ٕUUՕ U}PEpY Upzp*wz]]UݥwtYpwtwtp]pGU@wWpTIٕuV}wwwzt}UwwwtםUdWuUE Uз{Gw{DwwUUw@]YUUYUztwGpU`ZwzWwUԫ* UtpUUUtww@DPYTUYٕUUٙ]]T]YYUDԝUUU}UWw]YUEp ԕU]twUUUUWwtwZGtywD wMD]@@w@wP]]UGQGuUYYUwGZ]]TwM}z}I WwtwZGtTww{DpwwPpwKtzzp}q]EP tzPݚPMWKDDwDMUwe U U ]tu]WUzwpەyuYYG]UU ]UpzYUݗݐYYy eXPUuYYyP-@PY]{WzTWy] wEݗ]]UwPݝ ]Utpww]] PUwww}@{W}z}EٙQGwp׺g[DPuGYzzYwz  UwMu]E@ty}W GDT} ]M]PWu IUY U UG@UԝuzM@@ uGYzzYwz]UUݝUpPUUw]ݝUP}zt'EpwP]]UDwEPD }wڠY}zGpw٫ww@twzUwMtttYUpWMpt]MUՕUEGwtGwYEEtEUtjD}PPYw]T}wEYztU UUYY} M@]{U]U]w@pztWUUuݕwzw]zuEwGDwMM D@zzdwZtz{xtwUݷںWDGYzQDWJdT  Gp JwpGt M }@ }j twzzdwZtwptzjwwD'Dwpw`JWtBYYBw}{EtEP{QYPׁHpXUUPwpztt*wzFUWuppJuGJ*& dݪzwjwPMY@MP{zG tpt}twz GwJwwwGwpttwtGwwGztzt}GGwM Pw@pDpwݧw}p}jPEWW@DPw{zttJwz*zGZ}եzUW k&Dݕ@GU]ՕUWigPE]Uյ$[UU]]]YTYyw]i*ם}R u*zGZ} UMUUizwZUu]]YU "p{ٕݙG}r]YUfBA]MVWy&vwwpEU԰g WU}UYwEՖIU-кgvMzVUٙigGpYUݝ)krG%U&wfR]I]@PYr"ҷUWUppPUU+JUUYuYU }YYЕY]WUUUEU ]UY]БwrW]pUYi*׭tWWzwz'"FU JUwwzzEtwUwpuMJtp}}UJGtwPw@ݧzMPEZPuwwtWY]UU GUWDMp@ wzz]}Y}wQ@W]]wG]Uw{pפ+'v{UUפDGMڠ}tUUzG`wUwDGwwwz]kzwtttUwG'zzpUݧzPUUM tGww uUW]yMJ"vzYEz]]pwJgW]]wpwGwwvET]UDUUUUU}]PYUU@wwwtWU]]E@ݧUQYBP՝Duuԧw{wwppp]tpw{wkw'U}GwDUGZYpP EݧzUwU]wץwpհ}tEvwGWYUUUUYUUWU]uuڕw{wkw'YU]zwtGTYwU]p tGK{UWwBЕU uP [ uw{wwGwYw@U UUp@WMU{grw@WUUUwpU D}dKp'U{{'zZywיUFkvYUוUdwztUED]YU}ՙ]YWՙPUUP]ՕM@}wEUU Uw{ YUutU}} MUUYD@Iy{r AWz&EtGppAJZwG M} ]D @@wY GM}t @{y GWDG}TYD@Iy{rDpPtE Gzwt@ & yJwp$KgrR MMwt KwwtK}DG r wZpuwwzwpu@WtgKwTwMGu-&tG}pКY ]M]Twpwr"rwGtWUٰ`r[*B$KM@t@pG'+GwGzݦww MݻwwJK"DF*wwg' }DwGpB +D@G@ urw@ IG}}DzUDXQAD]ZpG zpzW MpT@u@w@G E p@@pFpzDݺpp PDXQADGP խw{w ԥ}m'""z{www puwzR] wD]}wwwwT wz]pw{zwMEXw-&G{www} Dz ZUtwrr"rw}EwqW- }'r-rrwpYr"w-*pwDKw@ "wB@ pw&GԧvM@p D p}bjwp@+ MfK@GwuDw]tztw J  TwtMUpyM}}MUPpE] P P@wyYUU  W}YGM  tztw J]]]p@wUtWݕt-zF]Twt P wuw pKWdKzTZMuwGU٧t}PwU@pwYG D ] PD]UUw YYE@PpGGz PPpMPpw-а] P}w]]pUGpuUUU]Y{ @T]] Uw@ @pzUwUwwz}gt YG DrwT MEwwwMp pE@}@ M@U ] Ttp}P՝U] M @UUUEuGpTUMUEUMuMԐ}}U]TЪwwMp p]]D@GDy wD@PTtUzpWDWݕyMEU}z wUU]M PuU]wUtUUUUP] UY׹ETMWMM ]G pDGPU UEP QWtUt UU YP D{WU]wGpzUpWTUKJMwUUUUUD K]PU PGUw] @YG}&E}Upp]zGwUUp]pWtD rt}P]M pJPM } WP] pY MU]} ME]tMMtw}GwW GPtD rtEGW u tzpPE w{zVPp}ywwU] MY Pק]uU]z {GէwUYI eYT} @tPU]U]UPUMt"rIttЕ]yMT% }-W-DYtQGd+ ppKtw t 'pptK + twzwwtw }w]ppw"KGmj jz} DGT]w ԔuPGtU ]TWM }PDw}PMM] PPEMpU]TYDIUYTݕ U}MU@PD@up ]w ԔuPGt]U]U]MEu]ݤ]U} $DtUEtP] tPppG]]]}}Mt }G PTwGוݙY }wwPTMpP]UU]P]UUPMUwwwpЧtpUUU՝t-wuWUp @T pwݵpGUU[wMP] UYUUDtKPUUTwt TU]}DUtwpJ]upu}DG]UMtwPUwwtw]T Mp@UUppzpP JY]U] }@t ]EwutW U @ @UDD٭wXWP]wwtw]] ] ]I p]U@E$YݧWUUwU wMMGЩ U }U]U]WUpZM PWy{uP}Pp@tPU]t]@ WjZ}}Uw}JETݰwWU}w]GwPY pW UP w UUUUU{}MԚvU]T@DpפU] w@DGTY]wխwX] }tUYywWYT]Utwwp+ZW'pzw@U WUE wpwp]w{GM]E]wmGwU]GEvwGZUU]U]UUE]Х@׵Y]twwp+ZW'  EwwTUUUpUUUY]EwwGt]tvTp}w PP}wwwwwGwT}]PMw@W]RUYG@yPuJUz{wpwMKPmGw]Pՙн{ztݺkt]u YEww'wWMݠTU]dwwzUU UMPP]]UYU]p]TUMGݕUUUUt]t p]PՕ@UzGwG ݵUН]UUpݴj]]tzfz*GUu zwWYwy wtuuMGpDuЕwwUpTWPyzuUUU]]UUYDUTGYTztU tzfz*GU]]UEwwݠW]]twUYYwzwtw}vPwpGWWP MtrwDzwwwGpgGJGtwKUYttIRՙw$wwt wG UwwUYUU }wwww@tGT'{zYUtzJptp@ WwZwWUtYݝ]]UG U]U]UUUUE]UMUUYYUU@GwD TUUU]E@UD]tmwtTYYTzU wwJwzWEM]u@׷&"*jrvtwKDDZzww'wGw'} gprdP'@$&*bݫ}pJ] uz zpj&"*jrvtGwww'DtJzJzww"f{"z} pGpzww{wtWxrGpw{w{JwWWtzwz{g&Zwzp'zwzwzzwp pJzf+vk{}tprdtEDU]zz$b"gt+YwW{twtzrZwKwzwAb"&mwTzmf Zu"rrwUEwwwwG P WwzwzT zpwWwPg'{wפzz""+"b{W']z]G}zwvgGfۥUwpw "J`*GBtr*bBwEG}wt F- &UFw""+"b{W'D]M'+w}]EW}w}*jJwpt}vwwtgwvd]ZutDGЭww*z w}pw*{{}BWzzz{wMw@D&"""kwpvwd'"'G&b+Gwa$GuUb"bJ&}upw'r+&w]wwwttՐPPpwzwwwuww tz}]tpwkGWDtw"zw{uT$&PY]wwzj&v wGwG""'"krBxmrg@UtK'"ADrwIg+$& `D vPd""""BwpTutz]}] Y]DQ-"y'""'"krBxpzpp@-"'{vw GUeGW}w" +"JGr}wwy"bI@zwЕqtpG"rwwqtz'"[MtMQڐwrG+"bb"+tt'&tGp@uw-""Z'w"""ww&v{w["rr* tWmpzG&"""" W}wGT uzrzwU}M}tzUvYWUEtM -"gGr{Y׻f&"B@@yzzbIrz MDwDpppW }@pMGUPMPTpMU Q}wD D @@{ @MpG}pIrzDt} zGGDЧp u ݷJtWZ wpw}zuwDPեWw } wz} MUt pGp@tP]ٔ%DZPpMpP]U ]] U]]pJzztMpuApu ]'JpzIDtGwwzM{j pppwp&@DKwpwwM@ pppP'KtG}M -rDJU}wMWGpJ"*kִZݹZMGXwzM}@t pwP w]{wp ZpzGW]tG@@P pנt ppJ"*kִZTݕ)*t w uww{zJwww{tj MG]} tGwEtw@w*w u }wzMZ *J {wtWWEP{w]UYH " twz{UKp@E wruwpGDDw*JwW{՗ytMwwUwwwGzzz }E@p]UGp@t]WT w zt pנ ݐw] Jzz@G P{p}tUw}pMWDuwuP EPMEU ]@@wDpUYUUPUMU]M]}J WUp}tUwP]}wtUUUt@]]UDYUpGMu+Tpw]UPq}WWM ׭@MpݠPzTtwMGUtp}w}ЕpGT}Gw]U]]]P] Йwu GJ+puGpw}G'GwPUY}IWzUTUYtE]Pՙ@ ]t]]U ] U}wUUp UM tpE]}JDwDwwP ]UvjZݭt} TY@ժD}]@U}]׵wMU ygkYUUUU]UUEU}w]%k]p[UvjZM}gWUU@UUUUz}@zDݝwW]zyJTUU }pftETMUUU]wpUwZ] Uzz{w]]wT] Puwzz]wwGyJ]PrvwU}zYz]UU PYUU]]UU]UPUU]UT]]YYUUG@MDTTU]UU]rW}%kI{ZY] zwk TUPppzGTwGuutD Gppw}MW}pIP@PwDEt]} P@wtw}TY U@UwyG pzGTwG ]]]uG]}]U] pUUzGt@tG zwU}wtuMwwpwt MGPU W}KU}zwTDPvU]wG@ztwwUUEt]UY] pGwD@ttM uzݙM@EGI׷wPU]pGwGpDUEݐ UWD@D]YYJ WpTUUUUUU@pwwMU]wwwzwWՕyGEtDpME tMwwGt@P """*J""-GD zVuT%"xpDt+ jTt"M*uҗ&brwGUZ}w{@z$"G yk"""*J""w "}Dzw GwTzwzzf""ۤ@ww{U"BGDwBMWU} D]bתzpuwG+uw`wtM{gr} z"FrWM{w"upwwv*b"'&"y*gzuG{wf"RBzDeJpw`jr+&EMezPuzrwzJpuw Jt}t twwwtzwYGgp$"GwKUTG@+wp}vfDzpwwztWMU UtwzG} YUUUPuUGMEPUuGwwWYP UU}Up}wPT]DzpwwztYU p}UUU` P]UMMyDP}w zWUPEwwwݝuM] YE PGGUP]Y]UwEpGw@T}UG]P]}GDYէwwt]wQpUDԧUUtWUUwztww}zYIwUTGz]DUUU]@ՔZUUMMwp]wU դwGpTU}w} GGՑ@WYTU""""""BG$vg}[@WF"}uwtw٤ $%*$z"&*"}PGPYPuZUtA%"Y""""""BG}}w$"{V]Yݷ]EGW"f{*&J+rwYwwq ttrwwѕ}w`+Pe}G Q-rB""bRIpU%*twPMzw$"&P$U""vt"rWU@A*J]r"vrYIxU*b""PU pPY PwpGwWݝEwPWw@Y@UY]UEGwtrPQ%"ԵFt&"Y {+d*wKz wGzԐz'rJYW[ kנ D p{T ]P РdDtו{+d*wKzT}D}Gw pwD uppwztwdyzw@purMwwB!EtU]p{UkUz u}*@MTeRt+"+jrtuwpwРtww'rrrzgppkrp}t'gDJPdr"&ۺG}tmpwGz{g}GPՕ٧uEԝG[wݧ]}E@ GU}w@]ݕ] *{p MGdנwJwGwwwwJwKWUQ t}jG*z p}EG}zwzyYzwPwWuUwutp]w}GwPYՐ]]ЕEGqpWwwtut}jG*q$zWUUPיYEw{w{w}@wPFݧwwGԙY{zwzw׭YUJwzzw }]t{ՙu YP{wzwWuJJPUu UyGGgJ{twݧJzww]]wwtwwZwTUwtzzٙYUٗ]MIYTI]UM YYDwݙwwwGUwwEݐU]@www jDuwU@ YYm"" u$"*&"D")""%z$r-)@QG&"w݅qJ""&bt"""""%bbBR"vyt$Mer YYm""*-"+])"B"""&&*"" %""-""""R""Bt]-"""!"""R jzU &"&{%"(&"Kv""b"Bh" $"mtk"Qr*p+"rwX]p] "+*&"""""""u g*b"*r'""v]""""""""+""""""+w`$"""&"""""""&"""""]"""""+&""B"t*+"""ryt&"d"""mutU *""""w twUzGuEwpu@}DW U]w wwu]EZ]GuwWUTUMU w} twY}ЕUIW]UMG]PUGz@JwK]Y]WtY}pMwzFDG{Jwմ@@ԧp]u]gzw}ptUYwkGp}F ]ww M WՕuzt DYZyGD"]}{WuwwgWYwpwP}tzUMTYMPUUYUwpz]M]Gwzt} wYYJ&WU}uTPzzwwpp w]wפ&jJGwtݭuwu*zwGWU u}GT]uw'}p]Wup*wT]pUuJUE}Dzz }wפ&jJGw wt{b ]z]u]u&{z*էwwtUWUEtw wpwt]&r EBU}{pM} UGzpw}m]UuwI]ݙMww'b&B*ժr ww{'Wuw{zUtP`E]zWPUDG]MU pptJwuUUqW ]]@YwDԝU՝]ݧ}JGНzz@UUG*KtD}wwwKDW@{ݭݽ]p}@Y]UM]U G}} Н}D DPݝН ]} } TMwKDW@{] M t]q] нwwttz@TUw@ P]EGFY UUEwT]YT YwUPwWU }TUDT G}UU}uw}pE]E]p׭zWEUݙywwMt@GT}} E}U]U]]U}M]M]M t]]PUw @pupDUt}TwU ]D""""""" Bw+@{B@*"tG$Tv fp +@""' PD"*""r ԻFFpGWB@wt$"zu{}+"""""""}J} $""ttpxJFw""""r jG*z"BJwMzT]%$wbrvdJ'+&" dww'rwr` mrf" '""z"ק+r`ݻJ""wwpTz ""W*w""b"W԰֪W'""RrkDr* $+"""$BzP-b' ׽-"br*J۠Gpw"wD G pwwpwww$"z' JQB{f+k{wP-B"z'+{Zy]@JPfuWUMY{Tuդ}GtU @TݵgTՕЕM]YpTU WzUwVz'+{Zy@U vU u' }fJ@R jVwUՔYy"zwwpu]"zr}B Y'wrU}uR}tj @zrpDuGt}U]UE}$"kg' r-Gr``$*DPwzrpw'pW]{zfz}}А]TupT}QEUpETU@zt]MUWUUJprpTzDU]Uz{zj& {UսjYQ Jp]wt W]JutU}TIpUY  AGDDz@zG IvpwP @YZYQ J}}w թzzw@w'M'"r'RrխYwKwqp @]U%"w ytJTzPw{GPѴY%"MZJrtUttpUYUpMp+j{UU%EG w*-wݐYYF* k{"wjwzDM@ "Kw*K"zwGwt""b*JMggz UP"vJ*"M'*EQU]U ЪUJzwwzZWtMwKUE[UDݝttYFUU U]Ut]MTt@U}G PՕ] ] ]U@] UJzwwzZWtTTEzTPUUUD}]IpY ]PE @}MMUWY]]Ԑ&G]]՝Y]Y}PYMݕE [EwzwMG } YUTMTt]]@@ԴEUp[U]]P] z[tQYy ]wz PUMՙY]]PՙU]U]] ]]] ttIp}P]UuYDPMݪwzw'J pzu}YZpUzWEPUMU]ppGݠ MGuzU@]tUݐ U]ѥWUDwzw'J tMwW ]G DGUwT"PU@UTTMQwUt U E@}{YUUUp uwUYPF}uݕWPԥM׫tWM]u pG @d[ EJUppGZM]Pt[uՐ]ywEpypYMDtGztwٙ YPU]P }M@PUP]]U@]  UMG} D ZYUG PpE pU]WYMM@U}PDY] ] U UU UpT p] pU] PpE pM]U]u t@@t['UEwPG@ MMPP]E  @ YYW UU]TTJD]UUI} UU @ MY ]]UUUU] }PUZp t] Mםp}z @ MuGuww]]׭pDp PM z}MG w ] Pt ]MU@TUTu pMMPU]EDPET]ݧ&*bGwݠ zM@twY@jwPqP}]@է}t } wu{{GWtݔQ ]TwG]UG&*bGwtpDt }w@w@@u՝wW FpZY]PWtw*M}TW}]UtE]wjwDJ uP]UPpt]MtMweM}zwpp MGKP{rtw}pEYAPշwzPtUpMwwPwpWD@PwP GtUM wUGww  GM]P@Tu]]UP U]wD{z""k+"r@UprdMERp{+Zp p]wwg}&%b]' DY""ztpT pU]}]{ ym"]d{z""k+"r@ ڝEw w"'JG$]Ew"fk"wՑHp@Gruwww"wI]w'& GpmRժwUerMMbbbQk EE%bttw]uzw$""r ""w"rTy']PW"rBٗu +"g+yYץuw@՝U}pwwwYYu]Ew]Uw ԙխwrm"]Jי J+"]UDGfg*"+&"Jp-wzw[tpd"}԰w@t']rw] Q[p""*"BwT Et }Mzpp'g*"+&"Jtw}w-"ppMT}ww["bzfJptGrB G&rzG {rwװr'J{JWgwz"ڤ @ {J Bzt`rwG""ҚrwzG]}rwD] UyJ ""&"KU]J{rp g" gwwGp} M'"""r w}dPWt wzT{GwקztpttwݪpGtMDw{P Dtt  ZTp}Jzz""&"KzTQJG}@wZ}zt}DMYէPKp pzwJGP@}{t]]u"&"KzTYUUUet@}MD wGw EwZUE׺AGPyPJTٕ}`Qy QU@Gpwj GDUPKpљ}}$bRՠzG]u EJM zr{w}wtUuGMw{{ԕ]uwG@TuzppwwtJUX]uwUPMwUUQ]]Pttt@@IwwG{t G UWP]U@DUUuzz wj}ppR pYU]u{P}DАG@ wUu]UyzWUUUUUUEM@WU WGU@W wj}ppR]U] ]{YUGZY{wt*p'[upUݕG W]M]Ypw{ppwՕppzptU'z}} ww@G}tBTU w ]UUUUUU{wzwz]ZW} z*'tUUwUUTwWUGzwp w]UЕU ]PUYU YP}ՠ UUUUYDDtwPUUUU@]wwwUWGםYtJwttU@ wKwtGpE UwU Uww}pP ]J]]PPt G] uw}WY]UY}Uz u]@wKwtGp]]M]UU}PYwUUPPEuZpUT]uw}]GU}]]պpPU}TMUE] U UW@ptMpzW נt}P]G ]WU] DPUwtEI ptzTUUUzz@pMuw]UUwwwzzU}Uw UUUzWK]YU w@QMuJw U]uwDwwjZեz Y wwwUPU]]U ttGp@Gp wD@wp@UwWpPEUՙYUPMU]]]wuDPU ]U P M tUPttGp@Gp w tMy@DwwDwEw@UUݐGrP]U}wUtPUDwם]ԙЕZ}PՐ pE@tMWMTU PP} @EGtWUUUYЙYY} }}U uy]T uPGE@uwGu tpU]YI @UUYݙYD P TP@DuwT t}YUpНwGzkZW`ݰv RUJQE"DuPzYuUZivw$U@uWUUUUUUuGPyujGpR GzkZW`M  z[YU } UUUUU&z'"pU-MUU$Bty@]E]]z*j׽UU*KU]UwpYY%U]r"+"rEB avwp PDtG f&D$j*{*"rե+WUU {zr']UzД]'kzzzYUU]E}YUPٕUUPWPYPYUUUwU wՐ]]U٥ݙwv&zYY]ujGTPU w'" zY @]zW@pwwpPDMGPp w]ݽwG@G]G] Ywuz}} U]U*pwDT@P @UU uw}WW@pww E wE]Dw PEw GK&wpYY] {pt [}WrwD] pYwGjDuMԠ@ }Y[ wDz}puU uz}UUUY]p{{W w MJMu׷WYuU]UUEt TYwuUUPIzMw UUUIwwDY}Q ]]UwG]UUM jTUuw}UYYGUU tZ}U]uqjWzpuwUQYtyw}  Epz IםDJpݭMЗMyzwPUUUPYUDU]}}Gt uqjWzpPUJ}WUUUUtz{t'ujt]YwGP@ WztwYrw{wGUw*}wwMҕJvUDBwgwKtGJPJp]]U] ]շz@]DwW*{{ՙwwwp'UGjz]ХPUНU]pMPUYT wUUUUUGtMppTUU] w wwFtPՕG}}]u}zzz W]]}}UY٘ՐA@Q vDw"IGw]w!wGEtKD}}E YppDtP׈xGDKGwwJD*BtGy Xw@ IwGY٘ՐAEwUywzGzw"Urp$brbrvz{ו}rwtVEDwJP-rjwww" pGy'rzywzY]-"}z YZtwwYYUwrw"*tU% {$R-{rpyw*"wzw"$wwwwzw"{'" Gww&"v*&*Bpgw"t}"rGXwD*+}"v G{wGzD}yݷzz ٕz puwwPyMppJJpTwDpzMEtDMG{ PU Upzpq {t}yݷzz tU]PUJw@'פ" U]WpwD}FwpwK}z{ w$wjwgtwЧwv]} ktJp{UwGpFd`G wPpz@tWYwwwwwEptpzwzt"DwwФw${'Ptp]*EpWUwp UUP] wG*W]@www{pU u gr&Հ{}v@wtwIEGww GwMtw  zU]MMPP} P T]Pp]Et@P]w GwMtwuEtGp} ԧzD zUUzWԤݕ T@MDwD} @էMG@T}P@פuwФ@twew}DPPM }zG ]Mup JPwDz ]DMpP @EU}@p]DDpU]@WE{YAtM@pUpt @ tPz wG]UpEwwpT YGQU}}] QWPUwUwp]y]וMuwJGWPPUՕU@PwD ]]pEwwpT ] tuTU wY]] p$j d]]YwWY p uЁUzu]UwgU T}BuwJ Rwz JM]UwpTUUuzw@wWU pݷwwݭYGU]Dz PUwwttP zUUIWU@U UUՕЧ TwY]U]YY@G}wWUUPPU@UUpzUDu U T@P}UP]wpzwtjWWd]}wwUuVYPwwTw GU@]]GеwwU} UyzwtWUU]UUUUU ]U]uuU wpzwtjWWdUUwwwGUgU]UM@wYUEݗp]UU}wGu W]]D}zwDzGwM]]Y@@GPPUUUppT ]UUwztJwMTUww]U ݤJzzGݤפКupе]Uz'KY @YwwJwYUY U]YUUUTU]Y TU]UYU @ ] UUUէ}}]]yEE]UUUUE[PU]DztzDyPtWQT@up@ MpPuTՔw]wt P@t'ww TPMIP]}z}]TUpDztztwDDTz@@]w] TkwTW w}K]T G D}ڥwtT]MMp}GY]pIPuUp@ } wwGMХTwtpEYUz[U] EէZ}EФMWpGWpwUIwrwE{YzID}YT@}v ]Y@EU U @DpGו DUPug}z}ppWJYY@wwUEWwk&"j+&z{pdDTG p'"z@Ew]Gz u@*Wr*'t'*Wz׭J @@WDGtDbzպk&"j+&z@ pDMmGFtGpDE}wrjۤ& JprM@w"]tG@ݕuvtD*wGTE }`+WG-rJ Irw }Bwp+"BwrjGUr*MPuuwJ'""mU""kBPzzзj"VwGwzGz}'{"+`pKpwwz uz֪z{G } W}M@MtD@UD G @] wpzFwGDwbzUUWYTuwtwuzuukDwWMUwYGwM@ uUPp]UwGݭT@u {zTUUU]YYUUtU]pEpUPpY]UuukDwWU]T] }tw]uWU]w]]U G{GdWwt PPU}wPGy[UפUU{z`w]Uj}jtJG}pUYtzzUMUBYtwpz'w ]UUwG] ݭ{www DPudGG{]]ItwJtwgpYYpGUUUUUU p UUYUUDUYET]UU]UUtwDp DUU]wUwtWUUPM P{t}UY]]UUUwtݠt{wYuVYuGTwwwTwyНtץwݧ@DGywY]]UUUUYpUwwvtw}MwtU upzwWU]gUUU@@uDJJMPUwJuw M u}vzfzzwUUw{ww@֙Uw p֙wJwwwZPUwP Utwwzz@pԪpKzGjzzםYwwpww zwz Y]UYWp}PU]UUUUUPYYYUUUUpw U]MUUUUM zGwwwTٵvtEuZUtGzzwzzMPU}GPtDFKwwvzէ ppt wPt} @ tYGݠݕMukyG pwDW@U Epw}y DpDFKwwvz]M}wp@wGMp@w+W@YE@M @ PWrPtVzp U Wt@wקP@J@}w GY] p{w] w GGW}M d{VU}wG JڻIPGՔuwpXwGw wptwwwpGpwM E} wYpwPU]}TUwpGMjD tw}PUwDwԧ`GwwwDwuU]Yٝz{ ]UW@wMw ]WDZu}M ]U ] UU UUY@PU]U@JETu ]PuU]Yٝz{P]GPPUy DwDwyz$w[B uuIUGMuwp UUU]ZuD]]}w]pPztzW]pUU]J*M wwU}pGTU]UUUU]Ut p]p])t**GE UQK"Mm]ZzpU]Ut wkT]M}pttp{}U}ppUPwGz} }m$ {]pWYי"b"v""X"P'z''֚-rР""HwwYb''"r "++z$""&"rwzM ZGPTԕBPT)+ZmRU&R"b"v""X"@ew'""w@wb]MzY-"""+"F&E-@*"${WpW '""z"$"f+uGb'""*t}'"rg$w""""""vw"ww "+GD]-&""b""w""r"+"''z'$& }{""r+Mv{ E{J""b""Pu  wuwwtpD}Ew Dp՝Ur"YU  Dՙ&"&rUPdRԕWUT"k"&b"BkQYeDMMppK}@WWUp@@PPG]U ݝU MUMEUYU]}u]TPE@pU T tE P]DDMMppK} @ @]wuUpwttp}tPwjMw@ڔZWPpEpUPwwٝ@]UA]u]ԑT M} @DDZuQU@ MU DpWP}GwWU UU]P EYyt pUDUAW WUWEp@yGtGUIGDw{wwYՠYT}D]}GUP]@]PM @u$ tEuD} wM@UНPT]GDww"'+zj]wzwwaPGG@kp{upzpԧp d@JPt*g@TUW]t]]u @} U @ww"'+zj P]EwzwwWU Quԕzwwwzzw@ wu wP pbpwzpw+{Bz}trt ڷ֧zMҭ +j@pBwUUՙYyz "jr'*&B*Gbw !% U@w""Bw@E@przՙwPU iU]]wW@Itݥ M]w w ]UT@pݪקٙUPp UZWUG@+Kwpttסkt+rUwtGJM{Gut՚]PEGٺG}zw]pp@pzfzGw Y}]Нp@Y }Gz TItסkt+r}WuuyGGDw wpGG{''}EEBդ}DPGЕU`r[wwUj&wWwչ[U]w rtPb{zM }zwT]UE@bkr}GGzpZ{w*zUpMt{tp@wwkwMהUww QPY }WwUpwyu@PGtPPUwzvwtT}GzM@ZJ{v }EDpw+wwZ{UMwwGuWYIkT Pwww]ِUwytUuG yUUUUUY ݝYYIwwzMWUUpw+wwZ{UUU] wwwTYUwtpUUUUз{jՙ%UFYtF Euװrgzzw@tTU' ]UtY@wڙݩrUgvwDZqt]U]DmvU{{z՝pיJ tE}@]zUDPݕTu]UUUUYUU]UpYYUUY UYUUtwzww}@UYwzu TTJTp}wMUUUfb+b{W z{EE}wwW@U{ UPUݧPuzwYMPJp{w WMtpwPgMwfb+b{WMP@wWDU }tG}Յՙw }wz}wTTPkwMDP]UݙIW} U]}]VwpPYTU}zwU]Uuw'vv{pwDP Uzw  zD]D}w wwDDE}wGt M}Gw@pww ݪwzUMPguT]wP pGTMwwzG&z*zv w%-]u'fywPYzpJWНuwg}DUu'PYPݝ՝ @UEGI{Yw[uuzG&z*zv]]pz@pUrU]-b'*ԧհҙUUwbw] ] rwp"w'GU`"@tՕ$۪u}Utw pzBpuwUUyw$"jv$]'rgBJ-*Pup+GT}w Q{zy]MQYUUYݕPEu]EYYM}w@]Y]UUG{prPI{UݐUwwww&ݙutUzWDwM}}}@ wwDz}M] }uPPw@}w ]W z@wtPYݕUuDUG@Uyw ]zWDwP ]P}DpPUUMG]]]}pwMgD-PwtF]Y]pwGW t u]ww}tzPztpJDTUU ptEWwUYGwtG}w]U }wUpWwjwwU@GtywGTYUtGEpЙ[wwu] UYUY UPPu]UUUU]z DwwWU]p wp@GwUywU@w uP]wG]pwzI]WM wT DwUu]PU GU PYUpPY] U G tpMt wG]pwzP p@GuU]tzP@ w  d* JW]I}PՔE}w[ T]PpPGUP]@GZ]PQ dUU G]PUЕUUpuEYUUٝUս% ]]UPUF]}tG]UTw@ UU]Uw WtPP @ wwtp]}@pG]p {UMtED {pE]M@w @}PDԺ'gJzz u Gz@MG pM@W` u'zBwםzWyJz]MUyהtFpZ DԺ'gJzzuzzDP]u@pztwݤwG"z"DzwzpKp}P tZA@ zv@ՠ GMW@ЧG*}зDDupGwPGtwjKwBtwUup@mkuMwq]PuV*}FrQ UewPwB'ZYwwՠաzGw{UYupGpGP]TYYzwww'Fp GpDM]{zkUUwTp JU]Pt@ X TpPԝU]]YU] T MM@}TU P@D@Y Tp JM M]UUIp@wMG]uUMd vrP@Uw]zPY PDՕYYYP@p UpWZt EYZD]]YpDp}P]]UUUUYUԷZK u}]PUq}@@P٥p}{pzzD u@@ w@twDG}wD]]UupG @Օ p*KDMGm@wppPU PpP]UYU]p ]P@ ]@W}p ]UYUP] ٕPD G]E tP@}՝]]UYU]pU PDPU]uMpp@t ]]EmU Rp tJUUYUuM]P}@GGݔG ]UQIt] @}G}T]YUYUU]Y UG E@} YUdGJGUMTwдt UK] @UU] W@M wUP @P}@ ]}MJwwP@շwzzGUMU v&Gww Mt Gw}t MPUMէwp`yT]v{UWMt՝]UUGM }Ф v&GwwMwp@  MMwzwխ ]]gKMא ]pMT۽DtWM  ЧG*]}U TptwE wk[MՑ Uwp PUUM mbՙwwT@ԚUtwДte YzUuwpMy}Gw]U@tUU ]Й]Up EMPPՕ]w@ ]pwP } MUQPYIU ]pzpocketsphinx-5prealpha/test/data/tidigits/hmm/mdef0000664000175000017500000003366412504317076017547 00000000000000BMDFBEGIN FILE FORMAT DESCRIPTION int32 n_ciphone; /**< Number of base (CI) phones */ int32 n_phone; /**< Number of base (CI) phones + (CD) triphones */ int32 n_emit_state; /**< Number of emitting states per phone (0 if heterogeneous) */ int32 n_ci_sen; /**< Number of CI senones; these are the first */ int32 n_sen; /**< Number of senones (CI+CD) */ int32 n_tmat; /**< Number of transition matrices */ int32 n_sseq; /**< Number of unique senone sequences */ int32 n_ctx; /**< Number of phones of context */ int32 n_cd_tree; /**< Number of nodes in CD tree structure */ int32 sil; /**< CI phone ID for silence */ char ciphones[][]; /**< CI phone strings (null-terminated) */ char padding[]; /**< Padding to a 4-bytes boundary */ struct { int16 ctx; int16 n_down; int32 pid/down } cd_tree[]; struct { int32 ssid; int32 tmat; int8 attr[4] } phones[]; int32 sseq[]; /**< Unique senone sequences */ int8 sseq_len[]; /**< Number of states in each sseq (none if homogeneous) */ END FILE FORMAT DESCRIPTION ""AX_oneAY_fiveAY_nineEH_sevenEY_eightE_sevenF_fiveF_fourII_threeII_zeroI_sixK_sixN_nineN_nine_2N_oneN_sevenOO_twoOW_fourOW_ohOW_zeroR_fourR_threeR_zeroSILS_sevenS_sixS_six_2TH_threeT_eightT_twoV_fiveV_sevenW_oneZ_zero""&"H"j     !         !   !   ! &' ()*!+, -./ 0123456789:; <=>?@ABCDEFG HIJKLMNOPQRS TUVWXYZ[\]^_ `abcdefghijk lmnopqrstuvw xyz{|}~               " . : F R ^ j v    "# $%2W XY?@10/.-,+*)('&>=<;:9876543JIHGFEDCBA@?edcba`_^]\[ZLKJIHGFEDCBA X W V U T S R Q P O N Mponmlkjihgfe~}            !V UTSRQPO NMLK!q ponmlkj ihgf!} |{zyxwv utsr!  ~!  !2 10/.-,+ *)('!> =<;:987 6543!d cba`_^] \[ZY!| {zyxwvu tsrq!  !& %$#"!  !  !      !  !  !  !  !  !  !  !  !    !!" #$ %&' ''()(*+,-./01 112322400156 6678779565:;;< :=>>?@A B!C !D  E F  G  H  H  I  J  K  K  L  M  M  N  O  P  P  Q   O  R  S  S  P  P  Q   T  !UVVW UXYYVVZ Y![\\] [^__\\` _!abbc adeeffg h!ijkkl jmlllln l!o p p q o r q q q q s q !oppq orqqqqs q!oppq orqqqqs q!tuuv twvvvvx v!yuz{ y|{{{{} {!~ ~ !~ ~ !  !jkkl jmlllln l!jkkl jmlllln l!  !  !  !                          !   !   !                       !! !! !! !! !! !! !! !! !! !! !! !! V  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      #(* #'* $(*#(*#'*#'*"&)+!%(*!%(*,.28<,/35:,.17<-049=,/36;,/16;?BHLR>AEJP?CGNQ@DIOS>AFKP?BGMQVY]ehTX\`fUZ^dgW[_biTX\afUZ^cgkou}knswjmr{lpv~jmqyjmqxkot|jmrz         $+/#&-"(.!%,0 ")-"'-#*. "(.48;<>27;<>59;<>16:=?37:=?16;<>38;<>@CFJN@CFIM@BEHLADGKOPVYZ\QWYZ\RVYZ\TUX[]SUXZ\TUYZ\SUYZ\^`cgk^adil^`cfl_bejn^adhl^adhm^`cfkopqrsxzt~u~{}w|yvpocketsphinx-5prealpha/test/data/tidigits/hmm/variances0000664000175000017500000014611212504317076020600 00000000000000s3 version 1.0 chksum0 yes endhdr D3"  3@?n?;?J?0D?Q?9 ?s>?>&>>#S@^??5S?n?>}?%C??h-?M?O>$">@t @-V?xc?}?Z!n?%$C?-?A?_ ?N>D>'Ag@-<@sH@0(@s?Y?*? 2?8?? ?<@??"6?3?Y-?^ ?>]>>x>>@3&@?OAC?f@w?p?1?ʼ?1aU?h6]?? ?Z ?x>J>z@fS@֧?nw?24?S>>d>u@>t@q1?`??GY?*r?h *??9>?x>>Mb@^@* ?5?\=?c*?hɄ?ԩg?\=Z?{&?}?3>&e@I@?V?l]?n ?pN>?>_a>O>ѝ>ZR@0@X??^?׼!?]S?,U?)?E]9??9?@f$@M?I?b7l?~?޾x?!?>)->؟>'>%@ @(/??Kp?݂q?yN?f6? X???<>o@<@3r?@?@?i>?M?R(?iR'?o>A@?#½>ۛA],y@b@(2@sg @@0@C$>낣@1 ~@M*?3 @? ?r?N???_>;o>W}A("@@??t?h?pv?,zO?O7?5?> f@e9@ @???J|?p\N?X$?؇ ?O?>[R A@?eM@1@?H??D?c?Č?>? ?"#@9@= @]@=?W6??= A?^a??r?+?_>5~@v@;֥?N-}?)q? R?tk?k׈? $?c>>^>@I@ @???u|E?݀%?K?M ?w>m>@|\@@NS??_|? 7A{@6@`k@|g@ @lܿ?> ??r8?Ђ?oI?!@ @ib? ?\?4?????e&?U?>>@+@U'?b?WFz?;?F?w0?6K?p>?A>\@ @:?Q?^>ؖS?T8?R?2??>>X@?-ѿ?&=s?-C?V?-=?#? U??A+?L# ?.@! @~?s? ?\??,>>?ߞ>>@#@@ ? #@?7R??:?ېZ?~$?j2?N@^?T???_5?>??cQ??>q>v>i@1@?ӑ?"~?RB?Z;?n?W?˧>*>>h2@D@ ?ɢ?!S?x?;>Q%=?s?A">y->8>SY@zU@u>@??Ê?FK?c?qB?P(?u?!>bc@?m@d?[?~?g?/{?HF?b#?wl?"?t@$@v@OD?"?]?wh?Nl~? <?'(?S$?>F@n@9y@/?擻? ?bVe?74?L?$? ? *>`@( *@\ ?E?L?P?q)c?C?(?ӈ>H?l> ~@X+@|T?Z?h9?? ? >->ut>p>f> @ @"??3 %?i ?>|?\V>>>k>^@?RS?#?A'?|'?,L??P> ?;>c>@w@,@?;?N?++?9?>6?1 >>Vy@W??؅?Ra?H4?m/?^!?y>A>ES>>?U@6@>?̣?jc?)o?A? ->>f>>>o@??>[?K?&?>.>>c2>n>>.@w2@r@?s?>P?)??8?u"??d>1> a@<@ @ܫ?{v?*?d?MM>">>9C>\>u>@??r??u?H?]?l>q>>&>>c{@i9@?̵?>C? zf?nX??D>>N|>>t@Sv?1 ?P?r? ?*X? ?!?ǹ>*{>F>cW@46@f? @0?Q?°?\¬??2?PX?'?@ @A??b??`>?N?"?rH?T>:>6@Ԕ@ ??@^? G?)vO??>s>>Ɋ>t$@ *@3?dTn?~??!?/?ۑ>H?>N??>ɯ@ޮ@E@-?q[?" ?1B?\>v>[>L>>@E @SF?ؠ>M@]?e?K?Of?b@:???-?>@>A^@]?7`@ ?$?,?n?@??^<?}1?:>\@s &@s?v>P ?;> 1@H\?I&|?E?o8?? >V>B>,Կ>~>>]D@`@?/@q?@a֛?v?*?)?I??C?8@ɓ?KȐ?5V?͑>|@@#@? "???d?2??' ?#>@Y0@'?O?hj?bh?HS? X??KsX?!G}?1?h@?m??a?I8?g?Q8??t:?>&>dǛ>L@???#?#?6?t??>>>x>0A@D@]@NW@@,W@@R?.T?#f??1@?>?V8??1l?0\?N?݄?>cn1?#?=@;@Z@???J??Uh?&rf???߉@X@DL?xU?4?E?K)? ?6>ѩ>=>n>v@7@1V@??4s?uF?Z$?L ?\@MbD@3?H?Ȁ?"[?U? ??E?X>>@@(@@j:??郀??me:?+(D?d>Z>V>!@8:<@e?W?V=???R?`?l?A? ?y@@@@' @?T??@n?>?^ ?>@ʋO@2 ?~?g$f?U? ??[;>>6>>'@?s.?S?>.>U>> >">>/a>@M0@o???"?G???EF%?Y?>oU:?|!?@4??G7?Ea?8?0? W;? ~ ?" ?0Z>%&|>A@χ??:?'?^?:ec?H?2N?D?ަ>?^@@a+@?l?$?!?4L?`>-"?CB%?'?tA1@8@+@q6@~@} c@.Pl@.@@@_?W?>/>l>@[YC@??Kz?a?+*??>|?>>@T@F@~??Q#?}?a,?7C??>R>@?O@7?o?׶?d(?@ S?>b>z>ފ?'@9?Q?s?PV?~6?>>u?Mƒ>>d>%@w|@@@@?֓?ٞ?$n?dH?M?7?|?8[@2 @N??F??>jN??>>Fa>u>D@q^V@?AD@B?8?]s? A?>+S>>+>Eӵ@U@? ?.@?dz?^?E?g%?;(?]?@ @?u?)?-?W?!?z>T>{Π>>8@ҹ-@?c??FT?}?^]?vp(?^?~? >g@@??~N?R?dA???L? VD??Ȩ@5@?N[?B?[?7g?$?>O>d>X>M@0@!@ɢ?Z@)@`@u?Q?Z?m? p?\;?.~?[&?@[*@V?_?-?&?L?B>]??Л> >&'@Hu?%??z?"?+??>Y>h>>L@@s?b?υ? ?!x?͒?,??S ?>I@L?t?ؗ?ce?k-?*?T?>>>>i>PU@AW?]?tA??#?u>>.>7>L>Y>&@@D?T?r?嫄?\X+?9 ??Z?>c ?$ @k?!X??5?ǀ?bQ??}>L ?:K>">|@7@%? ?2Xr?&?k?Uv??6? ?>7 @$I@o#@P2@A?H??v??wh?s?'?o@C"@@>4@pF@<-@??-?X? ?Q?@j?? >?,w@?}?JL?3?S4??}>'>>>@>Z@\???}T?Bg?e4w@%b@?,@?_?\t??i?˽:?>rS>@~A@;>@/?M?ӂ?@???B1?H?Q@:;@??+Ԫ?@? W?A?k??l/> >@sz@][ @^?K?&'?S(??#>\w> fx>ap>kDA=@@z`@R@:?#??Jm?C?|jE?sqp?@u@.{@"@?_o?~?[q?>?uV?{?l>Z*@uy? -?}?(Q?#C?5G(?W ??>>Fױ>z?@<@V@2@:?y@sڏ?&؈?*:??4??5>`5@o?f@?4^?lg?x>&)?\>WF>8>7>>Z@j,@???;?>C?!? >]t> )>̓>C8Y>~@@و?H%?B?! ?Z?> >1>Ĵ>Ð>5j>[#@'?>Ȱ?ށ?$'B?jH5?UJ? >%>xS>>vv>I@`?"1?POR?U9~? 7?'"?E>d ?&>/>m>Qu@C?k?I7M?=?vl?wT??>=>E؟>kh>MA*@???Z@kE?i?0h??J?7? ?pAaO@Q(@4~h@]?N??;d2?8?u4?yE?|?@?>?ci?]?&z1?s$?K?O\?q>=> ڈ>$@=@+@ ? ?dw?N4?Mp,?'O4?I?\>q>_O@E@? ?V?>>.@@%?^6?xZ?+?!?D>eu>Q@>y>kj>&@+ă?of?X???A>>$>J&> >#>b@,@]ց?M?e?K^@? ?9J?1`>>!t>]>e@RHT@@9@ @@n@Ć? ?ޡ??`? @6@??w?? ?h?b>\z>]!>:>!@10@\c+@8@??;PY?7??!>'>%>@1+@?P?;w?j???3>>> >r @ڿ?Э?IA?~P?D>o>`>3>8>ȥ>Nh>}\AWG@@??#q?p?Z??eB?e>/>vV@0@?;?5h???T?8=?٩?;?%>@l@7@}+@| ??@(6@/,@???#_?j]?+FA?lU1?Qi(?o>O@u@I@ @,ȥ?z?ȍ?'5?m?Q?th>Z >"@=W@T%@?^C?]l??]?S?ݴ?{ ?۝&?YA@y @璲?&??l14? ?J?>U>>봣>Ã>f@~@/W??x?2d?p:? .?k?!??L>e@@q@@I5@R@~N@@M.@ύ @v??C@WO@?.f@#3??Y?h?C?!s?b>3W>.=@#@6@??ۏ?R?=?+Q?q$?oC*?;7-?T[@4@W @w?3?[l?1q?R*?JB??>K>@ۥ@Z @Z=??Y?q?va?L?"?u?F>@`L@?q?H?h?A,0?d*?Ϊ/?D?n?>o=Aa0@{@t?+?^?{?>?C5?Z?@>f>.Ag<@??M߂?Me8?eC?2T??> ?g>5HA@>@V<@8@F8@5Y^@bT@/@:@O??g@Hj@?1? 8?8LK?!? ?~ ? ?S?n!>@@@a?X?? (?a[?;Q?G?^??Ԅ@ @}??SE?ih$?\$?,>e>R?k?>@/???Jt?(>C&?أ/?B?a>y ?o>u@! @??@?|o?`P?[?D?.?!>Ӕ>$ry@.@t ??m?_?s5?LM?>>i>>@?@ z?2?y?Gh?mF?>?>u>>@s??2?џ?j?/???F1>!>du>-AL5Q@n?"?Sj?F~k?nA?O?>>1>!>̕@[6??9@?/p?pJ? T?@|#???2? >D@r3??)?gI?&?Z?Q0?-?L)?lq?,`?6@+ @`?.t?Vdw?Z)? ?9?>>>)^u>|@U@9?>r?9?fT? ?Ў?-Q?d?s=?Ui ?m @q@ +@F?0?9v?|?&?^?:!?1?>@A@?k@?~z?F^?-?"N@? ?+p>I-?y@. @r?Z8?ϖ?fEl?~ ?ܼ?*?Bl>>`>"Vq>K@??aϳ???@+?Z.?P(l>h>@}F@;?i?[L?Z?y?t??F*,?kg?>ջ@?h??ZP?{M??͈> > >s>E>0 A@vAB@?@]@o.@gE @_@\=@%&@+@T?w@<@?'b?,e?ϧ?93??>d>Z> o>z>=ߞ@D@W@?K?\.?,V@%@?s?U?bm:?MU?u?F6??d ?Ca>8@r@L Q@mm @Fk? pN@0?1??#q?&?J?t:@V @f@ ?K?w%Q?3?:)?j ?K?d>e>@@?N&?א??h-?"? *?%??WC?;?Y@e??6x?2v?6e?ь}?% ?H5?PY>>c>@ c@YS@*SQ@l@ @E"@d7?i??8+?(?@uQ@[?*??Y*?v?t?g?.~?o5>A,>n@??Ռ?!>?2?g;?!@?)?c>>>_@5o@'@*@е??)bT? A?S+c?7x?>>@YBm@? ?@y?Ms?h}@?2>83 ??z>Z@?$???\?N?"?=%?oD?k'>>1F@?t?&.>}(>˨>y>>@@?O?;?P(?@?q>>鬸>7>̝>U>!Κ@"@@?z?2!?˽+?i?{@?p%?>>>%6@HN?!C)?Y? ?"?>[>>R>}>=j>@?"o??!U?O>?n'?ĥ]?z?>$>9'>o@I@???ɵF??A ?$??(>>3с>V@D+@i @}?GQ?d?.-??.>?'>f>ɰ@5a?= ?ڰ?Jv?4I?9?1>j?#?_x?`?w@=P@?ѩ?ȈS?R?!?4?$?R??V>@Tn @?l?~?((@MvU?7 ?I>3>>A >A^-@@@?m?k??A?4?N?P#?>$>|T@ha@k@r??.Y?H?K?oA??n* ?ˌ>Օ@_&@??u6?_?/%?Q&?R?$>_>0>肄@xC??F?c}?)m?3 ?ߘ6?`%?+?ŋ>Ȕ>?@ܫ?Zk @G??HIk?o!g?Iz?VQ?s?4>ݰ>~GAte@n@y5@ 8@Z?@?UD@@?I? @)@&@??ʖs?c??yV^?;?b ??>5?9%@@?-?ԗ?Vu?@?V??ѲC?E??V@[ ?2ԅ?q?T7?0!? ?A;>o>U>)>u>}`@ ?,??r8?p?J?5?Le%?5F?&)>~>+AT)O@@Nj?@p0.@m?``?\-@q??2G?D ?@.)???;^r?6??~?y ?M,?>>^@?G\x?pK?:?>U>>$>#>X>j>l@VI@@r@ N?x??o??uY? P?g?K?Br ?@]K@f) @?>]/?`[?dQ?*?ŕ-?S}=?5?ݑ>y@2j@?a?ˆ?'A? XZ?5? ?>>T>_@ǕX@@?w?)_??"?s&?"?8)?~?@s?8$@m?'???F?"?YW?>>~@x=@o&@???"I??{?.΂?'A?ee?KAH??y?a>l,?T??1>>[>Lϔ>aAG@1&@f%?,?.??k?='@?uO?jS?:h?@@/@y׿? 8?'?uR?p?> ?\&/?6?1@ʫ?E|?*wX?0?ٶ>^>j>$>Fp> ɖ>e>@,@R @ @V?c?@@E@'&@ Ί?ڥ?[ ?kf?B>)>>t>@H#>@j??4`?b%?r? ?r?>aݧ>9&>9ж@+/@C?NӍ?=?~?~.?~?X?>rs>>S>_@7@l@흮??Ǝ?_~??Z?>@t@@K?@ @?Xf?c?|?X^?vy"?o+??/AV*@??sk?gш?P5?k?nK?|?>ҝ?v;=@z!@@?ɀ]?85?? ?F>DZ>_>x>ɹ>[a@ <>@@_i?䩘?l??a???M?L>@?R??$?s?:?c?0?>s>>$@,@k?@g?,i?me?1}U?N?F? ?>HS@_?Sؒ?ᣇ?e#?" ?"?w>>1>ħ>_l>w@kh@@ @;?:k\?~/?*5?P??q>!+>dR>Ӭ@@?N?Hw? ՘?_?IV?A ?%e?T9?)?mf@'?7???5Z\? ?ߦ?w1>G>M>Xv>m@G"@T؇?U?Y8)?z?a?7>>.m>>X&>@5@??cD @ge?&?!?K?m6?|?;>J3@+@ח@?H?\?r|?B?[?0([?7)?# ?\@Ɍ?"E?z?|}i???UT!?x>8>>y>2 >8@2?6i?M$?q?O>UC>j>>[>C>*>r@,.>@F??p?nv?7?,$?0??><1>%^Ao@z@o?ú@?"8@>'5@&?ۍ?V?^?P? .?X+?I?2>&>>@.<@??V? ??4? B?+3?<%?k? @d@&W*@h<@?)@Η?>q?3\?I%S?D?4?9?=@@d@?s?I?ﺼ?[m?.?Oۀ?kf2? ?@T@e?8u?$6h?:?D0?[)?`o>??[>1A<@0g|@s@-@"@ ?u?r-?]F?˚?H?)ARA@,h@X@)'@>?r???e?ɵ??&???e?[?7R?#?I3?}>y>ݿ>ɬ@`@2@'@E??r?I??t???0?m^*?ZA@@¾??S??_U?R?+?A*?:u?*AE@zUk@o@3@2?'??0\?4?U2??&@?T?G?#?e?jH?@S???.=???q@VZ@DR @[-?Gy>*?B>)>I@V@h$@O@M%?a?{?ڑo?a?Lk?q =?^ ?\@X+@-?~"?^?'?l?U?5?%?O?by?p?f?A-@-@m]@Y<@Ap@(a @?U???i?/@ @Ԧ??Q?:?)~k?@?K?A5?WT?W&?[@@_@D1@F@ @F?ij?}?v?'a?ގ?/@?[??p?gԛ7@8@ @M?_{@?8f??@Į?c?n?M?h? ?d>>>>繋> >l>ƴU>[HB>&>7@|??޲? ޅ?`?JZ\?%?+?2 ?%?0>>?c?,?(B!?!???A ?u?U>C>Wi>Ŵ>eFo@\@?q?Sm? G?4?ԣp?F>e?Zt?x ?>-?@A@U%*@W@? ?HE?Z??k?c;?(f?*+A@@@6@@?J?e?n?Yy?;?_?>?T??gr?2?jnI?D5?>>?xY>(a>^>)}@>@@???l?B?}j?N?0J>>p@.@;@?g?Ȝ?!Y?[?[?9+F?.?j?v?]+?U?@ ?M?ߙ>->E>>>>>SI>~@?5?-?H?$4? ?>T, AO0@bX?|???l?%V?,?8?p ?`p>SAm@s.@2K@&_@!j@`? ??A?v?g?Pk@"@l?s@I?_?|? c?*Z?=?1?g?)Aҧ@3a@@'@?????W6??#A-A# @h@VU@eK@f\@@dB%@@e?C?UA6A@@!u@/g@*@DM@Y@u>@ @?}c?dI???G@2?{1?96&??~e?@?f>O>>P?`R?>?1?55?S&??r ?y?¢>>$>W@E@ @?|?^?e[?J?K?[G?%!??3A0@q!e@ /@vm?E?p?ׅ?y?7 ?yX?e?@5Af@ @5O@q @@??z?0?hr?5\?$Ai@@l@"@.@$H@8??s?n?ֈ?;=??S;?v?uK?s?}6?=?b-?*R?8 ?H?c@@X-@??i?i??u??n?Nf? l?Uc@"@]n?? ??l*O?gWC?-0?'?'?~>ŸUAə@= @ @@?i`??M?e?a?Z??դM?%?9@@C)@o@/2???F?ŏ?C?z?(^?*A@]E?\j??k?Z?K?C>?J 4????☘@cF@Ƌ???8? fy?dl^?gvK?,?&?6?džA dAvky@- "@@?ğ? Qv?Q?8?=8?Z/>/A#@@x>4>>AڵAl@@P@@V @[r@(??c?–??]?\q?BI?#L?tL+?!?5?0?&?H>>>""]@ @?a?锫???f{??N?J e?{l/?A@r\@<@T@k?p_?r?Wm??xe?c'k?L7Aߑ@@f@ *@???bת?b?S??J?ݧ?V|?V/S?iB?[=?,m8?X+'?"?^ ?i>>"b@??ob?^`?5N?<>?d?Q:?/>>)Ҩ>O>Yv>u>R>V>9>yw@y@4?@?jb?P?%H??^ ?4'?L>~b>J@??˳?8V?[g??JK?C"?B??O!?@ l@l@2@9??2?2@??3?[N?j?#@?j??8?T?Gt?%8?-???? @Qf@?lH?N??J?h?O???3"?[?6@u@7@"@?`?ӏ?ȳ?"?0?h_?Ӄ9?g+A@iާ@a@(@)@H@uB@X?ү?ǜ?ۂ?!@?ҋ?4?ψ?[5O???G?-=?#?c/?|>@LF@Ҕ@P@8?op??X/??Z?RA?X`?l{?ڐ?=?oH?3n?xX$?*?q ?>->2>e>0,T@ˑd@@_?:?â?"?w?BP?['? ?(?wJ@`b?f?,?x^|?+ę?iW?\?7)?? ?>J@@`@E@+aN@@e# @0?E?W?W?燅?Ndd?Vtm@ @{!@i?Pd?I? ?U)?3?&?5=?-?@}n@1@IO@/@%@=?8?&?E??Ԯk?BQA%)@d@Hl@{6?5?g?`?yP?B?$!??AA2@Č@Uv@@k@q@?Ė?g?=?q 4?<*?Ah@#v$@? ?4?+??2Ȕ?3`??u?ܕAB'@`@@wQ@z.%@j/@dG@?6?{? ?@pW@l@*=<@F-@A@G@Y?ߑ?ֱ?Ņ?}?IA9@J.@@t@T@AD@6+@&@@V9?Z?]@J??x?*j?B?G??2? ??7>4Am@24@!IN@@e?!?Bǔ?@??'tZ?c1?A@@Iq@0@w4H@ @!@ ??y?m?_ACAF@Vў@>S@}@aG@5rl@?@B? ?5???P?, ?#?lu?z?G2?s?y?c?5z@S@Pr@x@Jh@@T?H#@ ?2?S?%E?T@gH@sX@BI?b?u??do?SS?Z)?P'? ?ط@Q@[V@-@L@dC??1?T?[I?'?3~W?n+@@@]?Ӣ?@=@$Z@yK@[?e??,?fȧ?3?'V?YF?q@j?@9 @O?K?#??/?n?O?DQ? E?Z:A@g@-f@8@H?W????wת?'?b2A @˜@S@?X?z?U?#HQ?oy?%R?z?n&YAm@Q7t@1@ b @????ّ?Ӈ?R=?) @XK?*`?cvI?5?n-? ??? ?ku>>F@U,@n?c?y?7?E_? ?d?.C?o?wV?$AE"@@s@o@.?J?bu??s?d?J;?M$?\TA@@q}M@)@@x??V??v~?Ռq?d?hd?1?T?,??@??6>>>ŧ>K@@????.T? ?[?o+L?5??)? A?@@S+@?J??t?c??}?1?y1?AA"@L@;@.@Gc@[??U?{͍?an?SGAD@l*@?X ??m|?_?:?!? ?x|?18!A@t\@$P@I@A;?:?š?D?>`?5Z?z?L@@\Y@)@P@?DŽ??%?X?l.?\L? A۫@ r@Fv@8@ @vg?Qf@G?@?@u?㕋?@'U?gv?+? t"?{h?$?W.?? >> >E@kU@*@ӹ@5p?G?p?E?7;?CT?t"? )?A@y"ABLh@!M@N@ ?9?+?b?Z?Q?0xA@+A,!@@@F@! @b?2?A?E? `?w`AAОW@75L@-@_@?%?}?.bN?y-??{@ݨ@C@@Z?5?'??hza?-?J?>wMN@=u?Ѐ??\(v?xW?}MB?\,?A?x ?>>@}"@M?R? ?qq?5`? P?A.?;#? ?M?a ?6?5? Й? ?-?n?>_>V>>>E@ME@# ?0G@.??Eٱ?!qA?Cr?Ce?A?EH?x?R?ʎ?R?"c?/>GY@9@?!G??9?t?O?sD?C?zI? J?aaAEAW̽@@A[@!EJ@lM@^O@o@@M@} ?, Az/Ajp@(A@}@7~@@*[@!.@=%@ו?N@n%@f??ܮ?zn?+6??pn?q{{?l?=%?E A آ@.x@6e@$P-@N@@@??࿼?Ws?x??8G?,?D ??>?X9>l>R>E>FA@2@U>m>P>&O>|>st>VT>y<>=.">>S?w?|aO?E?%?C&?e#?eZ(?C ?>g<>r>m@PK@}@`?y?0?)?p?q?x_??/?R(?fA`@Ju@=@@Gl@Y?%2?g?%s?׊U?&V]?B?@6Yl@4O=@}?:?RȰ?a?&$?,w?B_?e ?p ?_@i@F@D@yR!@B@?i?i??%z?,w?U@^@@3@@;?[?v?bm?y]?N8?),?W^A@@5-@r$@o?b?T??l?E?_V?K~?"=[?V2?2?:?֐?` ?8>>N>>ڇ>zz@ģ@4?D?_?K?*? ?t?X?+?b?A~@1@̻y@j$@@x?ez?/w?F?3?G$??Ai3@2$@7@w@S@@?Z @iU??Q?2x? O?jR? ?p>!>>>5Q>>:>5>Q>6T@\?.ܫ?`Ӝ? _?d?!I?YlL?"?{?A?>p?LD?0>}>>3> >>(x>k>/)>]Z>c'@,.@WGN?,o?%?H9?/?(?S ????>.>W@RA:@b%5@РE@?! @œ?+0?X ??g?%F?ĊA@Y@e@@@ ?:?{?Q??V?#*?8m?FU;?(n ?Z>U6>Q>↖>S_>l>قN>٥5>)@ 62@, @@?p?r?a?!%H?=?ڽ??I>@??^??y? v7?SD?/8?, ?p?>@r9@U0@@sd@1@??? n?3ft???6e?W5?[?$?F???>b?#>~>g|@q@N@?:ڲ?M;?q?b#?yi?6(?8A??D]?m?r?Jz?3x?Mu?3Hg?RK?72?g0+???@? b?Z?f?Pg?t@V?1e "@?a?У>@e\@>@H~ @r@?I?W?Gu??dm?oD?AA׀@l}@7@3q@S?Z?R?>?$?=?A; An@_G7@@!/@&G?=??Ē?eL?=?P!g@sA@8*@5t?:?R??bP}?-f?[?o69?)?@S@{a@#@,@ ?R?|f?N??ĉ?3{?Z!AL@|@a@j@L? ?|?Xs?g?p?_n?B?A@\@@ @<@6?F ?2&?-?`?m?t@23@,?V?,?z?}]?`@?L*?)^?Q?j>;vRAX'@C@v@-??v:?'t?RDE?IBE?9@?>/?@/-@?:e?հ??m?PZ? V?:M6?O"??^BAR@A/@T?@@?&?ѱ?r?m>ս>$@D@vB@@@4@B!@)?,Y?X-??> A'^@fQ@:@N?@d?j ??M?5?n\ ?|A#@U@9Z@@?\f??&?U{?fp?1["??!H?C%+?ƻ(?Ga2?i-?e?7?i?'?>>P?;??o?i]?4T?Q4? ??km?S0>2>z@J @{???؎?u?"H?;?f.?|7??dAZ0@s{@O@=,@s#@?ω???$?uz?ƎOA#j@x@/W@@ @'i @5?Q???(c?$\Ax@mI@$9F@[A@Hg=@E%@Z@o]?J?3!@9F?{A;s3A@!@)?A*??՝?/?l?W?q*? A*Ac@Te@5@N@ە?u}??~?K?4Z?_?wN?S$>*>1n>>i>~x>!>o>jE>@?:?Pm?'R?}a?4n%?&3??U.?|!?6>@ 0@. ???XF?"^?,́?x7n? aL?h9?{&+?.1OA@W59@͟:@3@?89?,?'??yFt?b?N?!?Z,_?K?`GR?XM?<9????xK ?>N @,5?Y?i?h?X?=?ږ!?? ?y?j?V&Ab@m5@ @??c?ey?iDu?< ?3?($?kA~@5P@C@P @? ?H'?q?P@s@+?T??ؐ?^?}.%?r@m!@5 @?;?J?????k? g?K@5-d@)19@`D@ @ݲ@e?+?C? @H{?8?(A7@M@%C?P?iY?:?v \?{$w?W?\C?p7?UAl@o@ @?J?|?D4?r?A?'?k?E@?-@5ѿ??ۚ??qs?Y?wC?{_9?O?>e@m@Q'@@ g?v????5΁?>U?q+?A#Aj@9c@@=\@Md?1?B?K?"qv?]HB?+ B}nA@%@CH@@3 @@/W?ִ?ޝ?/gc?$@9?(????e? O?oA?/?(??=@X1@@T@?A? н? ?? ? ]m?ӱZ?`+?I@@o*@x@J?c2?ѵ?}?R?q|?y]?/?=?vGAX@d@R@@L@-@l@`?Yq??Uz?\?Z?Y??>Ѐ>R>> p>p>x}>Jv>Ke> @k @F?8,?Y?m?Zh??!,??w>?²?V?(r?y?zi?\E?p,?t?r%+?s!?>>|Mp@ D@@?@??-?H~??q?&\???@?*,?O>>E>Ev>>cn>Cf> Q>L<>;L->@?$?mc?&z?wA?"s?=??#?ɂ>Z>?&[?=?@1H??"?/?=Q ?r{>L>>>F@ʿ @R=?q7??? ??M?K8?9s,?!?@(-@d@?c??α?@Ž?b\v?S?/ =?*,?{@F@&@S @?Q??|?N?x?|?yT?/PAh@`@n@P'@c]@?z?@D"?Ly?.L?GQA AA@T)]@œ@&?G@ )@?sw?.>i?ۻ5Az@ @ه?|?BE???iq?ig?)6?N?ᓜAT@$e@K@#V@j?]???. ?O?ߓ?s6#?Z@:@L?fx?̔?My?b~?ԕ_?.O?jr9?t.?,?%s@@ %@:@ ?2????BQ?50?(E?AAW@yv`@5%@YB@]?ѩ?h?5^?Ѣ7??ғ4@T?֑?p,?rj?b_?9L?>,?. ?v3?S>>W=@wj3@\ @l?Ϣ?}??Q3Z?v? E?+8?? A6ɐ@OO@#@?U?@[? N?Q??s0?Nl?*Ae@g1@#@@ @L@ ??Ť??;? RA @}\s@gY@^E@?=@Y+@b@y??oT?e?fA@Z@>@5@?H @D?q?7?.?R?~^A@X@؎@.+@&b5@-I@7I@.@:@??&@?H?m:?&?`?N? V?zF??2?/j?5@$ǚ@EA@+@B@?o?j?q^??0{?[Tf?6A̙@@m@=?g??Z? ?@b?C[?p?eAik@ e@)c@2~"@ @A?͟?'?at?D?\?Kc@ý?u?;j?с^?T>Je>@'@}E@0 @J?YS?~?6}?M?'9?q?M? c?G?>!>>ջ>*>y>Kwz>!v>z*>Q>@g?P$?Qwg?fp?_?0?YI??)?c>.?As[@H@@::@?$N@X?@?1?e?i?OMA9D@v@3G@)'/@xd@&@98@tӺ?`??v?F@D&@D??WD?@?4?]X?08?o?ψ?c8?=A@,h@m\@e@V@@M@_1@a??̻?ڋ?أ@[h@r+@E@t(@;?@,?n\?I?@?6?e=?d@+@1B@5M@^!'@K2 @|?!?R;?TM@!D?3?>:?"? ?>Ѭ?P>i>>> >+k>ߔ[>9H<@?~?p=?B??~y?L?DJ?[G>2Am@I@ O@zj? ?m?]'?`?\? ?2>FA@V@6@)Y@k??p?,4@m?O?{X?IHAH As@iT@ @?3?)?H?}? e?B?ƷNAA@P@j0@8@u@TS@V?%??*\?A1Ie@@@?a?G?/ܛ?g?h:V?C?Tmn?S]wA2@$@{w@|+@j@@ ???ó?ˇ? z@?/ ?k??!_?@M?-3? K4?8?1?>Av@jm@,@>@,@25@#?.??Q?LN?@@zR@x??X?ވ?a?4g?t?W?faB?F@o@@\@? ?-]?H?6?s{?T?M3?wF?Ί?_]?Ȑ{?r7?6?b$?u?- ?>>>}@68@֛@@?? 8?Py?ђ?NE?6?M6.?gD?)9?|-??! ?&>>.>Y;>*ߤ>>@w>7T@?|??W?fz?f?4u?p>? A?Rl?{5?9!@h@???w?x?p??o??5?`a?r@y(@?T@\&@f$@Y)@?+U?Al???"n?%@@oč?o??!b?4S?*B?,?>s?8?@v@9@?9?e?.?'ݔ?2Ѕ?:?wO>c>嚼>Ts>@j>ƠA>45>#> W>>?@~??zI??L?/?>>'>a>y>G>_?4?$> I>g>>ܔ>|>:ʋ>z>O>I>@?ħ??\?F?>?Z.?"?8 ? >Y>w?/?`>v>>.{>>>fMz> #U> H>!>c#@?qh?xxW?V4.? ?y?#?t?P>5>G̯><A@r]2@@?@?~?+i?2X???ϝ?Y?x?V?0??7@ l@'5@1@c@@@?.?ζ??Rl?`?+? ?,?<>>2 >aN>\>/B>ݑ>>RvU@?i?=[?Zo?!H?95? ;?H???J?CU@@S@@1?,G?SDz?@?p?9e?w??b-?z?+)AAi@}gx@UpU@!@_?y?oF?4?lv?+]?D?*ugA"@@FT@@'@??]??b? T?]HAJ Aq©@iM@>@a@?@x??ϙ?0??ᴥ??;?t/?S?h]-??(>)?>E>u$c@#j@?{O @?v?]?L?h?!?1*?)?ttAF@i?{>?o?g^?9J? .6?$??i|>>A>}@%q@+@ @"?"?e?s?3i?սW?-?A@'@v@l@B@^ @'?@}\??6?ShA@D'@ @p[f@(@)h @??}&? ?:?I?_"? ?u֦?N??+2?(??>ݓ>{> @,Oc@ܧ@;@o?W@6??Y|?Z?%?d?֚?s^~?7???Lm>>>=>س>6ٌ>+>ػY@h=@j ?b??ի?0Nx?i?U?IY?"?R?*M Aէ@H@>>2> >> t>>d?f#???Y?j`?#??E38?Uj"?P7?R>n>@~3@mL?? C?X?Q}?\Y?w->?k7?ne!?W?F Ah@(T???M?{x?T?8>? ,??D?bA@B@?q?8??;N?=Y?B?_h-?j?XvA@aR@X@f(?>?q?y?Д?MB?:?2?>O>7M> ;>h)> >=$U=`=S=|=G=Wt?.G?X ?>v>Fg>ܔ>ނ>py>vk>,3P>01>@E@g @)@???C?0;q??P?1^?s??8@@;@8 B@@@[?4??4C?V?, ?a?խ>@>>C|>x>ML>!>->i >t> =m?ٍ?T=?GI?G,#?"?a>b>0>>̢>ۋ>o?bj? ?qt>-7>>,ݱ>!>>>N+g> nZ>s<@A@?R,?0?ah?[?z>?M&? ?t?>C_?Mn?1?[>>ᄇ>>/>6>Va>/o>h9>/@z(@?0?n?sQ?'4?Ԥ/?=?Y?J?}>??qd0?2?"?AR? A?>1e>c>>J >:@܌@c1*@k2@u"@o#@{??}?Á?~?-S?q@z%@Ur?u?]b?i@?&?zy>AZ@jw@1@1 @??Ԫ?s? ?oS?G?ml@;@_z@??=??7>?.AAm?@@S@?g?鯪?VM?m9?[.?"@?@?k?*?? ?,?]6t@o@;@;-@8@< ?H?Xb?m?Fir?b?@3?h0@?Ai????d?? ??ҙR?5??- @֖@f@@d^@1.@j#?@?Ѻ??=\?~zg?+?>?te?j#?=;?DU?/?(4>&>W>?Ÿ>`>@4?@DK@$@?Q@uȻ??賚?~?W84?&?|7A @o@ ?@?l?Y???T??5WvAAU5|@gB@g%@?f?1?uy?:??Z?$m@T@a?;j?LJ?U???gK?)?L??s?Y@L|@'@(R+@@?4? ?? ?o??TA4u@@@?9?E?9?= ?*{?t?l?VAb@W y@*G@6%@t7@v<@??=@??Ej?67At@ /@W@W?V???Iq??B?+Y?_D:?=AȨ@ZTD@v]@???\???ٙ?0i??ѫo?4?8!8? ?  ??kx?i>o>>>tm>:F@v@?????i|?X?gVQ?;.??"xAά@`]@ @?X???u?҅y?=?t?AG@AM@z,@C3?5?=?8ާ?6??Ùa?};? @l?.,?N?Uc?>"+>>f>[Қ>Ԇ>-f>@=@?h??]?ڪ?bg>Jd@!H@@R!@@?I?ܗ?U?x?K?DF?Ơ?Y??Z>7?W}>w>>s>>xS>I>j/@;t@vB???L?d8?;2?b2?"@?>e>7??Za?s?F??R+?#?E???֠>$@"*@M @(??Ɯ?1?{??z~?|? Z*?߆AA@$@3Q@sd@?֭???)\?u?=K?6?XA^@v@}C@4@;@F?F? ?Ŗ?l?C?w2A{AQ1@9@L@;?:?c?X?E?<>\>>^5@:@ym@e??#??7??$E?tl??^A@@Wf@@4+@[e?;Z??ס?vٞ?s? JJA =A@@>@+e@[2??M?? ?b??Ϊ?G݇?k?`? g]?0\?Y2??>]>>"E@ay@@@???_?5?c{?6A?S+?o?VT??l?[#?4>x>H>>>~>Ԭ>?> @4@NJ?~?H?J?3lr?ߨ4?V%??E? >@斊@@w@=@%@q??X\?A?]qd?ׂ?&Aǡ@K@@ʳ@F[@f@NH @@X?*Ԗ?Rj?$є@>@=@,?_p?BX?Wx?f?-X?S?^b9?A?A@Ht@o@@@??u?ʇ?M?2?< L?@@f @ d@d?@;?l?\?Bc?DV?7f?FAB A:cp@@<>@3X@U@h@l????DAD@{@&J@q@A@š8@?t?:?a?_?_A^,A@@@8@D@(@Z?&?k?_?fA @DH@: @?(?*ؽ?X?mB[?A?B>?6?0XA@m@V1@-?y??N?c?gw?QY?"?}$?څc?? ?*>?gj>f>>cE>ˆ>:,D>Za@o@ ?????[?\">[@*r@JI?Z?8?jaz?W?W;8?*?k??S>@A\@@p,?-?p??h?̆_?N9?^*? ?(hAI@ o@j-@M@G`?!º?QĚ?qi?fm?K?9?@IA#@}@-@bO@>*?+ ?cƸ?I?_?^j?.h^?/V@3@?]?Tϭ??8~?!R?:?e'?>??2B@@&@%?? ?.?v?ll?Z?Y5?C?tAP@_@3g@ul@H@n@??Xk?q?#@7??&?a?kz@(І@@)?E?j?i?QX?3Y?v???C@@jJ@ i@7??0?j?ׯj?H??!&1???VI?s?V?L? =?T'1?Ȝ&?B?{?r>pR@)J@$? h?+??\e?1-L?6A?j6?V??DuA?A{@e 7@l@D@]î?)@??k?IJ?X'?ևAT@>s*@\#@ I?KU?m?B?J"h?KO?*!?? @@@@OH @Մ?`?S??c?H?mJx?E[?۴@1v@c@,@p?_?%?o?g??Ѹ?@?F?Bn@0_@FV@@?ř??s?Ȏ?Z?? hA@u2`@ge@L%2@?@???? Ɍ?K?gA@M=@_,@?'R?π??b?q?x?xt=?Ž)A@OZ@e@@??.?ճ?i?R?J>ShA AWl@@-@1@|@W?듿??Ӷ?PRo?{?OVA*@R=M@#0@G@Y?t??$?r1p?_?O$Y?ѮA@n@.\@$@P@?n?K?%k?Hu~?Nb?DAC@?M@5?KK?oJ?iM?Ues?0]?UN@?Z?ΐ>/kAvA@*@L/@U @ ?|)??3?nM?9&?Ao@pK@$@Qf???y?w????A^@w@`4@@[1@o?*?? ?? @'@?i$?9q?(D?6W?fK?n>>\?u- ?>3Ab@4N@@G{@}@E?,? ?N-??L7?A@SO@D,?)v?-?ɜ?Y]?囈?@^?'H;?h?O<Aͻ@dUa@@-@R?3?h???\?FR?;-?A>@ <@C @@ @@???)p?3?C?fA@]@\!@?e@ '?.Ӯ?n?E??? J?iL9AtoAK@Sd@3!@b@Aз?|?ܒ?G h?JX?C?%:A;A_N@/@}-@ @r??э?Fx??Tu?5ŀ?]@? ?ȄO?;J?T?v-?? ??P>eL>SUA r@ /@y??6@2j? ?:xU>@)Y@?? ?ؒ?>Ds?Z?F?0? R?Z># Af0@ps@@T@?F??H|?@y?Zj_?I4?/iA1 A@Ѩ<@_F@?!@@??P?:?tW?A)eAd@^G@j-@?ͬ@ʻ??<.?y`?<7?7AA& i@{_0@@?F@)/???[V?,?j@&@/@=6?8??X @At?fg?=%?ڛ0?hJ?@vv@o{g@6@Mj@z8@ @??)?kӖ?9e??A@m @r?[?s،?xh?qN?6?o?VE?&r>YA*@5@q?K?L?܏?Ƃ?j?F?3? &?V|A A@yl@ӳ@@?6??E??[e?IBC@ɣ@#b@I@,W@ي@@/@$?@s?"@x?˞?z?@ap?HHc?T?>?,7?jC(?nB? ?j@7@2?[?:Ƿ???? A? `d?%9?I1?5?'?46? *?2/? ?B" ?N?e>p>_>|>Q@4 @6??Vl?1P? ???eM]?H?3=?A@ n@.@yB@.@8?+?5??Cr?"W`?GAj@@Q‘@@ǽ@ @? ?'?F ?p?AIk@t@o?? ?r{?R?_F?2??5 ?z,A29@@U^@@3;??l?%`?{?q?+V?@#@ZF@/<@1@)?.?1ؒ? ?؊?w?t?%A=@@Oh@@3u#@[@@au?0M?5?5?? @t?{b`??(?Ѽ(?o-?L?>~?7>Y>uߨ@;@jt@t'@h??M̴?ލ?$w?ˡ?}]?#?(e?K?dE@&8??U4?Zm?6?͸?&n?Z?,J?p?dx?CA@,V`@@f'@D?s?4??S?*?.QV?m 6A'@r N@%X@~. @&?k@?:?iX?>1w?U?>?JA @1@ %@+)@|&@????ʅ?IS?HA,@z@@@?? ?J?T???-?PA@=S@st@0lD@? ?I@Sl??h?"M+?*j@ E?0?s???tk?!B?=gT?h?0? ?R@@Q@:@?Y@????Gd??]?@q*??`W?_G?]:?a3?*$??n?[L?M>cs@< @qі?~?kh?W?x\;?/?%?v?????Ĺ?nk?(q?Tq???TC?~?:W?2??>r@ M@r@@ @"?@Ֆ?P????>?@A.@T?x???O?$+A?T??r ?Q>xeA0@$@@E6@WN@#?PJ?˦???u?$@B@E@?N?7?am?g ~?Dv?Z?[L?P?@@XB@@@???]??Wh??cS?7K9?ԏ2?\?I|n?0AY@ @^m@E@T @B @u?I?U?&?D?6@2@?Dµ??}???i?`?b>>> X@+@]@@5@?@@K?4?$?Q?&uAg6&A@2AlՆA)A\A%tBuA ?>>AA x@ Q@eAA2vB\?1>>6B*՘ATAl?s>ȸ> A3Aƕ@Q?'v>9>vXA)AAeAoB#BA~A@A~@!@A(p@u@tIAf@ @rA߅B@AAËAE)/AEA@@A6@屜A鏬AmBoBXB^B)A(A @ _@_AxEB&A|8A9A]AȒAB%QVB3{BoAҞ7B[AtBAݻAH(B`[AwAvԓA$:A~@YiA BCyBUAAwABqB{%:B5CA\+V@hvB AOA$HADAPBBAqAƦ.A8"BPA#A_pA8?b@BWA A\tA}%@?~i}AQBԸAL7BbQBF_ACj|A/ATK@BAA!AAcBKBAyqA~A# Bw@a@5hA*BAO0BMAsAAA/7A>$A)D"B'?lA$A;A.A-{@7?>wA9AtAX1 C;B/A3.D/BA,eAq@AoA!FAA3.D/BA,ׯAkQLAA A B!BBſA1WAւAF[:B+CB@#A* @\@3.D/BA,cDAy9 AluAA|AAAB|BB{Bz%BXA,A@eA`AYV@bAfA_(@ApAbIhBh]B3.D/BA,8ӪA'B4BA&A;ABGAmeCSBnAIA@ߏA4 BiA=u@( A^ TB)EA3.D/BA,cA7A"*ABJxAA@W]@6ƅ@:?&r>BX>zBӼA2 BCArlBhlA BxAn A3.D/BA,+BJ9@k@RAKBYA=BTBPk-BAUKAhAtlAA=Ap:B@2@^BqA}.A{BeAŸAs-B'*B>AW8A+A@1A @%b@]ABAA ALx@{Aφ?Gb?@AN@Dz@NA:@m @wAAaA+A8$B'[BA=AQAA ]A)sAgA/A޺@X9AR@mKA?A6AlAiAߢ@e@AaA`3AzAߟAFuA!FAzy??(A.*AXt@5B/=Y'!?B@R,?n߽AP@k@Aw'@? A(BmBh6AAAEBAAA@N@3B!$ BABABhABBAvBdA~AABB_O@?oBv BeؗA&˧AAmAm[qA!pBA!=aA;2A`}BABA@ŬA7AAA AMA AjxAADA5ABuAtAA@AAzulADAyAgr=ABnALBIAn2A AA-Al)AIASA^j@6/A_@AB8,AAA7fpAP@YuAFoAg(B(BB)bA*AtAoAdA Ax@Aݛ ByTBuAYARrA/?C2R?Pe=xA˪AA]:AQ@6؅@3?A,(A4JgAL?\?8˛?{??? xN?K?t?l??#iA?5?n?@y%?n??0%???5?qn?a?ҩ@#<@[@?u)@ -*@A%@j$@?Ŵ??^?h?) @@8@e?S?g@???Y?0?+?-w?y0?r{?0?jj?BV9?D'?z??NM?B?|2?|@@(G@9@ @@Q?T????'? @@s@C@-@C[@?W?)j?+?L???Q?y?? i?:z?,?g?h>d>iT>ZM>@M*@C@[@U@2@3.@'P?u??P?~?@??/P?R/,?? >_.> Q>;>̹>/>r>]or?&?s}??@(?j?Y?fX?d?n?bp?Eb?vA{A_,ADAhA@@o@@3@aV@c@CFi?P&?(?5?P?J6?H?S?E ?1?E+?w?wF?o6??ӿ3?"?ߺ@??3/??w?F?>c?Z?|W??DP?A?/?f%??>&>> ?A?鉟?.?5??愀?--?MAB?Sz?o?L?@C?m?Eb??*?np?"?o?7?376??q?P??=?.?6?$?%?EIj?.&?8?lX?X??L @M?^?-?\?_?|?pƥ? ??-??j>3 ?"R?G>Cb>d>>/>g> >dF?ŧ>l>{>Ԙ>>Y>0-n>zS> Q>uB>%>??h m?"~?q?V`?A?I<.?:??-?9h> >lm> (>#>4p>13>><> @>>T@a@A,@-!@S@@@I$@1 @^'@"? ?N?,@ۺ/@:?@Q?"^?:@8??6:?"n?iR?cA8/A@S@b}@@O@3*@~@o??~?h??%??8Z? ?r?:A?Mj?U?V??5?/ ?͑k?,? ?S2?f?Ρ>kP>{>)k?3 ??7t?rN?7K=??[X?#:?1p?ڇ?j??m?_c? ?G>1L>-W> >X>p>py>$R>$A>L;>Pi+>|?N?>>>v>>p>aA>W>l8>EL> P>02?a?4?u@?n1???8 ?5?>??3?%?پ?P?({?i??y{?%{?֬c?=?52?N_?M?M?8?U?+p???,?(?l}?rW?9;??:?U?Xi?oa:?18=?L?!? ?~?>=6\@@f?W??h?`???Q?L?G_?@@k?>C> ?@O?S?@?Ϭ?X?>??N?Ru?!????J?B?E܁?>?Zq?d?"S?]?%z@L@s?@/@ @P?"?]?6??85???]ױ?D?/?T??HM?S?eH?0i?ځ?[?:@6 @7a@6@\ @3??Y?&?7?ѽ?ko?>r?Of?ͅ?S?Z?`>?s;?m I?)Q?=?5|F?I?7?h?S>H?G?*BM?>?=Ã?9\? X?6-?!\?s??E?{7?/?%A?Ǟ?Hd?cz?bOu?Q%b?P?z@3@@ >&@@[??3Ƥ?Ĥ?h{?^KY?3?m?k'@V??O??? ?z?o??\?t!A|9AA AP@t@LuX@C@M@r7@;@jU+@>@?x?z?=b?l?ٻa?S%?4?P&?y&?)?KO?ۓ@J@,L@\sP@@@-*@?Y@?(?C???>>џ>d>>>ީ~>,s>k>m>`>m?[B?%?"d?4&?+A?Q]?Ls,?jh?ZUb?U?U?@gn@@@$@?'@?x?g???#?aAT@Z@Ύ@.~@ <@3n@XV@N-@/)@8b @???L@ @Z@e?3-?:?\?1?z?] \?(?M?d?Z?G[?a@?C(6?Bp?EpJ?T@?\&??*'@ʗ?T ??P????,?b?pe?u?h??"?Q-C?*?7?η.?I??H?5?D}?Q?:s>C?c>>P>>Z>#>q>[> >|>;>?o?wL?ZcI?q+?!?"?E>N>>5>$>+?S?f ? >h><>>>Aj>ET>ۏ>f]>_?2 @S?V?iK?a?0z?臅?ԭT?ҋ??ǀ?eh?G)????{?uX?҇Q?l?*|?\h?l J?h?U?;\?QN?Z:?lA?.?G ?[??+??P?M? ?(?>.?u ????i>>>;@@?I?m?Z?9)??iy??Ip? J?* @L@O@­??i?#??|??k?{L?+`@ͮ&@&v?=???;??q?Xo?J?=?ts??ZB?Q?Im?p?H?5{? ?-?X?^?/ @B@{? @sn?]? *?L??C??Ə?Q@i[@GE@0H @?J??K?}?뷤??⡆?Щ>>K>֑V>p/>c1>W>>%=:g=Y=m=;l@I'@ ?Ї?"?-? ?vC?h?Xv?=P?P5?ǘ? ?b>>G>U6>>D>gN>Ս>5>ޘ>-}?80,?l?R?,B? ~9?޾?0 ?zV3?%??G/?B>V>#j>v>$CQ>L>23>V>J>?>V=G=/A6A?5q@N>5@d&@QP'@s@f ? @?ˆ?,u?Z??{?I.@S@2@T0@5 @ @?4?D??`?Mc??0W?p??Uh??R+?~?j?@^@~@}<@li?]?^?۟?Ę?o?]yu?C?mn?&?W>RЯ>>A>ץ>.>>R=>|>Co>z?Eֽ?q?ʰ\?@$A???:?">?c 9?+1?8 ?RT?Ɂ?B}?[?zB?Z?v0?婢?pO?6՘????nF?֓?cӏ?vB?o,|?c?XJ?;g?Mo!?C'?bD?s@V@0?P6@"@W@??Y?&???oAՑ@@@@N@p|.@;,@@??r?A.sAU@@@DM@q(@@?c??%{?i?>&?]??B?M>>K2>>'>>>"?Ex?H?yT?ۗ?%X?;?}?od??u ?D@ ?6?aܳ?)?ϭ??u?gZ?G?L?#?M8?'?n?V_?8K?n?qB?D?eZ?%?j ?QA?]??:>??a-?r?p?s?9o?~F?"?_E?@@cS@Ͱ@|}@QE@0t@>r@@@?(??˖???s??t?Et?{Y?jd?cgq?\Q?;p?G?S?iJ?xc?e?{?i?&N?]?l?5?lm?4@u@t@B? @;???Q?ß?Bnz?[?ZV?"?( ?Z>>>'>g>>݈>>T>~a@8q@!|@?:@@*@_E@A@@ZJ???}f?u?3C?ac?bA?&~?u$D?+?2L?ER?ܯ)?6?_?I$@J? ? ??A?rV????G? @5@HT@3ii@C@dL@MG@.F@D?>_?Nv?z??5}?BKb?k?@N?[Z?Jd?:u@?,N@?qD?>W?i&$A.7AF@@<@wŽ@8M@s@U?y?/?j?Y$@+)?'?5??k)?yg?)?u??a?C?@>@9/@? ???ݔ?#?cx?Ig?"&e?v@?-e>!1>\>>fG>--,>Y*4>,#>s>0] >IX>Ɏ A@?\@Q@(@h@?S@OX@@O@s?]??>9,>?->:>)>T>R>g>Q==K=?ʲ?.>????E?ռ?'?\خ?(г?jA??R?u?{@<@%"@% @?_?̇?\??/u??i?wO? E?l? ?͏?ԉ?9?k?k\J@Y@@N$@-?@?m?????&r?@=@UH9@@t(?z??1???p?b?*o@@>@@1@j%/@?k"?d˶?Ԡ?+?Ē?ʊ?\~!?:?g>d?z >}>z>R>Υ>>b>܉??28?2?? ?Y"??_Hr?I?,?U?|@;s@,\@5@@S@?T??^?g?U?@ǂ@:&U@8@#@+p@?@ ??aֽ????T?f?h!>>1>k>`>U>̊>8>u`?F?)Q?/?2?0:?w)?}?M ? ?~ > >2@HUI?'?u?ެ?IT?e?ǚ?h?nƇ?t?\Z?I??a?H?98?\??ْ??H?"f?zs?a@Q@Mh@[=@B@#@M@>?e?0??j]?O?R'F?P? ??b>>M>&>R>>>@M@lS@*A@!A@ @a@-???C?fEn??` @@ى@;@C*@@>@?cT?T?f7?MAVՁA@-Aw@G@w@׈i@@H@ @=K?"Az@65w@M@3('@'@^@?[?c??t??f?>???~?????p?k`?f?H?Cg?7??u??7s?wԃ?5sg?X? ?\+?RH?tN?9#? ?G?i?L?p?i?2?@?3(?@?'[?/ ???y??X?bGo?tnA?L??} V?ȢA?xY?6?*;?hy#? ?ʲ>>>> ~??a ?` ?5?D>4>>>Xm>E>\>>Q~??p?ps??"Қ??b?ˑh?d??6?,0?? ?4? ]?C_y?H"y?g ??]C?t?yZ?a?IA9 @{@έ\@Z/@@B??5d?E?%:?F? @ƞ?&?a,?,4?@?5??*r?R?T ? S?O@Wb@8@̿7@@mA@4@*?*??f?녫?u?zi?}Z?Q?o??v?rC?!^?ߢ?e?0k?FR?G?bo??sYl??4?zm?,E?rZ?qE?YF?!%6?Y?I??5> >[>u>һ>ՙ>\>>V@=@F@fi@8/Q@@@7!@l[@?L?D??w?9B?>B>[>]>F>qj>>VƖ>%>‡>@R?B@yL?_ @1@V_>^g$>_>'>f>a>3 >>u=Z>-v=@@<@o_ @5@O@@\B@A@?@`?ض?ia?[?II*?np>Y>m>>>>nr>5c>E>?:s>z??l?k?C?z?ҏ?? 1?iY?.>0>Y>k>*Mj>x@R@Ew@=@h@q$|@.j:@u@@@q??^@ @Y?x? ?jN? "?T8??n??]>LEA%@zf@^"@@0@m5?l?7۷??t??n?0sS?j}?3?]M?AsW>>=?e}?͇?jO??Ϡq?Rތ?}?.(??2f?jHV?1y?A٥@Yp@mD@?gG@0???V>l?C[?71??*,?l?v?'3?r?? ?֭?o?yj?i?mT(@n@??rM?J??S?;*?j?t??z?@}?v?nhm?X-Q?)J?%s>?y%?Ў?Fa(?c?S&?F@sK@^J@$6@"@Jr @#ϭ?. @G?#??7?G ?@7@Q#@??,6?(?Y?dz?f?\?h??pm?^?uP-?uc?A?H?I?pF?j-?1?1?ğ???K?V??f?0o?z?2w?teR?BZ?I6??d>/>0> >>v{>3>l>I>6ބ>$?:>>Y> >V>bV>xiT>V>{>%@> >?c.Y?%N?5q?4?I??,^?*.?( ?|?) ? @?@~?lA?Y?[??C,?2@'?B?(4?>?z?.?4?#?}t>>{>7><>N>W(>7x>Ҡ>^>j?3??d?A?h?5!?H?X>D|>P>N]>Y>R>nqA+@]\@Eʕ@FX@>M%@w@.@"@?AB??8?]"?Nh??5?*?WG?@?h `?g?d:?G?|?k@$?#?@?`v?:?}ޣ?⩍?%W_?$?*(e? y?D? 6?/F?`l?8?9F?[p?؆b?6;?D:?}K?hQAٳ@O=@-A@p @ @m @@v@~?z?VI?d?*?r ?92?=W??#?.?.?IL?5*?t?8AӋ@QE@2@M-@@x?c??Q?V?3?WDA;@@@}p@Y@1J@V@? Y?hײ?@?Ǐ?B@]q@8@@7@87@b9@v@ݮ?:? #?i?U>>==ʸ==Oh=b=Uv=`=H=9=b?U?Yq?B?JvT?b?B#4?V$? ?9?R?ȣ;?ML@d@S7@@ \@3m@\@1@@?c?\?8?B)@{q!@@??>@;&@y@?t?в?`w?A@ @g@D#@ Q@@>?w?%l@?{g?[?.v@h@w(@m.@Xg?!??f?=?Bݞ??H{?>h?j~>%>`>I\k>/0>+>">&>#>bM%>l>&?‘??2@;?T? p??" ??D;?p??0@m?! ?>@=ë?V?.?4??-?;'??!???ho?r;?9?O?OC?[A$? ??A{@Wa@r.q@@>@6X@!@k@@wv @D?n;?@@|@0 @P@, K@=@ @?TQ?I?U?A"n@M@;4E@A@ٵ"@g@?G;@ˆ?l?A?>:Af0@7ϥ@9Wz@#(@$@Yw@@@d@"?@a@\-?b?3n?n?mE?!?_ho?k???4Cr?a?[??N?e?F{?(J?b?BI?D?L96?}>3?r@S{,@'?V??d@G @S?!??g?? +@? ?Ȍ?C?F?0?:?ǭ?Fi?'"?*k?m$@ř@ b@E&@/@Z@>(@e8@?cz?m??+u?O?Ur?k?r?a??B?Ԍ?@{y?g? ??>hv>Le>>>_8V>q<>Tt>7@>R>w->2>\S!>m?$?E?v?A|?E>b~>>>Eb?V>>j9@?@?2)?|?:?J??FC|?Wf?eR?i4?@{7?Y"?] ?ݧ??ޔ?Th?1p?7IJ?+??j%i?5?)T?й?ϛ??F?p? ?懰??V?+@+?@??{?\?Ϝ?2v?\??Ls?~F?/A@P@7@i7?@@^?+??̀?޿k?VW??A?5,????˕?`???߰k?f?پ?T?`>?뇱?X?eb?Sm?q?Ά?u?=?ڋO??!@Z'@@@Q'@. @? ?y??z~??q[??K?\$>Y>8 ?z8?n>Z>E>U>C>@>AM@a@B@@?Uz?W?>"?s???-"@ҙ?iS??-?? O??X??lo?7W?y@rG@H3@\X@"@]@C?;????‹?s?Q@_̀@?^@HZ@<@ cE@@Ct??s?&?@\e?-?g?K?p?V?(??Ŗ?b??<@(@@Dc@1{@$ @N@>@?@)/@3@Q@`@g@U@@?y??'^?)*?a?,y?8n?I?>?t?&?*Q? ڃ?%xo?/?D?vX?b1!??K"??HEAͪ6@M@a@\@G_@'@K @-?-?4j?_?O?̯?{q? k?!@{?5?_-?>?(?-?*?(Y?hE@?Q֔?Y,?E?ǜ?bp?).{? g?_23?02?. ?`k@sJ@#A@;O@cd<@,@ *@h@???)^?pocketsphinx-5prealpha/test/data/tidigits/man.ah.2934za.mfc0000664000175000017500000002721012504317076020702 00000000000000 @rr?C>%1?J>a?2v>ǁ?@?e ;>h?i9? ?@By[@3rp24#>=J?#?N>yǬ? ]?Ҵ*>p@;f"p@7rX?>L?\+?R\@?ɪ=e`}?QC*@?U>?a>">=DQu?R%??e??@>N$@\*,\1@>4fK>j"+=P?#kz?F,?I>~?@u|K{?䪶??XJbk &*l=@@?:U@BV d E?X=ɿ?uq>oѽj~?4ܳ?`D>4u@=>l1#?V-OZ?^o? >'M$\??~>(?|?]2?KK&M@!ECe͝?N?$_>`B=.~=ZIX>3}G?h>b;l@oHW?Zؾb>k?,S5>b=?15?= n=@~o?rT-;(s>H;%=l?w?;>!>>HIA`Z@I2?* }?E￶?m$οGyu>>+oA+#{%?)>2>_ʿ":Y? !(?h?"%o@k$`J?ͿIl*^SQ?=>)@ñVف@"!@=Uѿg|[n??/G>_>G@v5q@>޽_ ^>#Ï$>>?% _>=@^9?lf?Xz&wI?Y?u7>?&?s,?Ƞ?-y@bi/@"1I [Yd۾k?UfT>9`? C>a>oA?Fo@ *1@ۻ־>-=jȽ?;m?J?^Y?%?Ƞ>d@@ 2K* ܾY\?[ >|? ??[}w>?E@LYps!?g>Lck>=zļ>r@ h?dP>Lt>>@q?>> >=>?-?Aվ9K xqM@h>꾇Yuq}>>E0>m?` t>@Ѭ??p?>Sjk>n[>|Ѿ?>=tM?kCt?Z>n> ~׾¾=1>jI=ɈA{ֿ*?!YX V>7>|½6Bn ?h1N=%&Kf>'RQ=mB~ہ@r-,Ge/>x쿡-ur]>?ӿ?&~AF0@]:Ŀ6 %X"cWLDs>[r>,A%@u?&(HO$?7.n#"?<5?6A\ ?@b?2D4=;x?e??gY?.A(vK@(l@?ec5@< P?U?F>>ՓAі@@?Kŝ~:@8\?`>>>D=A֓+@1@_?[ؿj?(P? h>p>`LvB#Z@t?@)>M߮+B5U?/?^@Y O{?f\>gX4B6E@?;m@ȉ5N:,?Ǎ>I?B>2B4 @Y0??e@)ߵ*4?כ=>sWB0@?V0@35Ѓ?|4C>ھy=>B/%I@s> @I! +Ĺp }&bذ<:C>:B,]@9.G@~n[3UlO=W*dl>"?~B'@ؾ<@oK l˿?,>?@B!LH@p@ K{aN(..>?mXh> 5?B@aɶ@?fڨ) =Gf>Iu>? XB@? @+>򳤿A/̦.>w=Ws?\B@?;;@>q[{a_]H>%#qz?aPB#@+?Kn@E?%ѦG:upq>;o?N}B&@\?Tե@k;?I'濊ԿD >޶P?B%@柾F@&;>C<6b WLh=ys=)@vyǿI9?EJB7@~޿@23k\o>?TjtmŽ>zB?b@V#_B?6̿f^x?y?y#= {-׾ 'iBC_@9E9?Devɿ#G"Q.I?Sa?x>|}[/fBE-@5 & -nZ(? ?>n~ڿRڿo3BF@/oUةw/7ovM?a+)`BI@704@j' ? ?MZAat`cBJ@,"˿*ý~"aX??uu\ʿp BK @!ԭx9?e?!~!e&VBJǂ@'|nO%?X@t?aۿwM#,ÍBKeq@>忉g?1y|?TKſicDBK @~*+?jgNxN ?r??F ῌX *3ο,BJ,@e&#,?eBO?k?\" BJx@:c?޿b_ҿ#??aD~T)GMBI?lD? q??X?-1(cBI-?KTR?L]6W??Vȿ:~ǟ=SFBG? @gg ?ϋ>6>ܿ0bBDʃ@uvȪ@/&3})@H=dH[D ?*#FBARQ@6W7@;dͿmX-x<@MrS& >aĔB9 @h7-@99=hM/?x>0 E{by=\J>bbB&z@)=4@<}>fIQh>7{dPfI>;{J?:B!@@Uv?p@Y:?o4gq/Ckm?%?_B@:?A@I?">쿶t_>@/FL'o?BP@?~@XD?r>nj4 >κi[,<?OBЂ@w?@@?,(?82׿ >/?~Bo\@@QV@A?`\2?=lEH?KB@@9@=d;?,Dо?Ҫ㢿 KhȾҤ?ބA@s@cj@I8!? y?Y`?jh*ok\?ΫA @@@~TS?SJRUt&t!;LJ?ŜA@ZW@՚@ue y?aŢS> ׿W;>AA߿ @Q@1H8?3ʙ>4\>itѾ]+>aAH@8Ͼ#f?Q짾2Y>E5vF?WœD/>M,]An@F?ت? F+?rƿB?dm >aA&W@v,?i{8`?wx?#>Du?,t?BV #@!(J%cŤ+>C?֫?52< [>;[?-B! f@/N">vX>n>u?*=>ĵ?;1BV8?;08v|RG}>q?Fd>%?B‹ `@?w.eԿt̸?x `?;KBn=R@ AJ>@AE+BC==+C<6?A^@ 'ѿ)?v?̀?Iɔ?7V2>d?)AI9@p^#Ey?bb@^??3v?8@>?TiAlF @?.!? @9?HG?Kt ?aE, vA(*+b@@S?j?J= 3?DٿM(=p+KAA 9@SLC?@.!Fq#k>`:;= FhVޤ>CIc?`AEغ;?R?;B1.@[~Qo@(vgv>D='2:?v@VKBJ?鐣ؽd ?;֌B7l??gb@ e?MK)=J?Ҿ B6?Z@@jp ?1=k$-?kB4*?c@t@S1?C'uL:I6<噤?8U۾zB.@F?#g@҉A ]ؔlJY? _;p!:y>G>J>*?p~VB@86?ޑ@ӀW3wUمAR?ZܿԾ>H?;?5A@ Y@cu@J ?OE4fP?G)%v??!}~ A>@E~@N@rg?,]ͧ?FdB>?TAdE>1?}@?J=9-sA򁿋? @;s!?G\> ?^>Dľ{ ?>A?>ɤ,?$A?"Z;_>iY?t??A+ )3%AR M>Q\@%0@=7|cW>?xv>nA@ ?Bw8_Сj5>g2>AS Y>]?E@>< YQC?T?U-?UAUyFt?;N?A}?Q>EA'?;fA7ښ)T?l8(>B?\ʾCW==?pw>*.v A}(?Psڇ>@i?DJ?'z֘? ?P8?? >RA@v@W??j?8LHؿكT\?">c>tאB!A.c@S\ 2Ԭg?=L=g!^{xu>|\>dBA h@030?3ٽ3^ӾTZ>M)?\BA@. ˯Vgv@?׿$[J#~?/=5vB/~A<@.}v03B5?6#T¯%m?ཎBBAL@&҃?+!=4??۽c̾B]@R@TK D?%Jo=.R> =վ?I[*Bv@#@ K=I: \މ?=KeLS󾝺?p0<=ںB@?;/ ? Z\?>zB#AQ+?ϿuXDŅ?Y!eů>H?5pB)RAώ>.2i䘿hd?qI^, ?z? +B+AU> 97d?:0wki??}ӿZ%B-̙Afvu:JW=D>Yz??#B1BAۿ"ῇ7˿N}# 鿐H ?s?@qB1@gA.!ؿ/M׿x쿴lp ":?n? zB/"CAڿ@%>1G">|#(PIQ?Ѣ'?GB-Q|A znMX?ne!tQek=bY?c?1HB,@鴿 ;a?CC ?gYF?H?GB,x@wx?Lb-. K?ZC??&B+;@JOP?m~}=G_?r=.=s?B)'@;7?i} `#??H>;#i?neѡB(@Fh,E)?U?)>Ł>yL,Hݫ?vȿ"RB*@+@?1u=7?h>*'/?V^==B(BH@㻿ZM@\g>k[? f?ST]?Áÿ;5Bq@CO@w>i nh=P?3h>Dɿؤ?^}(B @v4>9@J̾N ^="?A>)7Bn@8@?a@?ſn # ?n?ӨRb?? Rw@-@t5y ۿ1fl ?z?!?vy?aUxB}PZ@9@>h([<̲|? F>T D=h ?)A곯LH@A'D?=T?*;U tJ>PH?Ae@A$?>?`#?d`!>=1AЫ@约@ȷᾈ?O? eW:>Mܟ?2A[9A0@U@~LjDd>k^gD̋C ?PtAA2@¬+?%<:?X><ꖾ VL?MB<;2@<@VP?!B}b?'ž1=un]X?CBTaN@J@u -N0jK?ZоKMb=<.W?sHB2@u9@JIjC;>d=!A?T?jB(//<@3@ҿ㺾$1 >M>Xu?^X?VB2>vm?`@9&7l Vĩ>>?>&B6`?c?T.D@0k|ΫŽ>{;$?P>P!B8 f?q>S@z X}k@?wI?sc}B7[S?[>Y@L濕Kq!=f?dD?tOB56?@ۿ̤.DwX>85?!ק`?KUDPB4/@@'}Ƥ@$U}u>*=u>IJEq?2=#bB0`@dqC2@J@{I4?qmvi>>k9?7)B-h@@ ݼI}I&}Ci?t`>4}W=?7B+@ܟ8@R76?> ?>>>?B(@܅)O@? ?n?_^mS>|@?.,B%@48? ?FlT5?9N?> >$?贿3B"3ABu?b?gxvw?`H?{1>>UUB"cA'~?*?$Rb%n@-ʿ+>`>GqB#+A >d$Ǿ@ y@=@ : >ţZ>gB%A "TCܗ@Z9x@IJ>om>З8B'%;AݿK5>?a<?뤿3=L> B$DAC?ѿmiU/t>\?Cgվ?P])?B"A˿ľn?͡#?/&?Ο]M>U>=O(B!xAI$?,??^ں?~?O?M>'B(VA u%|<l q?<\?>?okVƫB@{AI=VO;? x>?k$?}*B!{@c~kIϿL7w:o>pX&?)Q?xz[B@-?JQڿ^;:2쾤4E-?&>h?mͰȿ&0B@^?kIJa=&P=>ѿ=?JG?bX߿B|@>|8Im5? >>T}ΜV?B?ݭBA V?jn ?A?3q>A>fU> a?B&4"A A7?dm7%?-o?u?޾up?Cj^x1 AW}ACC?2 K3/2??HӶ?Ͼ?[ĿAֱA?SNz @h?#?{ξ>K1ا?(dCA A/k?;9?V?#t? dʿcAcA+E@ =s)k@ >z??U4kO?= 1뿂AM@պ@'fV?H=?>)u˾Y7kA@@)'=MIa@G@z?ZU}?c\ >D&>cfA@#?i=x>tG@%A?x.=-?u -Qp< 9n> >v;Ab+@yӲES-=?%??t?NBn}oAk@1@FDHYI6T?z-?p]?Cw>>U澡?'QA\@?ЇJ˺ > {?_K4h?/мv]bNA5 <"q=/z8VB6Y? u>/6?TVQpE?YA/`?BIɿ)աA?p"?a?(ܿ=JA)pUMX|~M? ?$?$"C5A-p{Ebs@3?!4x2zп (%A3 TXؑ>WZ??G<>U#GzI^A7?sQ.)iL:,([?a T>ſg4GwA&?7 >t¾(ѿom>Ub=>F۾-^_?% A3ZV5;s5?[@Z'>X;%MD yF?&~A;>v>оnl>rg,A>6> 3g][Ȟe>ajA׳>" ~=kg?m?wB>|*92A:2u xq= o?3 ڑR}c~@۝QHhѿ; e7?I\?:1X><Ο@%mw&H܎r@žlXoǿU!?er?{Z?v>q==qF弒Αh@`B=PF? \>(̿PL?>}ly~a>ݿdU@*|?"c>>c=??(]> Pվ f3>[C>-@?W}?3~=RI?s?DuJlb<0@˿\>M?1ɪZ>฿/uбKȰ'@kҹ>U]c<Ls->j'>s¿sGh>)>iV >s@z0u?S?1 h-00m?aڅ v>gO> *@D?¿>Ϫ#?vAZ;Uc-@l'5.МrՐY??*1*>j?`@Zݟ:Y=Z=>ˠe>v$>>p)1V]?$@'e"m?{Z 9%>Fǿdi<ӾGU5ww6V5? l@Y\y?տO3AԧtѹL=(=66羿fMO=M8@Xdh@O?:߿c0aaֽV>%FTQ;>{@U8/??8!yZQ=蘾= >z@4?==C|s9pocketsphinx-5prealpha/test/data/tidigits/woman.ak.ooa.mfc0000664000175000017500000001766412504317076021111 00000000000000@A*_]{>r>ǿ"ǝ>^>;ݾ>JKq>S&?@9>eR]`ߐ'???1os[J?q-@ͺm?>w1;??n7>Q>ɾ;)+@ I?8EW ?p@>@Y]y2 ~W@v?= s/ç>r>7 vm>=-νŲ@Y>ܣO˿>i?PDk=Ue?'(> @xve?UYGT! $jq4/N"'6@uN)&?>Ft>s_m? g?6ܑ)?[D>@#]'?4*<|?Z*?7>e0e9?T>PPfY@%pm?1? O?]( >M? =>.Njνf?z$@ E FݾWڿ?/>>;$=ᑎ?eqg=+>?6u??rlAt뾶?>jF_p<5?-T>&0? Qy?gű?S3 ?8=Pwm˿$=ڔ¿ lA?_{>A?l;ςSN@T@ @ =6ʿI€X>"=8<>.+>w?R&?١?0>&w)p<>h?5><5>#4=wc?CGU)? >>Ue>X?!p\2C?;G>ݾvP>e9?rEXg-[=闾Tpv?ڨQQ?xB> *[?U?Sd>u0?, >1r?E?fLn {?=-t˿KI,7R?Q4]=J뿄bDm>ŻP@`q >? $C)$+_ɽ!?X?>@"!u?oZU?Ɉ?Ý:]??>澖b,>ԧ>7>x?q$?[@/R>ھ>"?A>(?M.??BI?P^?D!?\>s= =я>?d>.a>)_BiJ$?#׾?D&?=+?n?' >&?E?:-xVf@0ItmI?-?X?8aÆ>]8>>Q#>? >{@1c]Ў?Ż?5>N>y~>[>9鱿҈??>jA$gF>ld?AX*O?a)_5!}?W "W@f?q=V>s?X&jaFbt?K;>ÞVp?V?BcS>jJ}>0b%>.S1_?z0t( B?"$?5?M>6>C7?0?c A3M(Hݗcp0j@'f?`7?{𽡽?w0Z6#BH'˪?y>#?rfBG(r7ʿ5@=`u=-2~*>[{Bbo `C˞?Zf+PZO1;ӠJ_BuHiyÿ?ڣm~?Ƚ,-YUv>,;6>Q|B|=/)W?mhi@;_;vK:GM@Bu6y^? y? -*HkB@$_Bſ8n ",,t(H?ȽP{ >>HY4B FC-7M҇:?))>$@B CxMBwȿSU(u?*"y1ɾNCB,FJUUE [?E<,;M#[%` BJmXB?l14iftq*sԿ|BE1 }4fK,u?yϿML9ÿj*]p>B!ATQYkk?:a쾧ܟB'ֿWuB=:Ȭ ?h4x^? ă3xB?ݿ\CB# 5Z}?f=>3>yX00 z0Bvн~\]?Gt>o>=8:B\Q=~u d-.?.>>[|6;s׿rB>Hƿ_G>>Cԝ>gS>-SF⾘rB~f齇} dy;>G'`Ͼ4S-B}5>1B{?hpǗWmS/?J8`h?F6]Bz%f&.Z㿲j%?nF,?C onBvO? wqĿ5+?l lP?NCOBof.?zBY ;auh1?UK9[?VB`<@xj#,Ӯ>AKhU@so!5?PBO@n9tAg)&<<@EEj?[˿ׁ1BQu@-C$c*9*bn@@s-u?#*B@ҝ@))3XZ֖@i)3ъ˂?sjMB @.#O2cC0@Y?,?T5A\A @p|Lo-(q@]@@ObӾ-տժA8@`<9cOT@>@?ՎR>c%@$?sCZ&`c?0@N @@|ɽw@Kdd?V];,q ?)@@ @i(G>ͨ;Q%5?+ ?J??Xfף?$7? ?^>)B?k?ʾ7( XۿS >A ^dƩ?ܗrS~>??J1?; vw?c\,A ?^?ֿJYS?ɿI?L6XB|*gt˺r_f.>? T?4:џ?񿂌B}(ؿEȾ 4ᑿ?m?C1?k&NbG?pBy(xY?>ϾC8tֿ? ЊB ;@P#$r?CxG>2=%Bhi?IXBFowZ@PW(S?V?VD,>?O; (B).1ȥ?J%>F5:>?/B˪$Sȕ;)ƒ?j!c>djث̝ÿ@B`۴¿Ck5?d~>;m:ů=>#N(BɿZUTSE??JQ#f>ɯ>R5B]5Kb<vӿ%) >jw>ǿB>jA(?+>?>'c>>P;B/B)o!U*Lg?>iz}*> =»4Bhh+,;=~b?Eʢ>c4F-,>>B5υB.`[d9^ ?II>Կ+yf>k+8IЅB`(O:!?J>u$>WNѿ7B 返ߚj=Eʽ?J7l>Z% ="PdB۳OW!i!D0?$>C(KQ/|BXqŔ1Ͽ?Op? 'j3Ѐ=.p Ї:2BuUDѿV:A#^?Do?*JKaǢ;p) HB㢿 5eLV ?R9?}.@MsBwӿH~I>4?,=gD$H"+M1B׿Hp Pa%#^>[k ?h,>^U`(3KB# oB.K).>?-#>*n*vvB !3sϽO +xB?7?(U }w<6nB}<ץ t~SqG)Ac#w?O_?j?ȾS>vyBy1{>p6fCB.X3?53d?7{S b' >@XgfBv?D/[ Y(5G~ƿ,?AV?^$;>nٲBqz?.AE z|Fj /?7e;>7 Ӿtp?Bl'?&22XID'St2>EÅ e04A>{Bh„?ء&k]pT]bV=f[M48c?;0=BeH@vG9mI쿿>/+y=m?c4rBb @%hg&X%NAſk3!y?Tm"4?OB_V@>K=>N5Tt?2e?dRB\@KKXo.ŶM . ? C}2?bBW{r@H4ǿʹC$T?K?]CBR@ڿw;1,jpC?sۿFw?/af٩jשHr*N)"-?6T$i? 7 B:@ >㚿מxd8B >z!?3둿s>>̿JmB0sAׇ?5ls՝BT64P?ȐϿ:mFM`c[B&WA@鹿G9Lm"p#o?楾jQ$~wBDA$I?vJ?d:a(t1wA?\,V b93ۿusB_SA6?~hg{鼰R ?+cܼ BRAJ@*3?ic% wۿA^AD^@B#?aUq>#7 VgοoA\A p\@ s#)sp>{Cz!ݿ]+AAA a@?Ɵ>>P~e:Ż>cjIAӑ@ӝ?jt?H5VdA @^|?@e^5e/>Ɣe-KH"?GxRAs@g@FC?/?8"1yKG(?!sA@ik@2U>RY?n?yDA??2>"@"ugA|~ p@-6^?Gh@#?)?{2/=na?Ͽ RAwۿo@Vۿ>J?!s?Ƿ6CN?tѿ miAkUc?j(@ +|3?9>q?%F5?8jAaud4@U@nҺ?l=[x?37?Z>APx?Z0?.@?zU6>?T?kd6@ 7N?੻MAI> .?A3 @ @.Ac>;T??p? <}>Gk?zHA6?@??I?#=1??ǿ(ݾ?DA"=_;?9@Y?T =!>֮>X?ƿ6A >R\ @f@>пfHuV?)C?ҿV>3lJ?i #AŒ@K@vĹ@&R?x'՝Կ?r۽J}O?sATL@]@F@v>GQ@?@W'?U?^ ?X!>X>%{@=O>C'H@:r?QYP@mC@d0?ٺ??:w?> W1= Kdk@ř@?^R@e.@HR@>?d.n#д @+J@ux?ِ?}o ?n`?>uJ>?BVn?2N9?Ey?Uҿ@xoz@~@?՟? FDMgm??^>E@/ξ@:=l@{@=V?p>U~??5>94?8/=[A>3@X.¿-@eQ@ M>?} ?Cz<\<>et?;?5yC?T}@|Fy@, @q?)C>Vy??X$>Q,Tgz@7>@%@?Bg>y@"@Du@FR?u"=Sj>3I]p@N=@`Y@#0?- *IR?O?vwo="#H*ĉ>Gw@h ƾ;@[4@\?޾N>M?4?>UA8?|=TV@z=tn@=@ @ =2> =g">Z=.>K>彾@^2|@j[@z?"?E?N/=Rm>Fr?:3&?D? ޾?|lW?c? ?Bn(>MTοo= Q??;)=pX 7@l=r@vS?Ӕ?Cd??HvR}9>>^>>ƿ(@3>Zc@?r̩?c?8>;>]l>?A6P=pocketsphinx-5prealpha/test/data/tidigits/man.ah.63a.mfc0000664000175000017500000001556012504317076020344 00000000000000Az̾>z<@kSU?C>zCԿ g' 4=RA1[R??!GcWPs>+֓?7>rA{?$r>LC8П ob=kg>~@+c>0K>(?+fbMXp/C=>>h>dYN>q>>@Ɩs>1)x?>`P\ݽa>㝿= ?Ŝ?m@GpPbXK? .l9^bbd>At7V>MS>ؿ<=1IV1Ϳ3<=A F%H?=>J?dFBEr fȾG>nU@Ͽ?`>Sxc(f=<;ҐO>?Num>yqAYx=?S),=J>L?꾨 =<1AZny??#SE]D4 ?nkJWZ=|@>Э=L єt>Dr>! ?)v=Z 5@duX:l;. Π^+½2#q>ٽEEm@!>E!<vPÿ)Lッ|$ί<߾@>?"ɛܿv.#&ka%"P=g'7@Hn@$}o_']?4?C󋽕? #:Jv@ɾ[=?hp?`NnhYbg6e?g=dgp>@r CxX@>>D6HoHkby>k=F?t 㾨?@oa@a̾$|>6Pڳ?Hۼ?>֍=p;>G@^rs%@*n;?4ة>>o ,C>3?4?>de?>F@ܿ_?_0g?'2>2>>? >@lCa@>JmU6>E>af>C3?d7 *@7AI@A4?)>^;s:ssW?=IJ?!?@IT4y?> sj%޿s[LK.>7C?V?@n[?.u>d:A@gK>5hؿߑx?ӾۆGZ>.v7Aj&Q:@zRQW9=@}:U>M=:G>Q?*A)@\?E>%T?ɿy@{B}?S= xA6#@%?~ar?ǑoĿ \?*I?AgKZ@X, Whrͽ3>ʢ=ROy?$C/ûAYJv?@J V-8>yHW~$<%U?AluA)>@)]>E>,s~=0?3>Zi?,:}AiBV@dPaľ(G>4d>G==/? AIJ\Xz@Rmɽ/>?Ir1.>Qs?C;Ali]t@5G?,cy>?RV?̽!?HE?L~AuN@NI>LG5t6w׿1Y`Ğ??>l&AM@U'!?'>g> ;?bq?.*?a]?rCAc@Z*?;>Ͽտ~M+??kufiK>PXB @YHeɔe4&=~]" `?0>5An@?!@# ?>J<%q>*|^k%>W> B,ߨ?1?X$?뢪*7,^,<?(;;1?BMZ?K0T#V?ſ  ͷF>"s>?Tǿ8 =-'?9BU]>,c@4q<\#?*ǾTV?G$hI?TBUT-@ {}'L{?Vm]?KQ>\BTRϽݿBS@8{Q3Q8]C?lV^?6(l> >mNBPY>R=0>>=0н!B0SK?ֱ!2@q?)G<@5~C/?_̞2۳B~@4>M@P?0m*:8[@HA?XӾ==&-RB@?{?F%@E?b "@D7m2?T@>H?>PAУ*@Mz@'@ı@7Kf`@,@/'T?1Rqc?JAʱ|?=@:e@\<>W3F@?Hh5?ʺ,??!A[?"@1{r>'5?+>f?BYY>Ұ?706A_:rsmC@2t\?4p>.?NV?C>B AcJ $@ܿ0:OW="n?{;|HVdB wl"}%@U!}n5@Q>]?׳="g2/ݜBN_ ZF@gc=Pc`?F?v ?$ƿv,=йB^^D];g@HS 7z??\=R('?:RAa]">O@"]DU?Įƿ$ "A` BB?nbk@#Ǿ=Em?F<У>P;0>A,eN@2c ?GJ<鼀;?&"?6=ʓ9>A6?J1@"f>_˿?P34?h=M>mA'w%۶@-@ n}>xm4.:N??9(?VS>^RAg@@M)3?̄>A=?,qiA-@r@BO?>(7>Xտ>t>ҜA&<@>ަ@?o?8?y?bd׿ ??K̹Axv@ˆFғ@:<+>?a-d?]Az>h?`Z?t͑AVF@տ=@Ft>L>>?4$٪?N@A[! 7@Y{@ľk?we?e==>Nq87?4SAa;Z@⁚@1CV.?@9?o?U?ESnAN_@3@h AQ>Ѿ{?3?>J?L?*AnM6@9;g?3f&?p=㾛o?t>?B٧?"e7@+1~>Iq?%˿a޻?׾X_b&?.AI@ֳ@*q?/l$?B [?,t?%m>6B ?f?)ȧ@=heg9˾.>>s" Ϳ B%]@΢T@l^=߁gzg;7JKv>r>>3K/B+#@;S@b!>Ϳ)!NLT?M^K?B0OAn@?>[JGm0iZ־9?m18?o|B6Ҷ@YR@-Y>3"?:pB::]@T.?@?ɡ ~>I=呿?,ٿiB<@/@)5??XJ47>F?6)lr?}B>e>@u@;}?@_ȿYm?C[?¾{g(?vB>@@m??Ύ]qb?ہ>?p(OB?c@p0@6? ^:Bz?>LK#?PB@j|@)V!@>jr .tl?k3>nH?qv="pB<@/RZ ^@b) gFQ?=%P?lW>C B>.n?v@[ y?ozi0s?8=aUB??*֢@;RO&?aS, %7?=rEB=?>4 @.i;=?QS.=\?徚8>B5s?1?gR@ֿeyŻ> \ ?~;>ϺB,\>_?@ Z)BV?U#޿b?nx ]?{B'Q>լ? @@fa?鰿a?v6*_M>`"uB%Y?;ʎ@ o@H_oA#?76Џ?ctm2M>ċB@@!r@uK_ss>ߤ?DS"?#e>2!BZ@Yy=@9@d;= ?Uf?UR1>a\A4@˲k?@WZ=?ЊBH=8?i,v?NvAV.@Z@'@^lX>P?3>??yuk?A,e@*@@Y: Rh?}5_>H?qc>R6A{f@w@@j%:?3^?x*?> AK@@|@t┨v>=޽ն7? #A`AY[S@ߦ@kʻ@M -￀#>V*23?un*JAE>BܿI<>.N?<6A'4?e?8`?-=jʔ!c?yd=By> @)gྙOlA'I?N?ZzgʽXͿP">x9>q>-yA /?p?ٽ'>??^?P( &|䁿.ITdsS1A$-?޼?}b%=PzҿWĘ5yY'R=\`A'?@8}ھ6j rcpSԿ;he<[A'X>P>s-?㏿Ed?)>:8B> i>+@¿w0?&1=rqIʾ?,??O?/K>,d>ɐ@W><˧?@>1 ؿ?%Q?Br}>6?Y>l@!laq?@?δ?ג>]0ӋAᅾ?L>l_y@RWE^??:a?Yي>>j°" ?#m>`>L?VtMsVv9= ?;?C>|}@Z3A@.k? <{s/U.!>2V``@l>F7?ّ?~>X׿'?"I0(ؾ,<> "@ѿ@?&? eB.>>>uy^>տνԤ'@ S@/cH? FCa?c*?&>>5C?4@ʻ%@P=2>'Ŀ=qx=>]>/mȽ$:5>@!?βP= ZX16>2w>{L>n?@-ͿqQT@>Z? a{aG?R<>;z=4?7% ?F@'R??o?DP%C>ȶw¾0>CPT3@ƕ&<"?M;59?je,ڿ#]Mi=D>%>{,(_oY@D Q2?ڬ?~3kܑTL[&?2>2(>>>@H~9>>ֹNhȿi-@$>YUG*E&y{>@ >L? ç=>B܈bMd!v>? 7@w\?߃>>>3 @i\T0S?+=z@ꓻ?؁!iJҩ׾W_1y9@پUUv^>դ>n> ~09@@\@Z'^^?}=` U`?$<?>5\ @TL@d?v/;>g?a侪# >y@a(??&i?OZ?9Im_4?Rr=rљK>pocketsphinx-5prealpha/test/data/tidigits/woman.ak.o69a.mfc0000664000175000017500000003062412504317076021100 00000000000000 d=o=H|X>Ȱqn>? >q>Q>=> 6>"72O x)>˹sf?2?;? H?9?%I?(x4r?Y)?>ٻ]?t?E?*>?^:; ֮?Fi?ޅtQ>>A>Ջ?M>?=?S2 AAn ?'Ù*>ۍ?oO?q?H=<?B>~? KKY>܃>( Ѩ?Y>?@z>>`U>YfH?{>ۑiG>K=:l??_x?8}>}@# ӈ?D??^)!H?9{?%#?#>,>YK?Hn@GD}j$?S}??g迏~? X?8ڡ>9S>8M?c>Xk?vn?>?MT>H>?@A\?.?sr1?(н) TS>oJ=a46~>]?s> _?l`W=E>\!㽍%Ib R>lGh?8->aA>4>$Tn?aNӃ^j>ξϼ>t=5B>JV?[5N3>g#2?Ψ?+?q5=V>>y/>l?k=4?>W?-k?Jp M?;Ox >.|s%8Z>x ??h_C>v? >?;ľtֿ>O=,l>oy=a>UQJ?.5=Di =Ɯ>?>=FA>U ?M?S?z>Y$>Ű?)>%n}V>RD?T+ek?cJ?54O_'k~>?n!?fi>nn>L?:N;?'-?4 ?=V=m?1?w`>x?>r?c98K$?s9_h?.?ƻ?JFDS?K?<[2>d? 褾&-Qh?R!??#5 )C!7?>癫?]Xv?:6pl?,lK>>[/9Rf>ʛ?2>7N66 ?wV>r?fg>S*?$:>h?D/$ 4VA )u㿒Awd?m=>M$A )w6k]替0Ab>UվƝޫ? =֖@ 犿?b?3 atW ?+7>_:o?#Q= UPؚ?C7˗?Y=U!N>숺=ju?0 ?`kT?e?$>ԟ=̗ ?&61==#?T#>}+?>;,?2?ÙAS%#vYN.zY7N=?`>ؕ>K>A?ss?#??z&2_o*?t?d=>;P= ?}q*?Q?,|?6-{>=? ,&6ٿ+X. @6??*?#X6?<?Aev>}U? oY@ ?n?2Ra<*=>ɵ>fW0E? =2@Rq?e?+|?q?2\?\.ҿ.?кik`@ ?C?۽ܘĿ_?6???#Wᄈ>>?N?畾76?c=M(+c?C?H¾`=dq~TO?*Ŀ>+oվe>R=<*?5/<>A?I70S?h>T!>c4>?L9&?]?ϋ>@7fhs>)?b>Z?!Sx>&?w}\??!@_`<R#d?=*?ێ?5#mZy>>C>3}^@WM@">>$0B)?l> >߾m6HlA!sd@y0?ل(^Z+>IdR[Y91GJɂACH*$@P&տͻ?PF ?1X?dy!?K l @J?˾׿vS???=³侜4?Y^@ P@ǿ;RW?oݝ?`>۾ƐE>0>BϽ)A!}F=P@o?ǿg?[<@,U}?%ٿ5>?>V@Ǧ5?#;my+G? U>r?rX?¾O?z=#@VP??eqmD??-=ԓ>P?O.>Yu?s[t >Zy<<)ݿ7z;'?wl>>-iAs>?S} ?\bk2Ӿ0?+ƾj?!?w>yR:L>7@֏\ۄF%@k a>R@]$>HD?q>$>k)[@Ka @ms^>K7>?^9?$>?\=BU>-7{<@&e c=\;Bm\8 $?L>>ײ?@b<?=2KOAo_w<U>P\ 5?Q@mJ}+?Rӿ"R%f=u$FPAi.>NA$ȿܒ>?%d@AV@P{$ >@1idp9*_l ?Ae@F@=c|? y72?c?Y>=?9?c>ŵ>Ca?RN?߲3 m?1>*^?&?7W>a?b?L.?A?/>^#>N@?\~>:g>c @*w?½Ƨ#?Pgi>>0>زQ?>?&Me?^]>Tྊ^@TPE?K]?T?L2?Q?(;>b~A"{dM@P@~?+?&6=B='v=2>2>Ǩ>kB"*ſd,aֿ@=;Vd7[>ݿwUB,tv7!s2\@=+ >3>]>>*6BlI][6a*D;| ?<@GЉn>Yq3BoG?AekRY3?ut(.=Իk]BѿpƿxG??mj0;ƾbBDe=IXj GwX?ې"{FZ+B>Y }}8oj'?bOoD^[:B?ZKգbͿց?XWԿXĿ\ZBr?yHElXj ?`)5"F&;}9οv*B?J⃿!i}T#? $: L07Z@B#B@%3oҿ̊?>-( _DaO+W<;BX@]n/ m[M?u?%e]h R޿vB@Ffς0ޤ+<?D=h^H xyf8Bܭ@Li!4/phPe?ӊ>f߽k],'yo9ċMB0@wӫk8P?q颾9<)Gſu#BR?{ zU}W7?+[,[ο4WBi? [DUweh?-={|<H&q(B>WKKQ2`?UR=ܪ>g6kB}fӗnmS\O=gq龝LDh=ЯBaKn_1HJ~X>l3=7; ?/BJzkRȿ KoZ[-ډ9οqlم>,ϘBpkF$8E<e Chҿ.]翎:=˵?5|Bz0[?'& Bx|p?U?+x?ئ TsQblÿc?GB?3d̐Br??a4BZd>݂+Bl>?KTE?+,u1–m+I=b,ƿ Bi@?.*J?V2[]!ƿlh运q`Bb?kH5?gRj=yuƂznvWB[?>ga?Og@8V8)TRBI@D?><P}$P e)Aؿ}D]B7x@$8@%h>ϝ8~NDÿɤtؿ8 B*@\?(8\N=˟uȿKz_( 7쿌BB@>W@{NT>B@6G庿DqB y?㌦?m>hAoQT78.T?*|qeB  ?ww?C?F=0`d'? AzԾ!z? >]=6B Q >F>Ѿ?v?LKk=gO=:Z6%fB \W;8">ؿe|=?G|1?P;>%?{ݾ>B #"Q1Ýg<>\>>f?, 5$?)B#??X(M|??m> .P2A2 ? JB:0?]>%64>` yQ ?WY?lg ?# B >B-??8T5+?k ,?5۾>O#>46G?= BS=?3? A?LW=^Nξ ؿy?B <O??*a=旽٩N>Фɾc)1ew >.B4?[=6>pITS}A*򃿍l>5Bq @;?dL?'q 0 2 (LkGq M˿BDBEj@sn>s?gȿFYH;<[ T(<??pkSB|@R2' /vA_Ԥ+?_ sT?h2B/Bпx@PapGQ<,ȿ014K3w=BW>=دjڿ9`3e&ſ1Ôh2EABi ;^}{g𿩑4迵þ/b#Bo-t>Һ=Rhp`Mk?#0h;҆ FIBq=4]>t5ȤS4u=W>{LT˿| BgɝX >R?DrH> vm>F?}λjN>;) q>fǾ Ql>m羌`BO3:0?L]?]2=-g.>.>WO-BMp3A??pt=1iY>> <>ĥ?=o/}B6,@8-@8kvfV?c? B>n?S>տ"B;$?ǖa@yG@X(tPLf>=3oh5Jn !:Ai`@@ @$2BNՋ . C+)A@e@q@ gE?QC5ϻѿ  :>@y@4V@ ?r@Fg_' ϋ6Sԝl@?r@t7?Z?hu,@J쿰!k}羡D,l aR@@^ >2>Tl7_&˿ԽТ= tzV>A?w@f=@2> J???W}?_:=B#NIu@%@T? \)޸?>Q|tsΦB @=u?|ӿ7=?O?Ѥ >Nh"|B&m(@XT>?(?)>g?']=wӿ\(Bn*s2@ ,?̿;?=?Iѿ~#V~? &? EP>klB  Q~? > |?gE?G6Ps?J BjP? 2@?d=>?UW?5M>B\?CV/ڿ:>?poSD=y#V?[]#B{V> p{6@? )锉Hq?3g7sAn#7 +Im&x'g?0?BMw˾* >ؾa?A`%#0?p8=݁\??T>Ű bsAS?>r>rT%_?GDI>>b>Iyp,쾒B*fP9q@a@mbԿ0>#+<Ӯ?M 4BjC@@@@Ac_竿f >N]t:,?C|0A/uRx(?%?m0Ҹp?'^"L?+} Ah?@ӿD1@VNf@Z{B>s>sӿB Ab@C{@stE2`NFF}>@.ҞO5B4AG@U$@n"$?ZFwvt]B+@ۇ&?̅i@=X^YSBp?u'f_R>6ͿETB6@?) G@sU_̢= eY9:>0(JB8@ */@c^LR/XcT]l?TÎBHrI?96K7BQ~@\a?~?嫿"&QgqEʾƹ}Bl[?`JՖCa.*3>%.$y|4Br?&DͿ%Ue,?:=ο`#50eΕ忎̴Brm?CE2z)?#"ۿ nkwYoBv?g iFRDy:.$n2QT`ǾYWBqq?ѿ2f55t( dxOFд2Br,?qݿi>L醿*2%X/  Br?6 D>I=/ /!!*=NruBq?P׮>#>%x[7ֿO#p$6%-|BqW?%9?*>)2Ġͥ=GBp=?T w?F=l׿ʣ[$lޒ 0l?Ѿj Bo7t?8.:?l>-ӿoS彿:2۾C(BnOfQ>J$"pcjP BoH?Lnذ?>*ڿ=nͩ Q7v_SBn? $&{?>>HP9]F. 'Bo(?Dܪ? >׿8Ͽ}'OL"9Bl3?}*J>>տptɠ,ItUna_Bn`?),FJ>ˤghͿNl ڷǿ/ZS #JCBmj?o0{N\y><[6<$ο[pE7O2BoI? O2|?wɾRۿT"\ĿP C|gM7~HT>C{>^`\WFq틾 iBsi>ߦ>_HzJBx>|*"_þ%WOBrX82; ;93xGS6T :NBr̾mk!&;,{%+пi6f$Btl0ҽz#AQҿW>ԩ:HaO*Bsqo!Ӂ?`F^? c<"딿ѿ;kBpٿF?zm+Tڃ?\5?@N|*+׿Bmo);?nI11?K8*vqGP542Bigs??1J=iqs?g3߿0~‡>S(Bb[{?#\.?e_tD?"e?埿@L<)޿C`?QsB_a?)kŒ{mr=:/?{:1LϦ2ѿNB[??*@&j#>? ޤl c ɧ\žQBU~?7\ f>,s>->ZPǿ:<y_mBS(@Z<Y=CͽL(י:N@BR?ɻQO P{>꽾h'F)~|%BK@O=2u>b~# Ͽ3˿8 驿tF`pBF@]@?Oz!t="Baԑۿ"P%%1B:@~::b@Y7,Bt槾ӳh'1ylB.@,@j9&[GTl L>> B,dX@?F7@)KJGIj I7| ^B @0?@l(A#F [M(FAxB@Y@hI@R _,v! o98CB h@T:@k@0G_U6DFɿSKP7/B F@@Jp@ӆ19d!l$NI;l}qy$B Z@?d@?l;xo5{An AuB@?G@iqUӿBkIS|93A9AH@X@/ @ UǾͿjH)uUyB! =byA+@6q @o@n뾈XK3D0A?Z@q@B*H#ᮿ.jum_#A Os_J@`!@!#Sž 1 %BuW4ՒI>MjAfi}@[@fz. }щ{(G~RQ>Z"A F?Q@>I.R,\Y*?I8Az.?$A@`s?譋?ھ"R$%Ϳ?u&@9/tA53I>@Va> >x=տfѿG۞?@,? AyH]-@ Hz?2M^E O?R@"A7D[?8@?fؿU>W0 >@f`A0~<@$@aX?X?R!_?(D?QӿLA=@dƘZ>@&AagN?@C m+ʿjZs@" HAOs_@+ dr̹]PM0?ΰ>.IAA#e?@=`?{ 衯],>v!ӻmլ?c)iA+wg@1m>2&x?́˿.Ͽ(?p?Ͼ8A> @H?-4[v ݗ?߽ۥf?@#dAfh`?@ >ɂ)PϿ_0zw>x?f]@>?(@jf>"䤿<,ӿ#п!~4q?ǿ2y@ 1!@ (T@> ="q?濎y#Ť?0jMn@"VCv@y$@?,?+uhԿ壾˿vͿ^(L?33@YFɿ@'ZV@&э?T #>[> =h>n@u}=Q@~xb@aL@0n?>A=>?k[]t= [5@g~@H?̅?K?.^>˾ /S?N~>>?*>@/NV@7??ˣ>B?rr?iEMOk?^>>󐾥fI?},@@c?d??UJr=>βX<>|$J?/C;@Fe@*V?׸?d@ o?]-W*O]>3S6O?]?p? ==?NW=[?q>^?|ꧽ!@%^UR@AɎ??mJ?p?3߲=Ѻ>A?hZ?T?@HBۣ@:q?(>b>>4?Y>5>?X?G@al󿫙?>z2I$ӌ܉?%s?4@@8&7?w:?M߉? ?>_[?= >KA?lƾ>d@8liVD@]y>_hH?r[s>hd?;^2?8图2?cm@?Z?HrԾ_= K>e?V?&9?m~>Am?ld{p?З? ,?޾>Я>>?"-?H>~N>h?e8?U/z?@?^P=Š >Ճ? Y?W??=j:}ýI?}*>??^}@??:P?9>0%;= sFst%)?Df@o&?(_=*,3r, >am?7¾PL?N>jpocketsphinx-5prealpha/test/data/tidigits/man.ah.1b.mfc0000664000175000017500000001431412504317076020251 000000000000002@xHr>/6>bBL> y澦>>=Μ?Y69@G?@Z0.>৿ݿ ?Ge?e?WJ>>>C@tJE$>:=YRW%!l %>nxW>?z>;=~5 @ n?>p 8Y̿K|>w>s?cMV>>O@ k?ǒD>}V->Ix:g>??!+>w!@D5?U %{=c6?<>=r?"@n\gUO>߿O=FO ?0>|?/@"wνyE+pR\3lk[>p?">~_yc?*@%?>Rl>KZZ=>BkE@wCԿS?Ao$`GXԪ>@>5G?8>ݾ&@D~[>{?a2)1nGrE>6?1ҽ>G8|>@,/704@A;? L"w=;ژ?Ë>j%O>?/?4@*8? Z$A>>+=U/3E?<%?:?SH\>q?ep.@`r]?WO3޾+>u.q>:Ն?kt?\>N>y@U|]?@Ծ%nK>x>?-#>>(=/@\=sn??C>A>;Gɶ?9>ƘD>*?}@h6"8"?#s?Ͽ=X>L3?QJ??ED>8@|%>/=>/$>=*C=n>:>0? N@iF&?$,m>ll>ͨ?ie>=b6s]=L5?g@`F>#&2>cA;>&=>_ 5$=.T?/@ c{[?X?7IVn>nYT?p>"f>H?5>k@9IX;a?2Ŕ?0JF>y}:Rm>Gm<ӾG?J@bi@E?i_?Fҿ{=>tJ?Y#>oi=͘WO @JV+\ @10?n ? ` 6?3>ҕA D<1|><@ܫV@?Գ@ _>Y???P۾>]]!{zEa@/@@Ae@.@?? ľZR8ռ{ݾOAxA@vc?[=:=RF.zw d`=>LAA#`@8e/iO{P {?J?>4V>ViAmA1@A˾J Կź'9"֑dArA%r@p?sU޿4ZP#/IeIU>yABvA7,c@/۬o龋Y?qh%>?˾iGB (A@ H@6,kJsٽp?G1?QDB=A%i=@vC=Ėq6i?cZ q>f~?^ݾ.hB/ Aj@˚ag˾7r:>?,ܹ?nǾi BbA}@A#9G0+$r?J?*EWf/|?Rw= B c)@@6dE?>W?AS?L&I&<>cg= BAW@yL6?z>Ԡ>w?bcOR?W@Z6B$AT@6?Rf??|KRWW>߿5BvAV@SV\)o?OB:??P-s>>7߿B$A`@2X2>wa??@?JYWP>)>%B%`]Ax@ Yhex?hC?z? 5sjZ?I (^B.ǹ@@ Zqh;@o>U? N6&?j9Y B-N:@?]3@!u@ qu?Ls? MG?`|l@B2\@а@.I?(>?þn~?L-w˞B9f4@?Ry ">͞C>?T?Zb"ēB8,3@F?ϷK>Lxr׾&D?jB8?8>yh-KB6e@̻?g XZ0k!-?Fj?\B86B;-@m?\$c!eĢ> ?W?_j̽8iZB2N@>+/?63Na'TW?,e? {?I0@`B3@4e2?f>?'"=M]u?f=Ϳ!SB/@fX?SPW8'>Ͷ>?G췿r(KB+@ G>%¾q>w%BB@>ɔc@jZ?WϿ2O=> ??׾ǿ8>)BP@ ?O@Y?*쿁MB'?>+e>$QxX>0B@"?E@w>(h>F>bdEM>B>@iވ?U@H4?$qxZ>=a/?!J>HϽǫ7v>YB@D@@F]K?"l?s?K̑># c==B K@@-?^@t?h\K'Qn?>o=_<>+B@x]?վ @l?ڐ*9/Խ?3xb>?!V=۴>2A@V?H@l?R90?\>:@{u[&Ar@n@7@KQ\?SF(?>hҖ9>oAp@FE@]U@/w? }X jM?n>#Կ?dy>bHA!Y@@^J@6d?%72;$?x>ye?d]8TAuA @@O?W ^ p!?h>`hAųA@@a=?^ɽQ?V\ʈ>&oA&A'@ʱ@H@ 2=l?T!_?A,޽B ASb@r@ҷ@9.@6?\B!?c?=@n5!AC@a@@߹@.O@>b>$8?(vK>=?A? @f@@5<7>>՚?O? ƿB[wA M= m@dIF@Fap@*?0??F?wn:@3X??B@?q?w?*R?ollM= >@Z?I@:aO@'VE>CԿŐ>>In>S@9b>?J?J?ce?h>,P꓾p62@1.n?6? ]x <Ͷ? >a]x>P\@nM!=*?4I>sF?}?ӂ>]?D?$/W@lr?*s?N>,疿\þPJ>L>A>H Y=*>A`@!%b>Y?Hnl{'3W|J=bVu@q1?1?b?)ؔ?\[?e>O"6@_ >b1=8# >_d?0'= >J>Xses@ҿ@M?KH$?08>@8>ݿ5>*㳾@% =?z>?_G,><,?qu0+оj>H?6@~nC?..~?`?ھoAxi?m{l?93Aӓ 4&#@ K>Q@ ˈQ3?8c?XyW? @۾>|t@⬿lt?J-俼>>M?% RkiǾFä?c_A Ҿ⿞6>ǹ?Tc>u? ?ǿ?xBW?lѾrkF>? sgn ?@ǿ@b\?G?? ¿*?p?ǿ7Ŧ"C(~?}@"?d>'?6ݿl?5?l_M>?*> @ʰf??@Կ?[>1?6#0?&R ">>?=N+@~MGN?8&R?1%?]mޣ"?U>F@hPH?U\g.jͿXQ?>>FbG%=P ?@#CsD? *=O~ǿ >?rP=>i84?>H]@!K?%(j>̘ =>?T?.ĻҌnO>> ?^z?ō˿[? A!R?y>T y))>cp@XC/?h>0>,RRV0? ?=9C?Y>>->7@7>?M-ۼ03yd>>ݾ8>=H>@E)??K/>7Oe?f?>s <6&=vډS@)?uNMAϿW>=-2 78:16>$Ƚ@3fj)?Ӯf\|H>ƃ=Կ ??r?vԽ"=@u]\ >fcؾ},Xd<>?A?UG>0?[@5IyE@:?{D?*SZad(>Ò>KQ> ȾS>OD@|F?O U>$m& DKROO>ѿx6}g@Oe?"8=i>3:?(??Z^=2/> ƾokl@4u>>S}%TB?;>tJ?W?$,?֠>;1>Ԩ>( c!ݼZ>>=`5O>@b8+ٽ ?T>> [@tb*?m?4y>"_?ǾVx˾Ts@UKk0?`E/_xaݥ[">:>6C?7@ : G?¯=u%p5=tԾ`*=~?m;>QT@v]$Av/>gR>e??!ȿ\t|:=>ܹ?_(_@}WP?,gő=N>rY?c\^Rx>@6KHq+?QIfXgOɁUH?7þ}.8l@:_b;>+?'qyz]A.Ž6<?=G;>"j@eb> >E>B> 4GPߖT?VE??0?@9>3@'(:4|?;=ƕĠ$>-4\?7'TO?y|3`ne>J-@idRu?Rz$Y5TA? .?=V @'M@3Qn ??vп?B,%=c>yQ??E9?t8?Q'(>(dN@| 4!?+>3?>=$>?Ԟ?l?> %?%>upocketsphinx-5prealpha/test/data/tidigits/man.ah.4625a.mfc0000664000175000017500000002542412504317076020514 00000000000000 @H?Ew?}\>R;?Xp?!@GPQ~?lUоYр? UP?S?Pb1?$C<D|@h ?Ѫ~8B>??8>×>X?XY@~h]?NͿ^׽!;$?Dm=*0?=}?M>C`>aC@X=Vp?>>Dx>?Zr>?/?+"~?K@V*?.m>#5>|?`8?BT^?{@G?}>>?y?:?EJ?~?*k?lǽ@Lc>ʨ?joe >? 1? @;?Zvx>`?*@/G f???h5$:$$???X9%%Խh@xU6?:sl:, {>>=.>ۿ΄?0S@bs?Uo>!пZZ>?[ž>e`?@3ؽ)?@p?jrt5.W>ʉᾜ8? =a#?~>9,;>>@9=S? 9>>eΝ?+ֳ>?VTz>8O@V ? O>ͱaB>羻fHyk?2>^=ee@%vh?=ꇷ.+qC='c>v7F?L'=<>@V̸>(>r*I?=>s>g?=_@vr9>?]ai>)=h;Ϫ?_+E?L>KJ@M?>տtB>O>yQ(?W~?->в=*@!v-bAނ_=?5H¶?V?C>h?W>&@V^X+=h?!OO}?}U>t[>5?wؽS?I@v ? l#n?>̈́s?U#?R?@UmSy;?`Y̿?=FX@Vߥ M? 4@e?F_@s?D+{e>&@72_8?z?/e;Þ>¡@LJ!L?lr?"?zJ?4qQ?L?Qѽ?pS@30ӾW>Dv?9u?8>Fj?U{??^>?' @G>XF?']?s[O?1?4}>*d?SŹ?x>xYHbA&oc?:G:"rE<>x~\5J=w0Ģ>Afw4I?F쐲 ӿ1N%j4>)}4> ɳ?0?nA3t|u>vֽ#$qOf>lQ>>_XᾷS<>>vA{пmnHEٿE޾ZHĎ28]ZAڤfM=;τ*`^X+;PR>A}Zk:t6?*?;#>;%ҾŐ>I&mX&%b>Y.6AG)Y6I?5{>//I=Jp>lAiƒGz5"4>F;o>F?p9=6?{Aá?q7Δba>m>O PUJ??Hͭ?iȿ~A@܏@6*1>?i??? i>s>ჿu BqA$@2A>>U?S>&9վ5x==yS5B,A?A9 @-?-{? yX=܂= >ю>чB9fv@?\As׿b?v?H濙=f<=Y=>C? XB:@?mXϱVDd=+?\>㿜>@>b+=5T?LB=&@?s{%v?C>ٝg]F>*>e>FB>@{,?Ʋ& ?{Qj?2mQ2?ހ>\>NBAه@?feSSA%?c?tf?i@>>BE;@?,JWh%?&/?q¨;?c>u<ƥBFL@?3NHcpO>go?ßҿ%?#x?ྂ BH~@ѶjYY *?Ӵۆϝ@?" BJ_,@śڿx1fS tῴJ?,噿;@?}BHq@; [ZtY?[)?>&?a@z?^ZBED@ܲ˿Ak7wg5?NUbg?ЎbE?ؽ?BEC@r?<iW?:k?i| z?@88' ??PtBD@ߛB<7s?}?+9S?+d>|B?? BWBE-@VN-o@|t?a ~>(?jտ,?nI%B1@@ٵb-2:@` ?]C>ç?VҾy#^3?ENܿ#YBw@O"%6@7#@(lB=t?ޅf=J位)?*Bw0@46@k*p߿??r6{G>5Bd@@'|Fµ?ˍ(?)>v>LqmYTBe(6@H' >۴->`P?]?#P˾'2v`B0^Dxc@x'}p9]>9u?+>9 P8>ԟBgN?H@q#a<῍?~X?3E;[JP??]B@hJ@l Obw?=þ?XCɿ>[@RͿض>T1S>s0O"?h.B7@@n=ʐ>@Ž?->:(^ U?0a|B h=@f@ ?![Ͽ~?n=Jy, r>?!W>5B~r[@E@=,3?׿3>)>{=?k?jBm@w?2:e\>T5>ýQPd?lW?ZAӐ@f@*׿ME?*d>T@pI?>(2>FL?rB/V@!>@ ?Ζ?+Ϳľ/ ?]o>ǥ >BJG??u ?qi>Lx꾌N@>6?c?7ABV'>>>?e?sƑ-%=@ҿRV?J?^BYܽ־Ϛ?eEY1> =@G&?(?41BY-:8)!?/cp`OUb3??--?y??FTBX䭿GeɿZ?glH?ƣm?6nl>a?SBVSZAx!@5ȿPJ8J@*#?w >D[>,BN9]`bKٸ@F *G@Pjܿߋ>/ Jn?>LB8? mU@R>{<-@epGF1==j6>%Bz^?>l@?\@s[^V*?կ? oAC@QM@ @?†D}#@^X׽d+? a=A9u/@T@k0A@m.a?虾C> ?q]~>ٖ<;JA1Rx@m??m? 7@T4>:?D?>+@ A5?Gk?ʿ Ϳ?78?#?Л?eu?>@CUv?8?sD>_a@?L~<1?: ?p?oATS@>7 ?P>_d,@j>؏?ң?HA:_??S ?Ӿ/w>!12>>AmAgn{[mXU?W>Mo96u&?c>F=w < >A>PBHD?>#m@}c@??ƿ?"?B 8R?l@4C?~I,#@R?쾥̛>?=q>@}BvL]@7t?֓!]kKnA}J]H@iTv@AG>><~?;a>>>a>U>eAynSH@@*?z">UM!?>uyxo,ۗ?g<\)KBA^?uC@l>>7?61?؛%NO>1d?VCA/C;k@ ?>1?C?u C`  A;}6U*@s>vĿH?eX?OCտ#Y?>W MN$Ao*M@l>+?e9@'l-=>2?c=+A恡F@׾reQ/? X=?k3Y2w4EYU/@+$>4> MJ?j{sA@ /?*İoUɿ?Kꚿ>%>00AI?@>oB(&?[cБeDR@?Ba?@ @pk?=((Lc=]vDL?) BFK=? @sB?È&>2A\=cBP 2*?@T濵<' d?@ ;>FɝZ>ӊ>^BK̿d?Z@Xm1r*?#d=f}|>uZ>#BHlw?ˊ@4ۍ!_?m%R0 >> DBD(A6?u@ʈſ?fW&Յ<õ住>N>B?VAd@@Z-2Dk?_:>@>?AB:?,=W?@*\5 ?j'>/>?FB5?`?\@eJRmOn ?^?.=8mǾ?HB/#@m5@ @ڇHkr>&b ?MѾDڿJ?QB$@.C@"P*@i^4>)dYB@}@fJ@b̾+ >Nrġ/!;l@lU>Gܿwx>+A \@@-@? >`03NC?8p?)S<>iA.@ @N@^@!Ne-M>"k4 :Aχ0?K@9ґ?&?E-?S?1G$| ʿ[夾GA^jg?yY?5#v>.[A?q m{vhK)5A˓׫`?m@9>=Փw?sT^?NC@`@^.bAҜǢv>: So lc}9?"ƻ%>ׯ?7HR#Ao^ 'b뿹mmU{)B;.ɗZs˿j>7>I?20A?tœAi d1>[=?z→RMK]Q1?D?'otu=Ar$Kک?E?ꇿR<%+;?{@>'?5A˿6(?ֿekBԗ?6_?QU>{Y0A???>`?fK?A@@T|VY-Bu@?@# ?)4t>Wl׾KW?x[ȾGBU8@N{D@=?a5>m޾;?}?A3aHBZ?@I/[?/ ?2=F??R3B](?sR1C?dcAj?s^>+4?ђ ?)*EBa?W$#H?"(?>>l ?#?"y [1BcK?cY770[?(?9=?Jk?G˾; Bb9*?ZYL<40@?(?p=?\6>6 Ba?9P8?rn?=a?M<g=,B`?G-WX/3G?Ӻf?ԏT?V)B`E?R [g.ݿ.?Gh͔ ?ֽ@?9.ܽuL>y_B_܈?U Z'.Հ?IK?,м?CP>(;B^9?Zfs!ʯ?zP)?xw?T:]>"=B^?fB^9?;'_K(mCw?[t̵R?>^??SP>t?B^dk?AG-og8?пؗ?>.?PmTb>ùB^4?(ϮqJͿ".?zտ^4?'>Ux?UcJȥ>B^)>babڿJ?=?38>?7P>&B[P?{oa;\Dq?%hC ?JG? 3?1ÿ$ {>iBYQ?)Kĩ-n>?ʧl?E>;*lPC>gBV?zI6 4->7y $[?1)?c<>'Af>qBT3M?l-@anDqG>!BPe~?uY.ѿLD@?u>Rp"0#n>~BO?8V=qZ? ?&> d5d>),BH@jY⼿*$Sa@4?uD>K_?0BDH@m2MZؿ׸\"(@?/? Y_F>ǩBC7A@xCoE}"???ZOz 0g>{B=@VͰ,/N?s??Vf&޿>mB7_@cИGIDPFE2?hg??z9Hœxb>B/f@ J¾b afG>.? ?6I?Ǽ+,9? B!o @d?^+R&>lk1C By?>?F? _SI?A\BC@P@ fD>>Ϳ@чCH?#R?L}?1 }>AC@@@@[>ֿ^rGuշ")?l.!]AxFnA 1@֕@L*>AOǿZ>?3?IʿAPa@ۗ@߈@j_? پ!GRG>5>>>pZPAP1@[ @~HC@H?a%>+,?*5ȻMs>}j={%A~>>@?8?>#z?N>(^9 +A?FAA=~=g>??߿=vc#?A] т>Yk>(R9z|=UA=)? A$E꿨#?r,-qJio-?~.=1 ??(F|X!Jy@<01?.AbdCxq>]?%Qǽ٬q?7>Ϫ̋|`AՄ]Z?7vA(&'>&A+px6?(X?m: ϶l?6<A>`Ao>It=f!==R$?D'=\=)wA!>C?IZ<9): <>CqJ2F?96Af(nboVFտ9Z#>:ŧ>(.=jAf< ?[>_gD.X?'f?%qRG7/>N=\Ge b?AAF>nW? +_s$B>l>L셼{A1ƸC9p@;J?Q?bq)bV=4乿0 g>_VAF@?3N^>*9<ؿZ`jש`]AR~? G>??ܬ>|n ΚAAN=n޿4"L+>b)0J!.տ=Rzj=p3AN8k¿..??V?8I,ѽҘ 3E,3>7AG?.3Vo?ް`~?{;l?-ÿOWG>ܽ7A?g?dx'?8>? = ?{P .AH?q=IT*]]>D?jz?tdOr>4> R=ftA;i ?3^=jV>*?ڿsпpѤt%fA=O?8о/>ә&4b?%Ŀqf}4K>A Y>'?&>>/?j;?J=zX?`ܷ&hA-&d>@fp>$>T?iH>hG;Nܷ?qp\EAT>>Pgɷ?sk=>D?y ^-`5p=Tp>HA T>0W>Z7l?LGV>=7ȾHgvE ? >fhA -_rk&9оP=A/@=趦:MUU>k|<>>A[`6>R?j>x>>|S67<Ѿ/=X"/@x ?H{ {rF [7־ԿsD8A(6%X?>5"dv?A,>SP@v@햺ؘ?fѾB%g㾥g?s?P=.yx}c >+2@:%?WXU>-e?bƹ?%>g?Vq>-@sGR?a?F!?*?bu 5N>S̿\m*?0@s ??}?k޾mP=+,4=ZE?%@?~??i=k=>?!!pO? @hgD>n>5sj?`![RO7k>R>?:e4{?$+@-zwM˿,kxAgZŽ5>g`ԽJ?&@:''>?.??=1!P+fwp?'?@>P;z@h?Zxu?'L ?{;?>>飬=@YhkT?k ua>/>d$mL u=.??1h?FD@Yؿ?s\/&=߫>cn> >; wyp?8?7>x(>d?>ނ@^P"?)d>h&~mS>ˋ[=?o?Yk>(>Npocketsphinx-5prealpha/test/data/tidigits/man.ah.zb.mfc0000664000175000017500000001573012504317076020365 00000000000000@L_ > =hsEL@>ꯘ?.#='\{>T{>H>QKV@1jfi?^iU>r_a?5>5?3F_?G~==&?bB@)FB?`D3S%ѿ!??V>s>K?T>—>Œ@SrTq=\?$?E>6ikՇb`?\ ? }?p>u;H@gUX=2!T97qc27?e9iF>y>N˄@C۪y>);7Ŀ=?Cž>{H?=Pb \=@N8!?\??? ݵ>@fш?;ֿGCKwP_<3G6>cX???1>@1ց>|Ou?UH=bU-X?և(/-4?w"@8i>RKe0JDS>[>&H??:_?0~'>u>c?V@JCiK?U;PN? ]R 8H?xe?Z>w?v~??~?Xmu)?=1z3@X;B?Ҥ?bJ!?d?$>=?̾bɡ?X쿾Zg@46e?Ҽ=> le?vhS?@+`s?" rY=nv8?W8>;S>ǿf%@HXc?Z ƿ$c2=s??S->$To@=]ہ@5Ϳ?? >>H?0>OnRK=G@R?f=OEb@?A֦-??,Y>KTDg?e7C?-`s㱿"f?$P 1?&>s@)KTP?2M[X >F?}5>?y)>=K>I`@4eq{?X`?4Ryt?0YXiw>S?v?>>z>zO@Z(6?S>=*3όB?(?^?>4Q4y?n.PzhA.?h?'?-?z?>>_z~@<-wR*?g<>~rNo=g 2??|?_[?`].?T;XX?x$@ *?,K>4I=9?e??>²>?@bZ5/@!?>YQ>5?ébl?"?e5V:;@v(?)i? ? ̿zeq-<"??I=ھ @9&Q@ Q>ˈľu_˿eH?W?6.>=}>U>aOA @axHp>m?";>90%?T?b > A?hJs<)4H?ڑeԾ翣A?Ȏ?~rƹ>R@+_$J? ɿ+' ӿ6%ݼH?x?B?9>°@I!6/?mwv>.#NB?r+>?bl?51<=L@$.j(Qh`꾹Q>ag?>?^*?m>u=@o36:?ٽ(e#/0rp >Mi?4>'?P%,@Č Ng>>Xϒ=B?gq?{??R#@jI|ӿΟ[r>*c?b@ 7${>)@ˑn_G?l;6?>hA??/` Nb= A-ZG{^*T>^S?y+ ?s4?K^z\>qAi,'Xkl?G >C]?9?>> }zN9N?@1.@C>8XSNF>>b>?/>N=B?4b@mo>F?͚I☾8>Ş" >_?#͕??4n!>{>?;?Lpۿyw>k>N?>T>)?m@ Ir?:ſҿLQ=ӏ ?E::X፾^g<[2@c+ ?M>Tc8žW)cB? ?n4]?n>I ZȾ@B9??Hܿ xb姙>ٴ>U&3?/>~#>A;v7?U_6/d ?m>R8( >8nA#k@(?ZϿh,>b$>Ը6< e>ֿ X?'wAG<@e?![?!>ESE?œ?QU%Px>z>'?XTA[~@h@z:?@(?J@=ĥ?R"13=>~>}oAnC >@ݹ?٦\??}=@`=?WA/~@K?@(>[.?6;?.=>>qu?}A K@?R@?`u?Vo>A('@9@ @@]?ᦠ>)vS>$:/?J{;&=cA@앥?)6@':?C??F-9>JQЂ>/ŒAN9@>n@s??G?wz#1?pdvc FATL]@?Y??@-0?䡿->ؾlͦ>$MAXC@̍@S???`?{4=\%D=AI@(+?MB?A?=śG$?D;?%.4B>܌)AlA1!o@?*?? +?>?W o2?q>>D~`A Aor@L;? 4=5Iqӵ>DkOVC>U`BgF@@KMg=h2-#>*rd??MIY>+>׉B&:>@?@u!K]@QP㿔f>r.?k)L>=B/G?~@D]@Iw%iKmɿgÿ]F-?I>EB6?ԓ\@ [@" 08*꡿cPHyza?$B6e? @!@ !b!5L4;/b̿`ԿB-?hG콍pB4@@8/D@d]@! =DevM?5;ZAB-@]@G}@Jj:>m־=ā >=mvB*IA@\K@i@]u|X/>Su?Ϳ*@T$?MB&L@v@ @\ Yl?>z)U>;t?MB$@1 ?@Oi "%o?P?ܿ+aԷ?{AOfB&@R1v@yu S?Yo?[ d=e?dtk~B'@ڋ.@_u ?F~?V>K?WRB"3A T"@E'?uF T?D'~?,6ur>=>ýyyB#A'^F@"?ӿG,>{@+]K>b?xQB%-A?g?;~Pu?6rL?>0?::1jB$\=A?-? @ȑ??Jd?#1'>SKB%pA $_?/?ؘ #7>o@8e?-}>I]B(EAKK61?2I?U=[>~?+d(>؄?@B.A LaZ>?: <+ԑ>V?oB>q?Y B3d\A5`pNӽu?2׾ >?jh$u>1?Vne9B6@aYY%B?#Z{Ճ)?5T?>+>}df?B9@1S)>;\o?9?P|>.>?:ۿB=Hn@&f?N0L?o?X"^>/6?Ww?T_B@@wu%r(,c?>T?R?T fo&B?&@ܜlh=ߏ*&j?m99??ɫÿ5BCH@A?E햿YvdD]\>a &?"?ɿۿBFQ @m4 =}*5>o5r@.?zѡ+BF@5A {tFщ񻱾EZTHN@&?;B?9@i߿濍-;O^@6 ?8B8E@TiG<~>mo)9S??nm`4B*@?0#|3?T8=̿YcE/$ ??Q#HYB@Z>رW?(>>˿*0(!+?A?0Q Bl@?F0)??*quy >H(?E<[HBA ?ݤpiK?>]VN޾9fG?ѻs,BkAk@ c\[O5?m> Ixo\i?J7ɟ$SAA&@/j{%.iڼ6?S*<=x?e;оY=&A,A 1O@QU_?$>D?&ҿ;?|zFHK=AKA1@%=w?ظf?)ã?H+z>=A͂A@|Ch?09@>+Ͻ#\x!sj=!]AVA0i@>Y?=u?CF@=?թ9]>·aAqt@Qs@a??n\n?h?F>_T>bm)y-(@>\&AASy@&@pN?ˈ?qk@42@ ,?$V>--AտUЂJvN/tA2@!@?L?y@Ub@k??h́^ҿ^ApH?@vH?@"XU@ ?>nb>Gw&r->AATQ?Ż@"?4H?N @q@w?p? Hk|ҿ9LtlA?f?ߢ>:Q?n?ҕ?-?(M5?4οsVD~>h:>hG [rөA P ?kѿ,ɻ>0sm>ۘ?Nx3#_5>A;ؾ!t?ӿ'鿖Y?a?=?|/[o׼U@q^?> )u ?y<ڿwj[~pTp>WN= H@ܷbc>2]ܿCL:>'4D>A5Ծ? ?=L?=6Hs=H<ŗ4ݿq=?1>F@r_PC>5s?x>3 ?͒?(>ÿ-}@ kL=@?Q?=?^>mo/H? Wj~uAn"=U@?A? ?ֿ/˩?,ھ=AC>ҾR6>@?4T\>1@#o ͽ qOA. >@?>>LEG?y$U>й&[A `D6EJ?=^<ҏt;쿝?OUd>ܡ+G|l@ڿ[R9>e?p?>@ U>ĊwD@}rU>?6/=f޽+SzM;?Q N((>n@뉿pPݯ?4?}>Y?J?V0Y齶{cf@ϿO? :z4@> ?؜?Rh?8Ҿ͜E>p@:?vA>H== Z挭>2?I*?AxK@|2Q??C0H?&W}ZA?. ?/>iP=rw@`PA?5n<AJd>P@^u?Ok?Jy>)Qa^q I@ǿ[@  >A$g{!>>Wn>! lS >!@ ,c@%|?ִ>%>Q>N%9.55#Q)?a@i"%D?ϖ??PhZþ_?.ߔ>t>k+Bݿ-}>5@…@>ǜ?>Nwm!>L>!N\* .R=.gr@;Ku>6PGl6켗?1>q>9M?f@X_.=F:7lοC*Еֿ#}>q >4~$?78@vo%?O<>mK:OlW>S0tǿw%H=:@*8@&G>7>r3 Ǿ>ߕ?j+Ⱦ 2 >"`@u铤@Q>2?&?%?P$^$>(_?YM >pocketsphinx-5prealpha/test/data/tidigits/man.ah.111a.mfc0000664000175000017500000002136412504317076020415 00000000000000@$?>>W? Daþj2¾?j>V>8*6B>>@i=?!7?8?G4?sj?$?Y6>N@;f>XDvKb>%<cGOҾݩ?,?>>ڰ?)x[@3LyVpDXDI@ >l2?*?iܮ;_>MDa?1>#|{bt꽟ɀ>>V6o=@ N3>^JU)ݿ\^ Ii>0?gN]@9Qj?!}ㄾ>Ib>zɂ(4?{?մ=i/@9sD ?}E>5kWt=UP>?p>:J?E'?.6@/HW?p=; ;IɿQ׿?/l?Q3??? v>찒@m:!?ujUYdrUU1>A@?:u?K>?-h@& z9?迏4ҿ $^R7{?>=i=A?$?%Jb@rj%>{?=8> g'?)>j> =;-i@7. c?">?!p^=þ /=vH?4>uI?5u?8@-'?C'} [ӿ0z䱾?oH>?Ѽ)>Yz>[@]?Ҿ=)Y=2M3!i$&ͻ7.?>G*=8J>R@-<)NR?ϼ*Iqb7`ҭC>A罤5?ZM@'?w?9>>c]0>J>8?#>C>;2?i>AX vYA:@%2+nv313P?sgx=1uB!>?A{U yIRo~NA=c=3Ѿo:?@ކ?DM?RAj9ľ)?5>BaE_:>֋?M?4?#@Տ8#E?z>̿.!G?Lp?%?d> >{@MmCi࿭ѧWII3>-w?*>`Rj=u|@.M?^F`Â?_?Q| ?h?}dt??@+0$J?v>M=dbǵa>0)o8{>*}>?Jk@-V?p>>E=-sk6>.?fX=I=Y>fAn/l5 a;?uIk='Q? *>!?"[?Z>LA6-N΢3xk?4ҿpJ %j>܈tAD=.>z-UX>Hq>:/>.=>"< ]@_n@a>Q:>Pzݽ\J>I?UU?6=ڿ8@-? ?d7?f~@ur? Av2O>=(?6?8AYR򗿷Ј }?A?#f: V@>,T@]w>9TA=??܉?1u%>Δ@*r>AAP\XwvOA!W@>$Y{. m? <?4!>mT@Pe࿩ [uCĽ>m?|3 ?'$j?7L@|>dSt2y>Ɇ>ؾ>>E>h~@b?]+$? |>>{>gU&¾G*]=Q@>gBWa?6LGimEuJ3)8~lP # @,<.?p$0SQ ̽n0]A=fuq(D@-:0?[>Q>ڠ˿?<_jE1g> ?9<i@o@q1}?56>̿6~=C>K= >Pb,>Hq>m@Cܿ3*?K=Ȣ"My;ZjP%3>?k ?@!@}= @??W- X׾<3>??45>z{@d?O}@ȋ@?S*5>? t Ծ?Pg.?2%R@c?@A?w{>H>?IΪ= >H h?<?I@6@G@!@2?g, >2ֿ > ??5_>\?RdA5@7@w@&п6?f> &h>ع=?d&>QyM?:O<:AX4A*äA8?"'CW"?!o?i= >lԽpA?vA&@5{wQ򾿢ާ?{=uM?ZJp*B0A@5G쿙~Կ> ? = ?迊,zBv@MA@ p--ŕS!>5l?TąO?0z+VB%:@ච@]>C?Zq?3Qwrh?ENOB0a@Mq@VF`{ ?>"?'Os>Ψ޿!=m?^+B/_@?Y:??s`ob_>3?e{B*ڢAEI>+L'4%4>׍N?_|?">?(ފ aB2:c@*?%-t>@Rx ?jl=T ,B5@?Q /g?E_i?U1M\?>b=9/CB7-@ @  1?KM8~??˿pϿ`B7!@'[Frs1Ǿ-ʯ6p%?+?߃yB-A@n bQqҌwxx>5?J9??ݿB!S@?7je>> ? 0s]x?񫾉4[\B@@(o@?=?(TU.?'}(SB.@#@?橿r=!D#>3&L򿶺?|bl5vUj-B~@@2f@ 쿵M+?39b*%B?{ӄmి=H=Bׯ@$N@?`?W,iC?-*H??%}=ؽBz@%0@Pm?*ӿ0S =?N#^*w>Qz&P>B@u@aH?n4sBɿn ?˒s scx\/,"s?lGB$>@w@N? w>t?30ǿq O?YaB@@e? c~$?R{5>qJJi0f?2BL@>@ԻߦmS?MR3A&?qe5k>rB'@{@.48! "?/j*Ԉ>? WF\< ,BV@ @Ðn?mS~=k׾==eB @"@D|'jHLQ}?kv$о{?-ܽ K/B~A>@Mpqw? w=Zm4?HcUj> uBA@A迼 l0?tU9>?[L&_Q(BUA@X.?>оo?A羅¾UB sA ؕ@`\7, OS?4tX=OE>۾Q>;ԜjB ҴA@c/КUW?>gU?Wb?BZnxBPA#@GtkB>)٦?h>r?ULV?9KX"BƫA V@׿IH >M}?>4?y?nƽUBzAY?i?{?>m>N?o7=&FB!5A?$(9@$?a>-O8h?hO>BAn~B&$@?G"x1@Rɿh?5%=q_ZB,|@҃)?}('?f&?=ށ?Ͽ-%?(>y(B*B@: ?WRZ?F'?tjA>Jo? b=Ǫ̤B,r@`>÷lZS?Ƴ4df.?+?p9%kB#A,`j%!?m俎o=>t>g?&,B#Έ@Kj[c,&?35^.?WJ g?ӿюB~@;o {IS>Tإ(?i> e>Ͽ ۿvʙB @M@5?i8>?Xp?DT>J\ ?澫G =B @V@I 8? xܿ*7??i1 ?'?bξU?|h? 4=t~%1?P[=ô>>M;r8B @@'.?蝉^b=)?qkLJJC? >SVB f@@4]? Q=&?8kA>c7l>!֓alB \@@'b?q½?m +a> xdd=>VΗB m@]@[f?m䳿==?/ڿtkyL\1>?AB@@'x.@=F@eFq"\>?Y=}=_~B9TA,M@0ͿE`#Ы@ Ou? !=?Q, B3A I@/2C`d7 ?ʿ=~<>}RX? fB A@2}Djv?ؾdϾFC>`8B `A @l 쿨>;<[GO> B<BA@1%c>_>:?2=Lv?sJBA@JF6ru>x P>h)>y=4;{BA׾@cCw>)Iܾ*=iH=|R=>MmgTBGAZ@+1U/<)7p>)O bB إAA@}Bw~G>e>i> >HPBU Ab9@dS.0׿}S~z='?ls:Z>o1.BA @8$@NP5>p?W >Iǿ BB!@7@f>;N<3>T^?=fc? i eJBe@L@X{آ=q?d?N?Oܿ>ZK>H%tJB @@87<|C?@?.?7?@7ֿ5?. "ϿcB$@[@QR ??N?9>-P?-B)@G@ ??I?LDH@?F>?:&TB/@ux?{>6VN?-m?B?(^?P> |B1L@)?{k?ٹB>F->JJ?w)l= ˽B3=@?an`Kn7?ܺ>}M%K?tB5@>RQ@{[]\g?e?",!ELB8b@LҾ6!ݿ4?Pt Ҏ4 W?>u0!B8_@~`Aa?5>OӾs?e>ܿͨ'B5@EǬ\xU?kkF6!?!ES?u? 1㿢WB+I@kuΦSN?*22.:141?a?#_Dh!7BCl@@>?ױBu#Q?B(=@2t\@'@ɉ>Eǯ?r]!F?E>ׁ4<1>0HB.@Iˍ@ wt@!>na('E?ʯ> >eBUBظ@+?M@HǨ<Nz]ھ?>>̨Bː@eu@#cZ@05m "5>WÝ?ׯ澞>[CBo@@9)@dᄑC>^?'I+@4>ebB @@#@ [z'?*N?t5Ssj?dkB @:@d@?F>W̿>ފK?5۾Yf_>G$Be@@R@%w>_ygG?M? ]Qz8₽$5AD@@4@FC?F]Wٛ>ד?l8>R}>AC@ɡ@lhw@F?(? =4>;>e=M>c;<,@A@A=@T@^?FzȰY>=e==V>=>K>A1@̖@W@@Hk7_p] ?-͹XѾ>~Ai[@@w>@4@X?:頿^¿'?&F!Ha6>Ab@Ss @Y @{@A~F?'cd>kЎ?o~v¿c,?RAD_?_@Qf@p4@/f>k?v?(>?Q_,E^5FJA#L5?a.@0 @R?.,?,s?1a?L[*ؾ#>CkA ?tͱ?R?Z??vD.@ ;vQ'X=X@A 8*? (?@?>?f>'^-? Qa!8 aܞ@! ߩ=?#?0???(/R?+k+пՈJtv4@ ?g@?>~wXVb6wýVi6+;5r?DM{z?^@!d(? $>񓍻nn+>/[=?3?Sk-3wYB>,@wJb*?=ט?>(м ?)οdC׽rn@Gſ̾?P?/۾JdD kz>"q1pqҚ6@ʿBǫH?Ĉ?73yI>/of>xg=S0@F!:?;s?;?Ij??i<`?i4A=Bn$nAoa==??c?{i?&9u# Y=|? @Kw "> ?;?QF?s/=?8̾-9>F@ٿ$T?P ʾ ?, :U?7㿖c?;uQxa@窿dr?#{-Qm?r>ss`>?xĂ>@`?O7? $>2m?Kf?>;x6>ד@hZZ8~r?dW=?e?3BQ5M˲?@é9?.OZ7:ٛ>s:mPd;C׾ء@ =LY< Q?x? ޿)GN?uԿ$oܿC>m@:Pt-?Ŕ=ak?ClA?>7<x1?WY@䈎VQ,?=R׽rY;~XI D5>]h=r1<|?GA3y?;H>`kϿL>v1<2־\n5+,@?>oоH=C"V>싲=>RKsPzت@m]?_^?Ц>K$ir+H=-Ҿln>jv*G@8\gof}ugm"x'T? .>z <8eגBd辻?@Ɏ?ƾ׾?r/轌`KԾK@>-(?UkM?8=\?-?(^2^>@=V???K>)'޿ L>MN>Fɘ>hd.>% >5-pocketsphinx-5prealpha/test/data/tidigits/man.ah.75913a.mfc0000664000175000017500000003512012504317076020576 00000000000000@OQ?{?>&>>%>h?@KP6>?*??,>gm?!?q5?>E =KZ@_@p+?=P?਽Ƚ?@1??i>m`>Z@Ohd>_v,y/ 01 I޸=?M?SiO>'->HO@3gʜ?HtLfп= T?7?.Fx?f/A@gF?>>^R?C >8;E:>B>?;>>`@/:A?D1DjD>3Gп+?>'6r? Z> #?##h@tjM6[?1?,pMunP|>^q?DA?2#>1|@.;|?J0K@-zJ>l>*=?}?>4>O@1$R?9>C7I=9[=H?Wh?Yh,?>b@rv+?l<>P?_|>>Ԡ>w?OIy?5>$I@0JkY?b,\ξ==M^ re==9?G>{=]za?o/O4@%^=k; ڀYgx=>wG?^ ?L N@UE }@8z?)7) =>֚?y=/=m?YR+>$W3@5Kzn?پL>QݑUj? M=<\>8wq>^@$?A?>BM\|:>,>->n>?T@A,j?G=Je|?g>]*4!J?!?? a?F+t@N5?3p4_=Mw=+ 0?dξ൯#>NH=h?x?ozNs>ɠ>(?$eRl?L F>@D=?U 8<< >>x?#y-.>} V@y@"#ܾ|ۿ{ =>0#$n=̀w>EG@^%D=]-`rN>In*v@ a=0?65@ >$>{(k;󾾛x?ee&v@-UHzᖾ)-پ/Kz˿>X>>2>=@4;"N?4q=?i*S?J>%?>@XK|>?t?=W񄾕oNr:?;7Q?>3>s =`NmAq(U&C@3Jc?rl?)@ mܿO(Ǽ*A]H9梿#@.R`1J?r=>?ÿȏʿ>윾۞5AHdsa?@x> Y?>ھȱ<=riYAUr%%T?_>/>:=F>$Hɿ!v>V?AuNq? g>ʾ>kQzzb>=>KCARBW Y?s#>h?锿x2`%1Ⱦ;靿ܟ=A*??r8= >i =c,?8V>}=~=>,@JR[?+Vfd2!h=@v?,g:??SIӄM@F?f^7?ჾckbヘ>#Ӻr?M=+h>?e+@\L?Iο4Y|=>wb??9>>A X@] >Da4%> n9;>M?^I=T0G@P] K@G慨:W|^?`>¡?S@ǜT@p޿+3 8A?;>j?SE@R}L?X?۝K &?J>nX?N >y=:Dѹ@IU*?>st(?#^=>'?A?C?n?ҫž2սԁF@[=\N?W?a1@(/?6>SeL[X=U>?@ =>J?@ÁGb =r/Y??j ?9y?z>Seotӿ,d=>ΐq@+A><>GCy/n=gG>M2Ծ>T=].AW?br'x>և*>q>G/)?'?1NAFc~~}?ϿїW&y? 6?YۿA\>^I>:?HAx(e@!68Aڿxt?bF>8>>u>br?A"4@QA-O忎'? ?A?ra>.?)3AIA)@1!&r29 +?ǐT?#?_?3?uSAc@g鿶? Tw@H?ع n>n?xA{Xօ@\@~ƿ=7?$}>d~g ARni@,I3O>쿿Cgz>yb? 8? -A.?dA>hT?8!>AHZ/@| I?ڿ]?Z?ً>jռ>½?A@%@D?7r>ʨO>R?2??x9"I>(6AŋW1@>K??`>f>ͫޑy?D >A֋rJv@i!>i?>*?N?c?g?AB=WA­X@@G?D'@#?",>i?;ؿCO>y> >QAm ar@d=Ď?}??p?$p?~?Uϼ'f?>Azz@>H@Y?*?%?b?宲?+?>ߏ?jTAvr@BF?V#>-F=aQ?A?FF>?8?hqeAx>zh@|HϿ4e. k>Fd?=>p0@#AJ@@꿗ۀ?7?˾j?j\?vA>Y}Q?x{Ab@x?[!^H?>þ?f >k AIXh@^oSE@-;ƿo>t>6>ο~6?&=(TA@osA@~%@9V>2>)?[)?*yAsr/"@<@&Oս(>;?׿.J=U&?^{7A)9[@=o?}!ߺD?x9:1>u ט>IA'@cQ忍x\?gOЁ=^>t C3HƓg??AP? #+?BɸG ?"?Z/?bAkl?~@@Qxɦ<>d[M?y@\µ-?uaB@k}>ѽ'?H O?to&>6?J Y?" VBH@ V Hp=/㾦JS?#9?{?gBZ6>nttA? XDy>'?X?x{?n+B_G>A} =|-hRO?&^?5?>\?jcBb8<;z1/>?U3?D?$G ?xWBd$Y>-wf9/Sh?\#w?h?w+{R{?xBbƾ>Ӊ.o$&G?|??}Q?30B` ?^Hܽg=ߡl_?=??DM|w? B\?Kf.jPB?S?s?v$,>eBYO@)bU:/,峑?8?N¬?`Ŀ>BPu5@wL;C:!#|6> `5>ܿ.?BD-@b(BO2AY&vЬ񣿵PCe.C?? ؿ*rB'N@+1?8P?ο s+W?h?QvY B9@x?[?JQ?pj ڿyX?3 ?*MaBy@y$-;?P?w(ʫ?E? l3B!T@ϔw#>/OMt;ZӪ .??Q~TbZB2@A(5P?.Eto8y޿Hй? ?(^^Nk!GB8l@:w?[;Y1 (HcA*v:>x> ?9ӾXB< @/!I?MlNwfه>m?%2>;dUڜB;@u0?=P_Bt>6ȎнV ?7ʝҿY<".B-k@rQ?=.?q=sۿ£ezk?gEiT,yK?B%o$@b?G@?\:#[!i?{tؿQg??B"U@A?@@'-?*^=ſ?#yzտsT?QB <@O?4@*_?6tLqӑ?+YA%!?"B,@hΘ%?N\^@?9"~B*@;˿#@3z8@ 3 Rt>m[ux>Jy*?;&Bտ@w@@穨ʓ+ ->?%&d?BCA࿜?F@3饧[ =g?.78h\O?\A}A>/?j?2Q?>WY1+?@Am@]@k@CR?m.ž6D?St(>G>$(5?4{Ag@'@@ab? I?&H-`?WFC>#euY?MEA̝i(@;@i?-?>86? P/ܚ =A>#Ir?_ٝ@_!?89?,1V׾BW?>C:vt=%A:?ev@9?~< ?Pt>?(>? c>-5>Jo>pAA7ڱ> ?>86ݾg?üs>ǽߦڿ:u>:A1r?<@,bL@i>8>u?nS>gM?[ֿ1=GrAU]ԩ?׻@$>>L4 =I >dI>={>B>qLAjlz?c?r?<ϊ ?%9 >ABrc<ȼCCFA\9I+>J?@>kտE?$??(?:L=NYAPhCtu=G;?@4?\=?&V??4?r{?(9޾ müx@^V:|?>C>:J|u?g>A#Q>1Bv@Lqx?)NT?c0•>F <դ>X[>xBHa5@$YW98ؿdv>?Va?]DۻBOþ@rdi&jԿEP=dGL ?J?H>9.+/BR_@x ؿƾ⾯o?2?>嬿&Q]BVJv@F~ PTJйs_?/v?tQ?csξBWS@JM龩?X%>?.ƍ>"ھP#BY@=xZ)鿚F6s;;>?Zm>h"aB\@ zi!{ ( ư="B?)8>·^>PX컦lB\+@/ 묿yFf>3W>o?>?=(!Fȼ0B\@:t׾i#U8? >>y1Fg,c5B]w @W,D<ҿiő*d?,z>f>j4#h4B^?䚺s[u˹C,??%?=ʀ 긇B],@ a_ò*9b}~ w?He?93Q=. Fu==P?>B]e?BT>de?J?B=_;iB] ?fwHd?C_?e\=k& B[ @r/㿷(s,߿?wV?YIG>эCgԽBY ?u|1ڴdz?H? w>o">%>͂BV;@S q֬ S>`j=ῬPiBN.@H*5w>!Kh{q >0?>z>YBGF@sUܿ?`྆ H3?>r?/. B/Д@3Ӿas?A{/c0??lHZ?E gPl|tB @ҼO?dX?iONA@???@йE#⧿NQrp>벾@>l8AO@p@G@WF@ ƿEk>/>mBcg >r2Aw@@)@e?]vsf҆.n?(>]XZ> KA9C@`?ݭ?s^?Lzn#Mþn?IB@ @I? * ,@LJpՄx*Y+SG?7Bv@5@9A@NI'~m?ҷڞlN " y?DB9@{ۄ@5F@e(>#h?[>=%ezp?iBK@s?C@vm=]W^? "Gܟ=޿ƭ?Y{ZB^@PH?@a}?Tο>ݛ/_ݢ>$?J4k?MBl@K? @Ik?H1>L4yY>B@0E@@H?iпo >%d[S?f a4=\B m@@?ʼn@J%? iRǿϣ?IYo4>7B3@~g>ow>,?6Ҿ5_xKBF@g|?N*J?ɋeIB|>"-?>׾@WzT#BHi@`3Uuc߿}>=&?>񾆢_BHf@f7Y>HϿ{?2=?i> H zϿNBI@_;?gտp|>y˿<?FPt?==\ĿZ9BH!@np6k0B>ѾF?.|0+=ܲ겿| BGd@뺿xJ>ӿ6%v|e@@ j 2.VBK͹@"ѯ?Od= ~}G~@k1d))BIT@Cxe,?6#Jx(>1w?T#QHBEq/BG@[ak:?bf*$ϥɼ@efK~,O~ABFu@` an?·>,_mQ>?Ͼ 0=BFt@GGNnX?~HG Gy O??1!d.#tBFi@>3?<^2H?V?۾m$ۿHA4BC@]-7_?G,Ja;?u|?k(UOؿA9u>B?n@G@#x xl?bʂ?`dgM2Ͽ?"PB2@6L?B?YWl-)>⑾̳w>skG>RcB#Q@y>,au@?W=XzI>3ꅿeF>6B @sd.?d@$?JMط>Ǡ$[? 9i>uBr@uΎ?u5@X?z ?: 2?2b{teR>fVB@?e@C?%M?:HP}?'k>cB@?µ ?Ӻ&?)ҿ?9|\>bF pAm>rB/@?Z??f?"? @ $ϽY]#ۿ@>BS@O?Av>O:#?WN:꾴z5>}fBv@?1\>8?>ڿ#œ>yϿw>RB@!?mTF]?!J(>G"Tb7>]B(@M?o6.?P^Δ9>)>_)B@@_cܶ?ZAٿX5=;>vx>tr,>q!:F7?ړ<'==ڤ߽>Bw@ @!(aE\? ko߾>F:+ rxBA @ J0+=?u S>T7th#BAg?Ɩ#[0?2S8>zoo½6eXB iA @ `\Of7ʿ;?K>z[>h|=,.'3g֛B l*Aَ?Ǵ2Hf} +{T?e>C2dH>^H7cB#MfA?QDe,y ?2#0>߻^vB'APNfxR?<<4>{^k"1.>렺!B,yAzFX+ȾWtJ>18-rJKn?&⊾\TB.9@пk Jy>.SF=9k?} =LB6R@Veb2fOV>^jn}5FO>e?Kg:qҾ7>?裿 ޣB;E@ڊ #U>#O`[v<?>ƚC?ֻ B7 @zl3?=6]i8f˲>篽_?&P+12B-g@ NJ9>=)6L yt=?9rȿW3%dB@>?u?\>M;>Ncd=ĩP fJB!k@AE?e@/k?>/\3eN> y(B ;x@6{1?@Be?]ϿwVCܿn?>[00ξuAB@p2>@??J%,Hj?UžX'$|B@L)?@m$?^?fUˉ/ӿܐ?eٕO[ľlB}@g$0?@x?Bg%fʞy?gۿXNIJ>B @z@@ww?Qe$v;$? Y?'B ҂@n@4q@Ai?;;?%PG H&m?JȿE=?BA@i@NuL@;[? rf?}b"M?,>ޑ?A@&@b8x@LY?y $f? >*\Ϳ ?AD@vG@@z>6JT?M뽾x?v?}A'g@e@qq@BV @ e =u?Pg㿅kܽpDQ geP=}.@E?RKS@S?b}?a?=m=mv=,= ) QP|eg@'Ӻ@Lq@>$^٥?M_>"1bi7_"F@bT@\d2? ?M? nm>9>. ?<ʏ??=pyG B>(@dI@E>??l>%>3wBG&>/?d>83ɿ~>B Zeok zZ^,ްI򉾠ӾxA&F>N3ʿj<쟋kM۰>UBP>R-ꌿ׿ѨoI?>wڿwKo?A^n?mr?D%m ?&u=Ñ?.+F4?n2AT@ӽ?b>)? {}??侣p>? bA&?cy@_@@ ?ƫo>m?k5?z |%F?]&Bޱ@%>?=Ǣd=A -+?#'=ھ8?B(t@6S:@뽀[:La> ?:¼r=%HB0b@}@g@I( = B>?;,=y􎾊DEB*2A X@nj>;"Sq>?z_pCZ[>fV\B+sAz!4x@y?;J6n]t>x~?L06W&=R>.B.A8@we?ȿ_>? m>F>uiSB2Aт@r.Z?HKO6u?6z>f)?!+dB3JA@pT?3;.'?==]TEk?37.B5UAP@8?TJ TqR?8!\"B?$ϾB5@ISr@?B5cG>t9?M.t8c?j~F.B5O@pQ3@>VY`'f>?Z>"I?aDB8j@fi@Pӱ`/O?jOZ>/J1f=?ibB;@[@펿%rb}?Aƛ?MX>3?aV=&B=@OiWI@SEQc?0i:YPx4=t?X[B8W@lٿ~@壿tU?¿g4) E??-cB5@6:5@ub~?оl?Y?oN|B>!?nW`̔@+@db^y?n~Oj>o?wfѤB5@ ѿaU@!ۿ}s* ?E0\'?>>.ЏB.Y?tl>@ IO`>ɴKwp?:>71F-B.>!>r@'9A\=?o!zt? `+B,1?M >@ɺJB ᾭ?a6j S>OwWB(8?p0?@noO=m?{W?m<\>@OB4= ?@vMizy};?;.?('?1MKB&?|?ɴ@DV~%\6S?v>A}l?l>=]B@P?b@ ') y9?O^<y-?'AtY@6e@@4K΅)K?ʿsrm$?P A{Ai@ F@3PXa? e>>oBAN@B@|?93 1v}.g?*7㑰#fA@@F@?:y>Lfſ >%=xTAS:@N@=@0?3 ؖ?T0:Eg ]?G Ixe,=sAi¯@$ s@6@ˇ?yɍ@ͅ??ѿ5D:9S>ADK?@u@ ?R?7Ag?A忠0?9n?~fMJ>kZA?U@?2@W\@'BM?'Y?d[>P? ߾ ʾu?aP5AUM@?Ð@?=;2?tF}>3?DWyf=ݮ?A>z??}@i? G>eH:?id,D?Zs?f> _0> QA?>?J@ ??3S3?=k/?>_ʿr2>ʸA0GI?wT?O@=5\?DE5>zпwWQ?!%Hѿ֤>C*A>1>@?s1p|G33%ǿ I><Aj?P>∊ u#Z̾+`rp=վA" %? >g_濨)6>+"F{޿ yB@? L>Ŀk4w=e#we\> NcAtv@c?9T?_la>ϾR gӾ^@ξ?Lb?9ߦkm>IB# {@־p.A?򏯾~(efȽDF$ÿtGU=`AmX?c=,)]H@F+\qD>=a4O>%>@@O?=]1a)6< >;vS%񤾍=@>P^@5l?7?MfVվǾq翮qabr/y?I@ ?>?a;7\>L?+vBž<ᄄ\@ښ)l??CּپhSc88@Ѿok??T>;P9v>TfD9*9>@?V_lqx=M> Ծ8(/!>MN(>%vY? i@{ @ ?ۿ?|!/￈\ʿ"y ?Wƿ]?>꼻@U=?Q?;3?ʂ#>,Ӿ|?':M>a>l&@ؿ@%tH?q?4c>p>wn>,p>? >S0>3>%&@NQ?ǂ=>f>c=?.\>]? >=@7?颁?3?3?r>۾??O?>0'Ka@p\?_0#G>?4M'7b>,q?w? j>ّ>GӼi#@l>?>3GװT?",??_N>A?X=?5@^pm???&9=X >|>yb=!(?ؿWC(@΃@v?0>P>KӾa`>]?i庼O>In^@52T=):Y3wS>KlB?0m?'?Hk?c>n1pocketsphinx-5prealpha/test/data/tidigits/woman.ak.276317oa.mfc0000664000175000017500000005313012504317076021410 00000000000000?Cs??? =ʯ>>Q>?0?P?a @hڼj@yb?K?Q=uk)-y?tJ>m\?=y@7Ik#T@6 ?>l>r׷?oy T>O>="֒@]3X?h;?v? : &??뽄Xy>e@>:Z|`@X@-?knjc2X="F>$PrM%?OH:v@Bj??ɿ%1W3x`=پڅA=Zؾ> RZ@?nK>n^>Y?û>6> ?I ??yoH?MYlÏ?ZWm?Aw?K?a?SN?[?O??Q>DWYl?X?ٽF?Qh^>Xj媾R"=e=>lI>ڶ>?xHHz(?bi>Y0?q5?^R$K1KC> =a B? w=k̐!=/۷pv'뿾x=5t>󽨧 n>x^?+W>9C?=&[?Bb?)E?=jR>*?>'T=>t>( ?=v|>%>xڞ >Tl 1>u®>Ox#=[Ëb H?z,?im?V>>Hx?fL;?`r{c¹?#:>M }?!>x6*Ox>MԵ2!+-?8>>>sO>#>oؼ,۵ݜ9?)o?? h>{?P>-"tw?G?߽[?x?Ni>$=c?E\> Jsx>R??V?j=sf_q2?H>)U>5av?ݿebF>??Vϟ?l i>_)?g?IȽ;`4?+6<,> TD>>ƫս?+h<?K-??>Z?~?}M2?7>^>>1u>VN>zo>??> 3:>~qx?F8+{?ュ0e]g>?:V?>Yf>GH?8Ȅ?ZIc(??Lm>X_>Ҿ?X3?*?x>iƿ8/AʐF?La'"??_? p?W>>l6>'=B#L0?8`Z?a0>;?mz?*nN>g ξV[BY?]ʿCS~J?R3?Yד?xBD(Z@uN0>Sm>#IX??[Ta>TzBc?(@ڿ(}T'?ih>?&;@ 39B$]7Q@ ` >D>N@R=4g? dnSB),b+@ݿ>㒥>f6?~|>T>2E@B$G6 @Z# k(#=̢=dt?jmĿG=?fB+bM@7?w;&ɿPC $*^B;I=Ta,@2>RQpպDxS|$|Aq(,BDɿe܉@?g5㙿r7F0>ۿ65>MrBJ Rk@p/z?N-~_JX? /t5R8 E_BPn>j@a?&*mpo!br}L;:_Ɨ1:BV|'@:?HĿ e*wy)sfg?h ?@gnn̒,=Zhp+( ?'6@d+(P?Ulx龚C@K觿xBLÿDR?O)f@ ʚL9=x"9 #[b_ڿoBP>H=/U@ }@>aa>?&|d8oWeDBOju8n@0!@ %, ?|{ 5Rʲ㧿sg:BEُ"@M?ZcHu:;5Yɿ!dx;s/ PB?J?)@?hY5?G_Ex替C'ȬgB1%| _@༈? K/K>_,L?ڿY%hM]B!@p~? ʓ:MЮ]',f!-"?ᵁB0A@?b/o]5,h*珿.Կ6B s@t|>NO?~Em\r)O}U?>B$h[@&>c/}2?(?>>c?X9? B_ ?0ÿr`/?:jῶr>> 4bcB(?dlw?x BS ?nXUn>A˿קAxu[>QݭV=mT?+R^?I0e>pԵAw 1p?9ɿ͗~v/}??d,?&ng>rAHv?ʒ@/>O=!zP6gs>3.ÿ? )A?0/>@<3A)ݿmD=ӿn=^1/}B`T?*! >D۾ ힾX[?I">Bxu?UW!]?" ??e}?N灿72$>Fv>JAדּ0I;)?o: _?ܿW|ti=Z;B _U?ܢ?"8>>Ii>E?>D?=Bl/?,M`>țT/N(s>n; a?3V?:[NBt@rP,Pƿ]r,翃1?q +?/پ>B%U_Ҋ@ɿ2 ʾ'5+ '>څ.?vBU$?[鿑[6_j0߾2 U>.5Bij7!-\5;Qqѿ<8@BELʡRBpo&`B(ILa=B.%ٿ<O흿,s.rqBxA iۥ.|9C>\c(gI9 OBTz'JMx!>dmU 9Uc)};){׀BBns K9HX=?V(>)¿R Bo "M(#?*w-~1WοfzBJiDYEb3?{/> ]j3s e;>Pn?Bsm N&3>⾾A 1sMrDBsDOIB9Q O#i?uB(,:/5>4$tB:^͏W^C
̖6势߫7= ɿ?f0 BnVGCuOIF>CNȿ,1J.6$v B*EfH߁Qҿd|? m+GPؾ BzJȪ9je=% ӝ=1I퓾P!-BeᄒE/HX<*(SbZ;Ȥ2o.fUBB@?L6IiwO>M[ܿf6B1J@??@oHR~| .*Uwn;>;B*@9R[A?oԸ5|b ̪¿`!;׶B*z@>?|@t0&=׿$o@ B2*@ U0S󡿊4'L'~yrBb@t)J"E ?#a|ƿ46>󃥿15BbG0dXg=%yz '?:]'ߒ(ٿ7տ@KB] c "$[SH/?!E&2.Bkt+)r BTݾ80h< =oM*B?tKΔ>Agz&BH?w>?ԛM4< >kMMC"4쓿B9!@>Jq@[BI sCOH_;b>ie-.B2@{m?,)@!wj$M Kycf "B.@%?q @4\\A &=] nqB.@?@uw袿T#u/>m#>5B-!_@*?v2@Vp`忖'9v>ko(>^~MlB*~@?p@i޿x>w==?AX:->(B%U@^?f@7_FܒD=^?J/|?>\bB@?ك@8J^X.iTI?G7ڱSBHA*@e@QM\Nc%}/?SO.D,]$d!B@@@G~ࡿR+Lh.B W=*S@k@)5?E` |8ܧ)+ xVIB>6@k3? ?-Ab~>3pQF&%;}B}ۿ>^yH<㥾?aп>Mi?2r!Bn=63=\ɾ&L? 翪JO?@,?MB 3[?"o$?Q)B؝N>^?Z"?=>?WKu_?B@>(+aR>{Igs?B K uӰ.޾@f[? z̿?𚾏/BOaܻ|J?WR)?q>d??LH=lt=>@uB Aէ т?%.H-G#&=Ϳ![x&>MB2? ۿ?9+j>TdȜm?[ ɽy&>+s?n.XB@jԿ׾??qbSlqB>O O=~B/j׿T C?B?f=7[?'b?>ɵ?B [&?vr ߼X?I>, ?aῤ-WϾ>/`B X 9J@y;>9>M^>ƿ>>Bw@0>74?\n7?oLqG>nE?dB->’@w? J&>޿E>@g;*D-?gHkB;`@6C?=ڈl.a9뿈 y(ƿtBI?if PGWh B!6 :3.kEsQBU>>km=Y),guQk !>-\$*ooB_*> R?wŶa߿ɲRj?QpAq+Bf/DiX<>)ɲs"BH ?/ȿBkE[>0=8. 9#?G[w[b=14Boe ?F1?b2Xw?!u->`BpD%޿A>ϻ&_A{龂鿎ۇ`W,6Bqu~西Ġ>EO4 =! Io־+BpW",M>b ?>>*ރU ѿ)<zBBp.w+Ų>c)[G?),_쿧t6[hBj|%?PP=?[w>FphFuLBaT"leK<>7)|S?J>ZͿc!>BVaп'?FNg M?:>B(Y½;J4:BET!?e@20?7E? L>D"qWB3H>>mG@2|`_?Kp*>8>쿆? PX[2XBg?=@: O#+?nd?w;q?Kab1%AqU@6@$hI?b[ ??Z?&=>łA~?v@;>?u?R#f󣿽x KR?z0>⥽@{  @;} c'ܾ?m]>63@ 5g@3>l8o-N^gj?Z?bn=>սMx@0LSKTs|8nc&>? ?>?d2?+\ۀ@?!s>>d>{>`2?us?l˻yr?si>ٽm?"o{>(9B`?0??[5?@_?4>~?;?%]\SB1N޸+?iABm,>:=Twʚ~?O½(.:*B4??-1oN>?D#?6a!>56>VB-d@]?rw>?e?y?(\?3?Z?HN8B#@?8_Q]$>j?x?I"T.?$?G[B$@!>"(?v?>ˆc#?FGu?oK?wS?p 「LyGBs.33??"^?s.9?m?$>>f?>,ٓ8 ?A>vuLQ%?SX?XB?S6@? uf~? 5iJc7!e? ž3]B @P B?.=0?Fɡ$a>8?ྂ1EEB @Ea>0?F鿹x ?]<͕/?.?#<z&=B-@?h=V ?ʭkc?߽B  x@8ZMp?z~V?^Խ>ږ>>İj==ǔB k @`9j@,Q?*RS??OG=>?>F:>AʚBI@WO3?E?\0+>W?}U??Kv>JZ>A-@?q8^?+Lp>@R=6>'H>[MUGA`? '3?gg7?F!>y>ԾH>sRAW?y_n?这8?nn>•龥)?jJYA Y,ᢾ0i{/@o=)=h??>~wW5?t>Y=B(APp*5?{ ?;d>U>r>?˼xO-AҜ{"(k翟?@ܞKIj?_37j:c>GɥA 1>J.?-e> ehw?F6veJm=%>bp-;dA7z@s? ??U>@>e?p?? >3A>aPmE@u`S>=?DLm>?t;?㙽&R=<0@JnZ??pھIAM??Θ?l>-!?Upk? ?q3? ? ?y?RB>??L0S>H?>=pffvyS?؛Ϋ:=>!?NY\?M=? `?T/c>>&??'}?>Ո5h=ܼX?oMAwѵsM?5퉿?2=W>L &?+u3?TB:_f%oS!>V>QT DQ?2Ѿ̰BJR!?cJ#Yϵ쿘>= t`$>F]B[?ӾĿ -[qhW?a`0I{BU:@̿w?c1FjԿd ?"{=#&r1B'{@H@}=-N ީW:'I?%}QsnGqHB7M;??:$c>w3˿u;w]3BO@N=ʸV@mK ۿ99Va_4澺5BMj@Z&@=Wr1oYį6-ʿDVþϞBT@Y@ ^+H9 B?TGDms9B[@mG>rr׆Dk>Ӿ5 E'y1?B_,@65#bݿW36>?'I J>U2Bb3@8߿0k(#4i<>o}⿲>Bbk@ _4>_ɿ袽Be* @%@j# ߅.hU+=տrBǿ?HgGcY7E6ӑ c? =cf1MBoR?d8oA?cRũ>4 < e4'Y5 7Bp01Fxv(?ckE¿8P」i۷I1acBoxJ ?|ҡ-e`X%_>4¿vԿ)HBmg,?1?&eӍoCQ?cR,#㿦T忣EBk>rљ=L]?o1WW&hPZBhoe@<#uAU⦿'%b}PN{Bf_@mČqtބYcL 'xyBce6@x :mXG־I}R\zϧw|R%B`zNJ@vDz F:2LsE&u e&[B^`"@_%[UMGKZ:8v 9ĤBYRq@h@?Tr?۽Hv濳^Z-8S3BVM{@?,PWYĊrUU#S$T̿4BTbrq?1B@ IX>G r. '/e˲BO? 뾼x@E1, ^P?Khohg ԢdBD@'%@0P,c#!p'HtERWUrB:'@ۘo?vm:11U@S>S7;пfB27A 0(/EP=8/>b³?q~L),2A?hP6rEA*n?*N2B)'>A >_= b{??B?8PoG.?#PB+> A>h? cr?e?\Vqm>5B/\MA X>ǒ?[e%-?xVƲ?tgbב B46Aj???-X&+!? LIB<m@?+>2g.&?Ɣ&?hAV?BA@0?/JL­i#W3?9/'zP?1$[> ABGI@>ѿS7\?P4>`OW>v(RBMT@=5qX4?nmN=8yCWQS>\CBRd@zƿu?'dK"=(ܿB[4@&j8`Ҏ>'?+ܸ,, >-;vfBc`V@kYi5Ye?1x?4V R޿ORžِɅBm?)GͿg?^hve? UfX,XBqG:?4BDB}?T+W_-ӿ,Bsy>)buN=u?B)EJ"fWvBvi(@[ٿ]?P.~dҿӿ #_Bxz)8*۾OTq6ZzBE'AB{V`yEžؗn>悿E\;:gB|Dr7 LD$ 3J>>]&?lZi B{U4Za>(X>""&9]B|R Nǿ\ ?\y$wf+U`v<B{9D]`ǿh]?C=o ٽJ@%俆By( #}mMFԳ?ED_KΧ8yEwBw+h>bg5 p?]/;ԿaBtIGV߾i܁U)?_]K{ɳh3BmHM2v,4}F9*?kuۿF0@ܾܙ?q|Bc8{)#ֹ?f ;BJI?DBmNh|.2BS>;ӿԓ@^c[,T?LV|-wŜR,BD X?CI@)' @%{3!Bv?=׾թB?}?;'>7A@{-J q?ď}GB>??X@0LJ}fp<?^ ~?fR/ B:%?VX?9@IIQ&}4 )P7d?k*vB7E@%?@W47E.$ FS?z*xB5w@>8?ip@N0Oп$!4/{lI?#'EB1@oc?@!5 q;06pU0m?">B*Y'@ ?K@?NM>ɾ5@?7ÿ>B"@j@@[SÉZO%{)+?F?YBA&@N2@ǻ\LDFx>N1 [?U}=BA@hb@с!p weUٿáB>AE@F@eh(J>2#4d.ADfA&@B@vba(FQ 4>BBy?,O@1q^@|OB6R&In]$B \m?M@:}t2׿𛢿`IH72^2}&UL鿍72A,\sh@0>󸻾m^m00ldqF8J?,DQ?&K.A1,͋> ?}?g+$&b=Ͽy6i>8"S,AL$@C?4?IP?b !?B?G(9?B_>>v?[œAWs?P=2? =P??v=n2?r>O5Ad?7>?_?>?Lq>?C=u"?@A]?ľᤝ?n?>h[?@+?#ϛ=ٍ>q{>ڗAۤ !?WB?c(?qr=9#y{>N?>eAᲰŰ?|=NW?c N>Ǔ^=H>SQ? >:? >A/ ?ɰ?C> =P >t/a:2>iB X?]D'?.?8@/L>.xOV#PBǃ@=rN>d@-h>@|6B̿Il+=YA>0?F3?# %?i?4?G=iʸ?!Ye5 BN@4߿Y:E4bFϖށw> .(}u4Be>ȿEq|1 XF%۾ %=h Á}a?BsZtYǿf8T?>+>f#a%N>?^>?&B{]a%x ?hR=4wA='A1iBuJϗ`"?9ハO7i=T*&BJL}g#7Mb 1?P?>,BUԌ j?£پWBq_k A몿O?Kȼ%>͈ZcyB |_kz?)=4}>ʼ̍@; $>_E4ɿ:BL%G.k=?I>v \?O~龹~B.Ů> c?x~>Ztsel?BEξfBI }|H4G? έ>1>#OB52 v0aLJ?>.YFL`>4̿pAB&W;?5(֫JCO8 >k ۿB@뿘y"{ "DoKc? =h\'e>=cBy4Q$r81>yJD0r|`+1Bg>*PaZ xOc ɽp_?!|>K7@.BFq@ ?#CO?ҖMhe? `i솿K ?%uB.oQ@=wЋ?? NʗՒccMgiʊ?͊TRB#"@Z@H @ɿ%d)N)>@'ϳ_B$[c@G [?@-ߴ 3\ۿf.D[>V,c@GHFB/F@g?&e?>֟̿ǐ64'%]<@?+A!BG9@" W?]nL#PϿ s׾ˁ>BVI?0_?n?*|-)꾄({ǿ.Vo80B`wD.b(*ؾ|z foE|MBeO;g4 v&>۾l=0 dYǞLoBj m=l4` p?rIʾ'Ji~FϿtBk X ɮM?=꿑qa+ S5>BjĿE-}_*?,<9;,]'Q%BgŞ<@;\++?ܿ 6IhN8׿Bb`j?7|k־u6;¶?J򵿍þVv_FBX?п^>_HL]?GȿnLD S ,ZG}BL?ӿ%@"$ϿH,7=?! ӿEľͿ ,n{Zr B?Q8@A4@' K:= 4=O B8@:y@X VC#,?;>CG {B3@< [@Za=~~U޿"F>?S>{dB0r@dxp"@T̾gGfqp?gV ?LB.D@>]@e1ob$QA~.a .?N=xZNB+@Hh?\@Oc^}??PV> K@B&@"?ʩ@蟦mUj^8?B+m=4 B#7@5? u@䉳m8*R&?+>Ҿϟ !qBA ? @޵?kS{j?µC3>SkP揜BAn?@q.OXUB2?{9Q>N?BϦB'A%(?O@;wkĿoNWFe}BA[ @&|@UuIPD<-?D#p~BzA6@l@5xgx%?¿^a\n:B.At@yc@J俩~h!*?*Ė(AyAF6A @h@h3Eg ?/ q&B @i@ @Zq$jUvO,1LARsjA@G@w&@PgGɉc?e>EqpD&~A@+@@G=rVqd&'ɿ>GB"i?k9?X?|<- _?n?ӿB h?*7?5@[i%Bd6|?6ʛA8?@R5@zt]oWHo5a?7Ű=A)z@x@N.Ct«:$a<_^ik?+8u+A\^@IvDl珕W&׽3ٿ>;>@-J?8{_=>2Q|;]B缭??UٿI:.տ|_?WH?ƌ>BvV;]|> ?b<>GIHR>?10?r?%>8#?T>`T?@kz>F?y?,? 0?m@?> xa>ʽ&?eG@ e]?6J?pN==n<8>USO?~Օ?h|>A$L=q?"@26=h*=:>?<McA@0>1nj@iu k>%@LL=/c>9ؽk?]#ɿ@B>=tAh??n?8;?>]_>I?Sk"?`?>+; =!bu>}޶?v?*ό>9I ۾rJ?y@6???+i ?">]>!Lv@":t??~k>b>?l] >p> >u>;e#j>_ =l:5=^=(>?.w{ZW|?/J9?#FNf-e:Ű?" G?rm=ymM>KLBtŃ*NԿ%x?>jcڻ8>kgB(g8jqѿþ$@ ?QFH!]׸??3AHXP0 ">@]8@lunmX~?@๾ B2F n >>[?J;> =p/?- >07Bx1aK 5&.пE?Ga?nþl>UbsBw $kQX&ylv^?E?< ޣ辭M?eB{L^-ﳿ)??2 v1>|j|B|ke@YXEu??[Sϱؠq?K}QB 2B-75p??rͿgO$?-B+?@cF?>4?TX?>žx ?QxvBQb FE?e?JaĿ 5;5?W(@B~3yAFfM2?*?F  ԋ?Gu%BZ8<;|??G9O%3wľf?H2BZ.sn#vľD7??=]-== yH?(oLlBA}]-_Kn(4F?K?s=O־?EAB~_^gy=)9ٿ8?p?]̼ؾJ?;B|ԿJ$bO>Jȧ3Xc`?O~?XI>Fҿ!k?;_Bz5fY>.L=hx%a?$?>颿V?WBt EM,>21) >j ?m>aaf?r<@BjC;?b`?4"D=?ѵ>u n?d`ZBd?Bۿ$J]beI>;;?Y?9B9O^?)h;Bbh?̾/@ÿ=z?p?yq?xiƿ{B_@ u&bSց6h?Y?d ??dCLB_`d?B'v/a=_ Ɇ??QKGG?;0 hB](? L:iKʿ?2?瞿 $5?V]VBXA@ҿ@߾.@ NO??DEL?MRxBTd@<-=3A9ſ,>̄\@ٿ:.?Lb^SBN@kod=aR(X@-'l.=E?G BCw@`m0N,-fC@/lhئ?0 HLjB>@>XJ'(Ծr￳K@:C?/nBE@JE =5! $p;%?uU~=?W޻dlB:t@b9|jS%7Y?Vp><@῔>ɿVkB45@ε$gȶ g'Z6!?b?4˿}>5⳿qɾ H>=?ô?;l>*6B/U@(?2M$ʨ-#cS?`t?=*>'||qcB "An?㭜Ej½ĉ"'0?0>N>KbBA@Gˑe~BS?`E3$=#~> n>?Y?ĿvB8A@hZ%>#>!(6N>?i0?;AHA'Qc@4?WQ?9-fu\P!a?PĿ AA @5W>H6#S?x@,a 3E?A9hA_O@V?្5? ??x^?Wj/ ?࿁O,A7AXa@o@q'Z#>d?"#8?Q:+(.?צARNA +@@yzB&O=v?>~7?n!kxפ=蓶A@?@޼Z>?.X=>)1D3tdkAo]@6d@$@?-=~al>w-I>V[uA @5A2@9Z?db9-"ZDPUU?;ڋáAſ|"?Q@?ཇ7r{W[k ?UA5 \.@K>> Dn 1 >-?AnzDƿ@!?jt'Dÿ=vHO?R?7Ǿ|Aj?@lh>TU^m3u?*+?+(XAu @륑@ol?j=0s >oHV?>!iAT8J@".@y==/R?>dg#g d>?}C$NAs4 y@6O^@,m**?eپr=Yа֮پa>۔Am^45b@v@HA?={?֮?玩V  ? K?&=Adg@-X@9[?*7A U?&M?+97AaEL?Z@p)YJ$ھ^D?e AL!V@_v@FA>/C p?|?b?~ڿwo $=E<Ae?@o.@B?,?>f>cchSɾp7AE/>@o*l@L?R>?;Ҿ̨]>G>9 A0{@r @?샔>3pd>IA?E>Y?$A!sv?M@O@WC?? e=U-p9>-?MHGA#8?@c@k(?_ ?5?˿,KA? Ͽ[> >㽿A i?d@]@zx@V?[d?7>N@qp +>jA?Ộ@@5 6c>/?٣_n%ȖH>}>y]߿}A @@\O@>L?[D? ?=,;ԣ־&U?#>7AB@Gp@v@ -?`h>8v_uVGȾ9n1>,[@潲@M,@@:>p;*kF.xf?3>@%9?@@@\g@S3c"#8þJ>M?ozX@<7@A`@??=&I> >w/3?a%Zw@G?ܡ@[@ >??h>l>^>f4>>T^>,@zg?A@NRg@S">?ҽM>w.>"$T?^?T?=]w>g@?;@@?~3@q.>=Z>NaR ?C@5v?=.@ٴ@k@?D_="\>>Lx>l?F%A™@L?Z@@'??z>>3轑{=3ؿ7<=@G>M@@$n?zM@?E>@?eu]B`@ ? @ @I@}B\> I?Bl?2`6>]>@l>+f@&@Z@ V!Ž P??og5$F#9m݊@TԬ@7@D??7~.#paIC>,pocketsphinx-5prealpha/test/data/tidigits/tidigits.lsn0000664000175000017500000000176112505034521020447 00000000000000one one one (man.ah.111a) one (man.ah.1b) two nine three four zero (man.ah.2934za) three five oh (man.ah.35oa) three oh (man.ah.3oa) four six two five (man.ah.4625a) five eight eight zero zero (man.ah.588zza) six three (man.ah.63a) six oh eight three eight (man.ah.6o838a) seven five nine one three (man.ah.75913a) eight four four oh one (man.ah.844o1a) eight (man.ah.8b) nine (man.ah.9b) oh seven eight nine (man.ah.o789a) zero four five four eight (man.ah.z4548a) zero (man.ah.zb) one (woman.ak.1b) two seven six three one seven oh (woman.ak.276317oa) three three four (woman.ak.334a) three zero three zero nine (woman.ak.3z3z9a) four eight zero six six zero zero (woman.ak.48z66zza) five three two (woman.ak.532a) five zero eight seven four (woman.ak.5z874a) six seven two eight zero (woman.ak.6728za) seven five (woman.ak.75a) eight four nine eight three (woman.ak.84983a) eight (woman.ak.8a) nine nine seven three one (woman.ak.99731a) oh six nine (woman.ak.o69a) oh oh (woman.ak.ooa) zero (woman.ak.za) pocketsphinx-5prealpha/test/data/tidigits/woman.ak.3z3z9a.mfc0000664000175000017500000004032012504317076021357 000000000000003?BH?Jp@t+\>鋾1>0bS8<.Z>ue? X?ٵ#@-X??\>|=]3?*?W?4>Z ?e7?Ρ'F g5?.?H=@?M?c>>x@ {;V@?OT?F;=7=@y˾> ?p>!=n?Mzբ?D>">xI>UA>Y$M6={>=ch??1@Sz-ȓ>R>>@kcۿ?> >>->w=_=W?.>5@C_]?~:.ӼZFx= ?>&zG0a>t>p_->tq@>uǽt7S?5p>s 3> T]=ܲp>=Ѷ>??#Q=5aBN"H?w?X??1?>/?̚?uh?"0-?c0Ip?E=B]d?2?xrp@z?uD?n9?>@?x;]?t>Y>>ܥ1p9пS׿> ?}k>L?`7>U? ?dP?Bz?3O:V=K!(˺?\>vGm>~? >/^?jt=?Eҧ?=IB= ?Э?cʫ??|I+4>eh=?$?V>>@=ӷ>m@Ը?f)뿓e?F/?}s=9=]?{U>>ӣ?iCnO@AH?≯>i? >e)+>>n?>=LTh?=@;c?l>賾ٌ%=ѻ̟~K?.W>?z@θ?[T?>8:;>?i-9>Hi?>cAƿO?g>ɯ!տ4ο$g,*?AR^Ǹl?n">fw7<U=K=]ԡA'F/Q?d@?i͏h?zIa> ҿ>o3>ͧK> 3Ǯy>1>k4pA4Do??>>M> >EKI?g鈿ԽAh$o?D??t? 7>pū>|$X*)?쾸f>+Aevd?.>:?"11!?qZu>+SW?R iAwAd@A@_>/r>QkI-?gDp? J'>8A9>@'ŕZ^*1?*SAi[q@1?? ?6=j?l?O?Ll濆+q.AYy @'D>:M;'??K>ɢ=ڃ>j̅>|[cAČnL@%v?)b :A>D'jmb>Ģ%A⇙?t>͇>K0 6>2_>q"r?+oA.hk@0>?G>Ah. G(a#?'A*sOB%]?x V]=ֿ7!O ƾ]>7#W¦B(SP|?%N)lԿ6C%?uǿ.=%BHL@$ ?quCZ'_%ĿҔ q>b=>󽿝_BVa`?ʜ ݿ| ^c.˓Cٿ cH-&BL?G??hLt >{0c쿝 !B=r+?o?07ɻ.!$E[H[BPC`?<?pH$s eֿڵ%_B[T:Cm\o@RQ;Ȼ /<Ä+Ba? q!@,CLDd=[ӏ<@eGu+PpBdY+? ',?$me(2><㿽#>tBf?~?qN&IG0?W [ݐE~4cBh$?iAJ?$<՝Wʿw>F2" k _ Bj>o>w)$ѿA==V .*-&V'\Bo'>Ѯ2a?i>>[&:?ۿֽ/.Bss'?4]I?:A=H?.ەLPBut:?aGC? <*]2?wBt)N[E>֓>SB>Ni&(5%3]cOBx3,??Azr(9/?^v&)^Bw}Q0)a?_M%2@>:忭==%90ڎBv.ؽ=)+$8$龿{QE龶CH)BwI?,?(JDH<Ęÿ>J= ĿKBtѪ~?Y>hErNZI>zήt wQ3Bq?!6S`T/HȾ j%cHBs@Ba<>ko! _`=iR>ル~bBlJ??;zʹ]92X|E;`(ȿՕu=dʿ-p翚oBh\7@l>=Tlο翝  Bf@>HZtM8r꿮*M忈BcU&@>7V{3UgľܿV连%ᅢHB]u@]|fIW +uRN8PY])WռB_g1@L*?aIk{d'ڿ!֮d"B\>m@q߃?~1ӿ1UuU̿p-BYzO@1ɾ? >*R3J` Pվت[BY~g@-@vW+nHNP]x  BTB.#b1??΍8^UG7Ye"ZRܬBS'@ "@6'޿3nWi.LbH!-?!$BN?*@zDѿ;9Q^οUh$4OL(jBG>B? @ȿ4RHE#a/!39"rԳ 0BDU>A@VF?>P*nd{nF7GB8?*v@TH?K$[+G=>y2ڒqx;/x8B+&i>< @kX?C:aiyeZgֿHK̿8.^BB!u>c@W5?UJvF> Kڮ)%쿷|B?;(@ ?~?_x('>2/~WĿBg*?ĠZ@≨? ==ẫ$ILR>YB[MM@?ӿVіB2zF$ }CZBI=O@^?畿EO}?Xm+p9~ɿ߿|uDA" @ɭ@*$?%\$;dl68]=hBL U@?٦XB'?'zƠ=JB@Æ?'K"`#y^.*dWDB0>*l@:?W g.쿭cZ!/BED@>lj|~,x.!t>,¿/ՁBQMLQ?q>'+_T˿;PDVzDF@=B[T>? ߙyY!Cc85vSbㇿ|q:Bb "2J?g[>_iF>MSv6ȿB-'P#HBbk? =@ȁ AXHTZf俵<~e%ٿABay?q|xu ])fIV;b!>g6Bb>i?U>_>m~濿=ڿ*k ߩBd.0?=t?_|mצ#CJ2Z bP$BbԼWX0nz?)}0(o𠾿V碹BbEп.Q@JvD2j=eS>hyEB_9 ?M`#CLf=> %ɿwv?B`)~?\"?"vt>S`ݜ>5Sb"*ڿWB^?ݺQ)?'ZeS#4X\L %1%EB_`@5q?Q)0Vۜý=`뿱` nASBa@@*VE?,qnn|y\忎l忉 [vy>XBdF@iAB]?1QP?&kNN[>ϼt&BhU!?Ww~?$Ikw zտoɿ P̈́>>NwBkE>Yŷb] 480Q1NU¿m> >YRBp{|s> `]F)?.;lV&9>Ŕ/Bs-,jthO?Dxǿ4jgB=;@=By8"iRY?6(=LAMԿ>-ſ\Bxw rN?]ɿsIOBzwpLݿL"tm_w?B>շR|s9="hB{<0s{R_??%ھˌ49>βQBw41M6U? \ YsrrYh KBzneƠUWP ??9oҿX-D=lvBv[Xh__?Gƿt˭̿Կ:[~Bu%H Zybܮ+?yK(V}?7˿ZBt9!xN7dM1?-O j<7x+K753B7`OvBs$YqF4)?_VA6'Ӕ;Kd!BqQeWI:(y}?Dw4@aNtҠ׿4Bm=-֐>Xl IG"(1CaBeJ= >I\=P]!A=W/)BX*@ -(>TWS1 t#72}BMx@dE]>QWy(B`:v0V 68\BD7l@2@ A?B}hs}ҽ>\ <;B0*@R?4@MθcDζ?PAom=ؿB t?"@s@ ᆓ EȖWAS>΅\#A-Ni>V?UɾJ?ҽf3*>Q??H6? o?e"3οSYGA??AҺVn@[?&A ge?;}6>V*>A>ʚ>,DAϱ??CQ?>[i?VJ>z?W4?T}?/= ?\nAͯJ?? %i?4ϾL,w;? >?cYA#0v@?^ro@1h\7QATiC?h?[->cM]T{>mN>B>y +lG=5BI0>It>8t??$S>,?~;8?9ZL]B+ӯa=$Ӿd39?*?Apy>NQIB*!R?lh@>M2o2ipVLĿ4cr9䛿,BJ@m?|Kp7>n9/h_ܾ: ";{㿠俪;RBVC^@k^;(=밿}N2z[{]_BU^?G@h>Z0Ks nNK?h? @*^")ֿBz>P!;޿ yBE>o@L}*ܐЁu'|K>}tk~BO?@XEaDaH!9g8I?+JBXH?j^k@SS̿!VոϿ%nAvo㿋~` B^Q?Z[@!: 4di="Wj_lo)BbQ?Ji?bھKk>ʿ7R\CiBc$?cWGz@3b? '&NпgBe{?- =?b/hڿ>>ԲվTXBf[?DH?{;=bnlD=ŅAֿǯBh ?)'?ל&̈l濟γ<U'18HBhS=˽~ z?ߔ֘*X 48' CSA83Bjo(X?3ɝwOʿYס=*bCbMbBiHOw?O?owrZ~ > > xQwHBh5?*?Sy-aHg>".>R!@aOcBg~ ?Y?`sn쿸"ӿ(==nI]BfΡޚ@2RW?ENW32㽉}>>>w(ƾ۬$cBeC@Y@}?|ITUKx>%Q ţBb c@H>{ba5v;?;2` :4tBb}@s?цev ē|p4z0nBbf !@-?FM'@FҀ>G=<=BԿdB]M?@*?r0^u#1U; BZb=@cZ>"+u;kLK*0Ar6}RF{1BZƟV@.?XȣP*E)< k罿u6MBX̸@y7?x,H(ۊ=9e##sf h2np%BW]+m@l^?I#ÿB=Ce?tLBT6,u@1'@#s!JV'пX:|BPӹZ@ y@# cD2D9vjioygB5O@@h@o1pBs >#Ґ5<һ_B)? @`?yI_`= GE=NpO B @@U>Y8~PIz˿0*xXB9@@xH@Z?6H(*x#\X¿לB[k9ͿJeBb?@@Cr_?뛿03MHPڌ!蛳f\A;YaP@}.@=>q%9H3ӿnL|V0#A'@]8???Dbuay㨿4gA@[??Z9?Myr8v TAA4+@b.@@0>Jlhؾ@$N9s>^[?AG?@z?rl?ھ.#?ߵM3Sf͂+ٿKBUZ?f!?#]^=BgԿ1>Cݿ&B]E@?nsw) r%@c=[҂> TBaRk @&O?:xNGuP %Kń=tͿXBcΏ*S@14-?<Ĝ^Gտ&+1^hTBc$!@ l?#a-gsɿ,5/(ZnA`}Bcj, t?T? |9[_8^J y M>BcK%n?> @7׽2=>Qj^g@SyQ&k^4?\s]JPYB_ ?R@E _S18 ?R' 2ٿ|PB`*@ѿ @BCfM6;ӿ97?>T? ' pBa@Lm6@!8 >wDpq?)3>N?M1ӄgB`\@Hee?GC쾸p >xVKI?ĮBcr@ ?8/m?rپx?Ga)\?HBd@dH?xZnl>ھ*r>gOH?8_BgB@'g>h2!$"=(>C=e("r>ʃ Bkv@ OqZ>>p^>>-V?byBo`?nu~?n?=}n >g?%̹Bq?ew="t. >~?* 6>􌊿ӀDBr>b\,?wIGf>g>T5|>tnBt8"? [7%ZEbtxh? ?|M3)o?((Bwi> A=iGoM??IͿZW&?6yBw,>S:cU_M E? ~? rn0J?kQBvu@=򼿐7|`>GL>9fI>;vxC '>-:BuD:6==yl]#A<Ԏ>ڿ5b\>$Bs0>|%PLcH>E>- !rS=rgBq?$TmKp>^>U~M h8@Bpf?ۼ~J4֦}? 2?]W<$u>d-Bm?5 _F>>\h㾿ߜ` lg)POBj1?wL_i]LCAw>}>7ٿhSfABi|?_Z?>I.̿ѷ<ʾ%ĿMB]@ ߝ?+տ<>]ܾ]>/"x}ӿ7BQŗ@%O-d@[ $k">s˧Q8nLWB9 !@|H@hZz:⿳R;jݜh>ƨ濉Ŀ}uB3+@*?':@U~(lM3>b?Yt5`B34@x>kX@=lR-ŕ3E>Zz?)B,9B1!@??,@!cWC1`t?ߐ*>}BĿYI>08B+@ا=?<2@YqyhZ' q{yhO>I"?ͿQ(B+ @|t> @:[7ث/?a>d?}sܿngB,@8>v@oA\^'f?n$ iB8y$@/~?e;@,;  'esdi??\}R\BY]@CCkV??~ԿHU!];j a`S#/Blg?q{ &l"3PE?C;&F-־Rƿ>5ҐBxxؿwHm Q<C>mr=Y :Ϳ:=X01 BzI$\tC%դDʿ-BxD&#᩿ m:O-0ͽH_ٽ!AW -BwYx޿Dq? ׾p#&>S^Ͽo<4) Bq_ľGw;>OB Կ,?Vnb_Y !%,ٿ&4Bk5{?o{?>D[L>xj3KF8V<Bi?{4Gpl?{2)㑕?BZ=Kپ\[uy9>jBi?,忯?Fּ2"n7IڪI?&p8g^O=ly,LBm =ߑf? =U]9M绩SnSBnٿ ?C?οHlL͠ODlBpw~?KUE! |~ֿߨi}Braտ uh?t߯sX):5^MNBq827Ӻ6?NڿS;:W,ǿ @KxBqv?<.R N%Gs9ky&W Brx0m?QJ|^C>ſ<_=ʾ Bpgaqҵ5=?$$2,=z,=ƫ%`Nhw~ 3 YBoh/dB|>n8uSN=*T ,$7Z+fvKl=}BphYU?H=㿆w=<(/Q= Juq^BrˎھҾ'{6c >n&=!1͘Q!"v@S0v^Bs $c> ؿQfB\V9>H>A=ĿϾscc"BtS?[>yɿ2>#@_X9vژ@ -BtI_.>0Z?;K>o)Bǿ'K{ QBuveq0>FlFo?]??bC.aG ˘6뿂.wAyBp@jW>ܰ" 0]?JCR, P1wSBlEl>uH xLp?PK05꿯7Z +DBjwe?UaAf>ۻ?hTsB_OzC\VBii14Җ> #> ?t|REAh<,")BgsmPKPh>_?%?t(f׿.ٓK* = LrBdZ 6K>MZ?G?0Կ̿кJ{Bau.?f?B?H,AϿG_D}eB[q0nL?sH( ?˾UȿO.7YvJkuBVvӾ$?(K??̕5yH[nF <*f BO=.^?4h?)~@-TvFMBI?g8%N? ~?΅/V^Gn7ľҼ\gjBB@ >r?|Z?te0[5W22B7@ZG@&DqGDʂOC}#;Sw=B+e@uH@Z^Կkg:&;MqB&0@">~{m@LaIWƿ| &s[߃s8;o֔^aB#Uq@7>a}@Y}T&BG4:BTA+6Bb@?IEv@fE^C;`.;>W>:ɿ\<ײB l@?_+_@<*Gh6iϿ0X;4Z݁E*B@'@_f?3@{GSr0y>K1Z&4eSQB%@ ?^=@8UYKva;䍿rtF+bNyBF@*@,@umҪC.J]+PMB =@ɝ@U9@7KW_Z54i XϜ 5_N?)V0B@@ 2Y@s\&ϿMe8ieY!N~^lAu@:V@<@-cNk$vKjNj$-)1AnI@D@%@P66/~,z/?0v#Au⳾@W'X;uX ⿳)ӿpC^ K>ĿmAxs@ɭ?6>QA¨ !?AJ8?1@뾛y>5?o!])-dcHR?օLA5U>=@?4le>KXSJ2>`M?S"^''A}v/M@O|e 鿑B_*O(<[?rտA>R?gWAԴX?@v->'Q YS;y^׿E=3?>bAyK̰?@d?$b+>e*,M=J@ONK/A}N~>W@eG?i><,>0> h?AŠW'u?@\sۿ<=T˿g d0H?2?KߵAHДyڿ@IecPKIm! ?r?M{1A?F??E@;$Ƶ y$&mNWL?˽XA-<ڻr)@f3 3ľ.ϿG>??J MAPϿ*?@?a>-Ž ?}+4)ۼLf>>A)yB_~A?&@ U!#b"𛏿>w?휼^A~>@2*( !?u$>n?>>? *A jȪ4?@<~?|(>SF@K0>>>>Md?O显}4@7?@.`|> 9;BΎ)F??W[?o>@;9?Z?y)oA8(M>>b쾇և@ =g@-@fi?FX>Ti>2F?qJI>Bh:ͽ?>e @F?.x@'oy@W>{g^>H?w.[?[k>K>>@͋ >5@#s@#BtߙrK}>wz> >=Y?>J@>ja@f@?L$^>p:B)Nɜb_-`]@)g@II@8u@Z?UV?}?͙,Ѿcp@ @L@6?]Qc>\Ͽ#>hlO@߿0l@4X0?պ??d>d>CdbUM?mZ@XͿc@P^>LEvI'=]z¿v@bM\@|@'.?(|> Z$?y缂>$|&@d gW@=@¾y > [K̿I>B>0ؽ2n@Pm|:@U>mK䠿r߽=6>5= ֕tz?zl?>e@PDV&@Aɿ5]d>Tn/Z(1=&Az?F}[-$>"@#re@=_}n@?y+ tϾ>> 3Բ?i@jSrC??qR?i7?WA??=m?0]>Ng)@?1?}?,l>q.>;߾I?[[>>Ȣ1+pocketsphinx-5prealpha/test/data/tidigits/man.ah.35oa.mfc0000664000175000017500000002027012504317076020514 00000000000000-A >H#ud?i?X-`?Ͼ@>o1?$`Ugm@lOA>/>Gb>Ry?=F?t> ?>An?bP62@>?3 Tp(m.>h/UL=3: ?+:Ym@;)?-c$@RRdn>J !<骖8]>">?ka5?lYE@je# :?hY>/þr?=(SPm.?Ψ>}@f)w$?x(7gܿ\տn%:%>)+H@:Pgg?h ?Qҿ癿ɾZJ"[=#}@(1s?&࿿п>,u=D>>f?~>@PQE?z6V>K<?+N>ި><#?\}s?>DN濗#((tʾ;?X>>[>tJ@2$)5?K6Y=j[ke;=o{?q2?C-^?o+=@2bCT?FKT=N>('wC?w*?-Z`>R@zV@=]<ǧS>_E>[ @.c_q?l> ֙ ?U><*N>>>kA;.@ɿ?>^*.%G/? ?@> N"$p@'mdR>> r>%1`S8>?K?< Mݽ$[@h7=@5?7x3PF@ Cf[ ?C~|R@fn)g>2?HNC#(?7??1>ƾ:Y?3@ă13? >E >p11h]=F;?@#?V܎@|z_J?5>}Rs쾽0=w?1>%??Cmʼ@ %??pG,߾l "!>~=Ur$T>q>E5@]*1v?>ϔ!:٣jB >C@a>`|29u= jKS׿~n1/wѾ<;ཌQ?=@,(T="d88?t<,:s4S=禚>}XߧL?@gE+ ɿi ?=XK?=:?v=O?Ui|> > AW?E=>`h ǜ>(\<?@.?0c_9=*Ajh9>ܩn>^?2,~>$=N9>XAϷhjr^ۑd?[78g(?. }?"$vAY?2'?T*V?0Q?gR>ԡk?IV?bJA] w@ ԠHe@-8?7Z?'f&DZȿ&?%%Aߌ)5`?Su-?`fE׾kh?$d?V@rm+?YdA3 @?`%ӾDCĿ#? :A@6 w{?:A8P ?>?f ڣ?LF?Kا>5 ? >?=7A}Qg1@gN?V?,'?3)=ce?rep?S*A>1ArXğ8@\ʿ'N?@ ?2?$/?>cQA}Aɳ@l?EB>6E]?+S?:b?퓾s-Aܲ*> Y>v@;@,(ȿUᆭ:ԾA2=оѾBAd<[A@Q?u@6أ$#;(=굾yv>X=jGB0nZ@iq @IiT4eL> L? g> .B9@fh@$na~wp.F>8DW?/=}B?s@BDVO~@@NlY>茿S[|>t8 ?{_Q'BDL@Y%W@L Hӿo9>u6QE=E8?wrl/BEz@@+>2pX?'?|joX?i=-BE3?̽@]2ѿ )b?X4f@\?}i=VBD?os?Y@V+(L?yψ?g%W%#BC.8>?8~@#8lv6D?8쾿>'>i0?+jD@EB>>(?2@ @+veRx:Q?ݠ%N@y>Ú? 2B;;}?74?A9)Y6n?#N,ڂ>tm?}ZB6sk?l'c@>A<}Pw(?]MWXy?u$B1/a?@*hA+3Wa_?gO=m2!= >>> B#@f@u9@&B @VQ?B @Tm|=9FJS ?MaE1>X>A>ZA)@Rf~?x@LqB"a&+?j Nx?l?nZݽV˯>Ae@!Hw@r]:@@h(ο|n>4k ?x?C4k>,@ACƙ@'2@Ǭ/?>x0t=U0 H?R?1k\?O6JAH>?Q%@WБ?/>H'W>*?k{??,\.>|TA(ƙ [I@KO!?=(DTG>[F?H?!?Ok>vsܽkA$0@ C>aj=?-޾D>ҍO?*>_!A*\?>b?(.?f[?¯>Eʾ%=N<~V1Ab(3O @l?us(1>'?a?弎q&?BLQA)d @=JC?ל69LPB([=s#=hyf_O>]-A4vSZS>M?0aqWfTJ;>b4 $_,>A>d ?{?Hp_[i>k}A?O?t V fh>8AZh@ҿ@!]F?rI$>e^?W*nn@88(}s>cg??2ȹu"/*BUm2@F2E?e!µR?'A?rgG?'X/BWhs@VOi\?^]oS"?#`*??gT׿-nUBY+@ %v %D3?>ھ ?;?>} BX?T(F!7GG?O舿W>n?*x?Q>NBX?J=2ʦ?/ÿ C>Uo?1?-# RBV{=?qT"F?m.CUk?Q>?o5B#WoheBM@`] e=pǾ> > f?:6+BF@->[?C>>x>?Si>nBBd@ſޗ mו?f5P?&Ӡ> B?):0˿(>xB>B@Կ>y"I?s?= ?Ai;0=G<.B@2@8PS '?#B?)?V?${a27=QB<@ho3ۿPLgun;?D?6+?1^?k*0ں>B;6@>^6#>,?oHw?>İ @߈>iB@@rȜG9,2>V??q$>Q쿞>=BA @{@ =2?t(?1>|D8>{]B@3q@ݖr#$g?u6?{>gOտĈ>أB:t@'ͲIR &mv??f>2JzJ5?/wB5@xU<#MI!?Y?}w>=`z1>6B-@vtԿ%G?6?Lӭ?->=$B&W@ _?[IeasϾ>?Y?f򿅓=|rB|B@?AC=+>U ¾6ʿgQʎ??I.Bl\@?*A?9??S]0RKmqz@>^g?C}SAⰶ@ۇ?͓??F(>/oҿG΍??;N4PKAf@Әa@KR?`$?7>BUᄯ?D>δm_1xoA)@z@_?R?l?nx96nET>y4?QϿ /AJl@@U@D>tQV$A8I@Q @@Z,?}߽}ᬿlk?OZBvzBB@.pK?w;=?xtÿ)c\W==ԳX|a>0B4@ޥ«9>r +/kv=D?$N B'L@dHO5վe??9->yB7B@FKRiMmSR??.>%6B=U@V! 6/9q1+y>?G?rfo=;B>@Ņgiu\>=\?'?,FB@@:+^">5. '.l;@@>c@N[aBC@p̃W Uka>P @>s#wxBC|@#pn]մV>=Tkc?@=>lH]BD:F@xT`jns>放 '@è> 㯿δgBGͤ@NCQm?UAR @>dBHp@8<>e6?^ XI I@>SǽBHN1@+n>ޖow?_Y.IS1/Pn@!>Юl "lBE@CQ?>C?y@ e?J+ۿgBD7@CL^?m9S?̾￟$6V6@r?G*jBB@K?%@nx?®| ^m?Ͽ_ly᜿@?_O>l4B<R@?Ɇ &I܇?$ko~Ϋ? )?o>l(B5D@}@S(&C?pM ׿dp??;U?8B0@V@)[#wX?G**v"?E>=?v>B.@?jU?j=iS٫8?L<>s`??-FB,o@92?HQ?>{>m 6?mmX>?>EB#@:-?-{X?'p. 9Ԙ]?b3|*?m>^B"@@w-?w]߽}>t\?9>BA}@Gt%>V>iQt?5Xl@O?BW|A_ @>k˿=w ~LK?. D4*?܅n>7e2AWA$@ĿHy%=ݫ޽t{?Pc/$?z>f8AFA4S@OD#%?puk?1ʿs ?{AfA="@em|?JξD?D;> =qAڞAB @램(`̿?e>/?.TIӋ7=pK.AA. @>y͢>ѿC3,AA@d?{?>ma=#i?e]T?v>r?z!þpįAex@@[?u#??@ʝ?O=$;5&b;1A5]@`@V>?j@ @2?:s8eD萿:fAA1C?0T@RU>r?%v3?g?=:>EpFa6=9?vAV=Kҋ?9忓 @*=<󦻿"HR?%\rv %>%JA-?̾0 pm?m$4b=ͪhTPؾׄf>*8AxTu > ۶?P8TS=<_> k]51DQ<#X>MS@>ÿח1Ӿv?`=B? Ɲ5b>? &@8)ڿM#nѸɾρ>W?`?mwBͬϾw?dԇA$W?L,?)~>4ҽ?p{ѿVU3&A {}`>8"c;[>}۾S>7>/A࿁$>yA/"]5? g[ ?kV>WM[jz@?fXz#L>T&H>I>D1(῍Mo@c|E޾DV ʠo>>=g󡷺 s @XJ?.?Gpv?修=uʻ݉@ w]2_z~'m?P>܉Y\?;L2=޿4)wA x}@?Q?\S=ǎ?p-}>y̯LA ~G?5H_>?F7?Or?1JA_? ?-^9>>ܽR>7>$=68>NY@0 ?P>?/3?r>UZY>/?Kv@yA&*0??۬??i*ҿ?j>h>Ƿa3@ط>3_?V>/>+?W]>? >a>qRP=J>uK2@IV-@0r?_??* P>>==,>Hk5j?3.@m>J?~J;.c"Y ҾU>$?@>]˾X ?Df@=n?rm;>`.VO>P?k?> &ヒk?G@2ʿ`L$?fP?>6=l> ]=scv>Ae@~:?>?Q=F?q?8?%hc*7ž=q@YH@ C?`ؾ>=?!?D>>V>j=4@Y-+u?J2?ý?}^Yn?m8?5W4>I>7S= @J=Ǿ[9jk5~???wFT!|?z@I?j>?1?yQ ?>(>uɾ__Eݾ>M@]^>% ׀>OT?_hP>S#bɿVl.?2=@v>e]fc=w=j>?Yr=^p=:>@t+M>`s >F̿:qK&q?2?4?>ӧ@ؿeT]>(ݽ^8ʖI㔅4t@w=Xspocketsphinx-5prealpha/test/data/tidigits/man.ah.3oa.mfc0000664000175000017500000001406012504317076020427 00000000000000 @$~?m>D?^t 'z?%3?;'?1O%x>@B-?C?,E>>/־5 M(?F)@>b?'0"⿘Չ=X=k=KȌ{x@. ?)>+={G?Z@d?_3=ɤIoVȾp>W?]?>YϿ p@CYym?H?=YGhI>c>͋, = @J ? ?,>J>^?zU w=5? >H,@T :??8!j?QI>V?m(>U7G>^=>[@\QSW?=< >.TJ>m6> * 8=8d>x9>e(@7h?,C?(3.a=&'>v> ?d??"h>'@ E@p=#}q}>-{?|>M Ty=+@,<@H> cF? w(>h??>#=t?Z?"j?`R?p濲p來?$۬.<@?aN>u@F)d?7]j\J =5?G?A?Qi@.:3j?_=E=? q@$?-y?`4\9e>0v@*N?35>9?$N!>u>?/?aؽ\?]X=@A+M>pjݾ%x%_?)>C=??+*?bX>@]^8:?`>x?.n(ʽ}(?7n?aF?p @<m?v?$,;:>?SL?;{,>>;`^>nX@ +9??=࿂.͂?L?/#Cg?i?e=#E?ςo@E=ο!\@'? _?(q?> H>Ǿ1>Wؽ?I@@kd/>ITWn>CQ=w>P> c|>%>"?E@J/???=w8=SQ???b=RiW=PL@:84]?7S?,:?e5bx?PM?N?%>E<]4@5Q}z@4,=G?? ?N`|>{@F=>c>e'> ]꼾1>1>h=9y>hHA'E@ _5@9S=?d{<2c?r{+=?-/A17@Yti{@/,?>T?r6Tq?pTle?aAB`@UAi;@7|Tjƾy>"?5>cN?P?!AP%<@?wRbɴ>&2@cLÿ |c>A05d?M9>}w8"?>?^?85m࿎?A .2>ԃ?ޡb?GLWs?}?tw(Eɒ;?JAc/@bE'?t?$? >{ӿ"x>AhI'@%#xǿ>T>Ą>E?,SQj ACGOC.?81?I@Y??>,X25TRAHd!@T"@}>s??>=?'>wuʿ_MA@~}@(R? ?}v꪿ fi?X6k?B=A'L׿?`?5.TFޢ:m>|V?o>3)8BCA,1׬K@ (<<>˛{J?/c;-B&A1m-j3}v=]|@]=k>e?|9B+A%^O;=7R@ 2Q>>Cy?gdJ_B14$A]=>퍀?/z ?@o=?tމ7{B8@jjC?wm?e9?P_J*?r`_@ mYr@ d?̽>?2ʅU{?W<,-BBU@;v@Iri-n?{>@ϱ??g@jaBF(@W; A @}3DvmE?1CU쯾>\?*GBIA@ ?6I@h[뿱0?y<¾A?,poBKJ?m3 @(ACuJ?;̿(- D*a?'rBL?'@ @ݿMhp@y"E.wG*?4оBN">@HϿ) /[BNr-?u@ r(jY?0 >=d=(V>/BNο>?t@ r2Jz ? >"=ʌ[>ÛqBM7("A?@=7Itjb:?>ts><>>Fӭ`X>+߾}BL뾖i?@:Fc ?#;?`>*>Ͼ[9BN /^>@r_5;`RfT=EBOs>ƾEH@Pb~Lvj"? 0_?m£>G? H>.)dBS?m@W%{MJ>~` ?{>% ?i[>G>0v>܃mBT?b vg?qʿn*VF|AM??O]?I,e?>BR2?4N?y rݴ"] -?n?.&?R4=BN@ 6_Y>C&VTM.?)^?78?bp¡UbBLX@$7}޾Duƿ-Ie7e?R1v??R>mt>vMBI@S.Oedv??@?D=BOZ\BH@# ΘkW ֿ;we>ɜ?e @>>nٿճHwIBJV@9-e޾>8>:?QF>ȉ`BG@eHc\*/"ܷ"/%b?4>K(BB @s7%K!辬(¾D?t?e'X>B>@[M)AP;rU4Z@t?AbSW*BA@_V>­X c$7Kmz e@? 8fdBC@mgHi ֗>kN׾4$GC.S?7?$r(B;k@qBMe7&>tnm D^??DMd"վ B7@\c<1K_>P> ᅨz0R?rU?vlOB9h@wx[?#>BisWj?A?ԶlҾ>r0B[@@sX`V?[%?¿OT?@+B0s[%B"A@+Ct6*P3L?U>4:>G=0.B@&.>8{?Ģ?\=o?XFKbaAZ*@?kk|q@g?F@ 5TK???U?-A@@f}_?>%@M?0g}?U3w=**>AoA>Wo?(Կs?EM>{Y ʾ AhA9h&b#rGĿ{@Tx>O罄].4 `tÓA@ t?Ѥs"=\@?9?.=/7S` Ac@?ˋ"y.C=I>???Q?0M5>?iZ"tA @O>#E#{R>4>@A=I?>>!ξ?'GSA@IHx<2@>8@1>T??Gz4FA^@CC<ם58<^@}??l<迥]h A[?޿φ'́IU???,YN̅:X]+Aax@ H?8ӾN'Z?ὼ ?8K5/u0(A4?<?}?iſǦ;%EG>s@̾/οz-y 8A/>BD4>¿e% [Z?e_/?6Ny=SAA?>1=ecdҿL?3K_>`Mq]Zt>zAM>j?=7.`mX=,j?}C~=g)/,y N_A=E?D> =yU?k?pK>ľ0*>G@$Կ}>˾͇ᚔ%,?7??B[=^m30=CXF@ ?ܕ2lFfEs >N.e{=ǿ忰@fJR??9S]BM> ?A]?.7WTwAU>Jfn>>?㒋?T>þ5[W>A @$?W<վ:.?U$A?s?"T6#>Q@o=A?5JK8jqЂ?"?u?9!>v@ !af>Ds@l׿?~%?#>?> 㽔hȼž:@ʌ8?\M߾ :X=Ƚ=`>@ ?4滩paB??b5>w2/T ?1<>P@: ?=9H=I:?$'ھK>lG־EK!?4`S@j?ʂ;x[=D>z]?j? I>>%riph?8?h@k?|s>>Ś?M@0@׿t=>?8@| ,o0?a'{) A\s?R@ ?=/)>(?@л;?Xվ>g]?VG??ޗo>wՕ=ЩA??J@k7Ȅ$?/>>?n?;O?S->A綾 >@NH=t^mPڿҎ>龖<Ӡ?HeI7??9<>׮@s;9e>{ئ xK>bb=Ɍ>Nh?Ȣ}H>M>ݫ@E8? >K>=݄>E?><۞ܾq;k@gKv?1i:?/i?W?Ze?PF,z>%v@.i@D?cm=7p$|>8{@ {>N>3N@TD?GWȾd=?C?Բ?7- U<25@L3X(!?YOm wG>u3?o?( ?ey>/6%@Z4?8?t +{?[iP?NyY@*@?̿>M??/=?As2O,>񷛾pocketsphinx-5prealpha/test/data/tidigits/woman.ak.5z874a.mfc0000664000175000017500000004303012504317076021257 00000000000000A b"q`?0<D W2 ~d?-?zb3#@z)>?&_*+;s=,'=y?k@՛6N>p?dH@>>n?"h~(۾^?*^>hzF?#M?(?Yc3=s}?s>>1<;zw@?ֱ+~MS? ?g&U F?>?:?%<>->6?> ">/o==?@@>،=?Gk>1B=vL2}C>3d?m?%>1?E 𼃿$*F>.>ҩE>:?a-@ʨpb<'@p??:G?B?/꽃.>V?&NABO8j@A>O1>t?<?i?"5 ?"T?h @}49@m@վFm??˕?`?73̾-@$X@e>ǽX>ugpK?p?q?=\h=>b@ =i?_<>d?aһ?Pܶ>rr=_ pF6?§?Z?==J?>%=ߥ>`>>">D?~t:@ ?> Eo>4&??+?>ּ?s+^>Ш=xm?t?v>?k;;y?UD ?<?>[?ky(@n?(C??;q>?8?T>?V\>>C_s?hS=v龠w ?B?A?>K?Wh?k? P>$F/OhԾ*Ծdp>j?,?^?FK?i>?Ͼ>jԒ8BM??Ԅ??-gX?$ɣ&d(?d>?]J>Փx?f=z>Um?>*A?q? ?K{?=kF?kF?0?I*?5Z?#X?z:>T}7? c>L>0 ?>==>t >[?G>E6?3+?]v=T?juU?I>ԋ=w7b֥?L^ =I>ޤ @X>$d@@>惧@?C/D<\X>??k?nnIA.cG@ @Zl< ?L (?.eA-2? @@9>j Z]?2K I{?BGD?Q{ =ALl2ſxB@b?7r6?Q1P?'b>鿅b]iAcFx?K@cETyk@ R`6%FK=68\־AK|g2+@7^*i?E4>=mGAE*4?9 ?򝿭 ?˒w>P;t?A=15=?C@;<3?li?rG?|}#LAE俷2ӿi?)d=}L>4KR&? ? u>]KAK@x[|+EZ%?rʚ>#?8?,rA]?[ƾ p>p'꿰&|>=ݨ~7@>䵽~`@XV@:?KO?E&}Z?ks!? <-u@#O?n`C>&.?#jpKP@>`S?:E?A I=V~#J翍>? :N{/=Dw\@E]"?lq?5??<?)?Q?r>O$_@,g0jt?lU>ſ9|.o>?d+?,^A?r6>, >k4q^`̞k=⶗N>ց?fZ>о־M??>>62??yk?h?/s?J>_?6?J?gt?"O?3/>@>yQn?:hD>OD[>R>cO?5>>!=>h>?* Z?>R?5J?/!g>?=x3>? =G=?v?? ?!?+X?4 ?ĴQ?Q?$>8A`V*y kq,>$"?:?,=rCSB-p K,w:u43䆚>/i> >ov}>YBghA,.#$\ǿ~ļe>;?+Yg>gI>B<^]ᓺ?V  'Ž3>7>X1=/B6X@H}%W?$P6"T 7Y>tfBb@:¥1:?c*?HP@)1%N0Bs@T ,ۆ?m(LPp49a0[Bz?㠿)?$[?/qz&B1/aDBT>aR&g|?>E %7ֿvBп~9B晿O `?>ȣ)>Sqpǿv%N@>By<^YV?t̾"j?5NP$G:Bc^&S R"T/G="c1V>ǿ=d!r[Btp⿳p??վ"IY?ZYп,3`AGdKBigTW??qڿ#S?6"S2ֿOhCkB`@,x>WܿB;IAr,8B?T *i1!1Q &/xdI(ѠBюFXb辞 =濾=<ʾ^%³ȀM.BeM 9.̼,s$/pn|J\Bzcy;(@t8:9Ә:BB' ӹM="/ᯧ7&0пTZÿ퉞BZ?V2Yr?TRC gB ']>A>yU>@f[FͭBY ڇR׾>Wַ`=<+~矿ꦿB翬#u=>ߔ7 >P]OWZϿ\-B^/-q6>=?kKd.?( -Ϯܿ-aIB3>jxCJĎG'ȝ=B՟?'S/+lsܿr ̿#7~0t+@sVgBd ]Z pdx`>8Q)!mn:slxBBz)B(j`zl )7˻M<IľJIBи+P,AsW҃ =q=d;-K˿}%BEgY& ,4}T[ſ/K=eBR}Bs*=.r7&K=Pǃ9c+Ҿ[bV쿳fvB |`1ۿ^?̿6Z^ŏyB뿈 5=J?Wb$:$q>#翮kwaBehQW=v ?TUW$|_xL"EB~!bsM~@vDѿ`6e- Bzy c|O?牿(뿗G?EL!Z=bBq |HY?a/d⿼UgnE>SpBl_w"hإP??|a~K*5tоBh1v*SlC>ÿϿp7QcU&EB\}g忱mʓ tcu5vzѿqBNυ>b]5?kdBKsǿ:Qd=^ 0qBH[0>?z$?>ypCݿ+<>BfgVBB=?F@i?dTx_kӿaNYB@h?,@$??>s2`˿~]^\ GeB:s?@j:?JWjx S jFfB4O@'!V@]S[=˿ɛCaV=N3B1?R@kt?nJn?> rײ>XWrAܲ*>S>?"4#d?@=Ͼ>A:?Gk?>f='@~W? vqt?HӱA%fq%?e?o{?.i?Es>\?6?9,A\X_@})[?z>CPa?N>㦊>U>0#q>xU?[FB칖@/? lSOn?| ?\k?@ F?'ӉB us@U =ȹ|>?/[G8h1?F `>WB$=@?k6ҽտ́ο SM տGҾB]S{@yO@@Ôg } þ4)&_׿N!QgB\2@O?@&#$> gMu};B[䍿@ @)J-H!IWɾUWasIAB\ ?N@;xϏX;nF\SP8E7B]_ݼ?RF@]?myPI=4k1-NB`׉!?@Kz )P־>MRBb5gi/?_>ֿCABj?a$`hd?X2 鿿оwʾxV>U:PBm `?.:>??p/?O!d2}'DO?+vw=,Bor?pbb?ɖ]/~=IUۀ;a,?}OoBq?a>N:)?wj=9 fz+`\鿟@>3"BtAYZV?Zh[}&E>!t=K0Q[=Bw/l?)G.l\]k?%5T-꿩B;g?ֿ?Bzr>xCo!7.9?H:=;ٿ0]ÎhLB~ݿtي= b_3ir?>moC˿]Mo7mB<}7_4"Gw?7?+bJͿ왿避uGjB,cOj7? >閿,P_W?B: Or*j#eN?g>)?4ֿz,R].UB,)~hsa ?B= )zA鿲HB1t쿜iC?˞=%a]Bt3X-V\n ?=]O@b~%.eB#X_I=z?w>D*p Kwn]BK'qtY}?,x_4*nvRqjBDLLVKey? !c MZ8忕%#B$2_koLaT m?!1>{޿$ʾ4KQB/Or<|x?=MݾӀ5繧(1Bg-*o_c: ?D?$$=q]?7^BOEpQD?W>fg>Fod@' B~ ſjiL|WRJ?;>t~ Zu 3B{jCp4f>TU<"2 |4dg vBxr俚*|r]Slsw=/Fim>H&Z;r .BqyTcRW6uq=w9޾V >,ֿy;?>eCoBe$?q%޿oD @>X?(\<?w B[q?TB+Ia)9gy>?bǕ>6BK@8] 9 iр>C)?T?dl媉> cBf7MCD[4XVa3>>{>ޔe龆qiBU@N3ilyNy?\?ւ?ٿVNT3 ;A@)cMV:)z9@JW@Z@K]J@YR% Aw@n-a? L#W@_@@Ae޽QڝA8e?n6vt&@ @@ @3 %?!<@`?YD>EHTYsP@?@)?->frT2tf[?@̿>2um#. \59@@v@"V?Wu?' |.v!?{ZA @{׿8@ oG>9>?Tl?\> I&V?3mc?Nþh?xUBGgk Oݡ e@Oz0V' տ>B',Mdp^\M @?=(7wt?M3_A>bw]i5‰=2@]@ y??q ?ޚLAiHk" ?E@@@G?$ǣ51:?ϿB5#>;0{ׅ>1?$BtG>m?jP?9mL7uBwQjJmA\U>*? mbgت@8''=jBmn# `^;Y,?g-;|3{'4?sBy@/iWҧ BF*I{P<䰿?L""=aئN=UH-B|۵ e?GߝJ>'Gt"ο!OB8r~H@?'+I9>)?`?CB>-olwxuڮ>Y>꿃^ݿv0B~u/e>`ir>N6.I>鲿o|Ggc8s?ʾRu3L >tEaAvĿ:&EBy/? >ج~i>¸d*g:~M˿Bu^]F?>̨|+YF!>w 轘~$cBp3@ ?b忺r/2>Ck@=='xMBlD@BX?هЗ ɰᔚ%?"9?>BegK@R?L7]\= ?*ս?O?<4B]iRu@@gɅ=$:?x>'?p?S"6BTR@Q?d,V38`><^ʈ?Fv?'*BLo@X@7@SLd.-e >\x??0aJBBus@ @ O} Z )_?->y?.m?_ܿ B3LH.@V@)3 7i?In="q?F?I9B%1?"@rK@/!O2x?ZtY>%? 23B @=g@&@8.^&D#>;JH>W?lڿEAs@.?ɧ@;9ߞ.v0Gk?,#̿OzA@*@2!@ ]>2*s=O蘽#!Y2ʬA&[@0h@,C@ (WbM[< A?>n@#?g頍ӂ^}[7ɿ+lN?,>@>cR>;4~00<=<>؅d?"??G?d@OhS-?%a>jo1a#>"v>o?n?g?3%?Tk@i>?0bD3 !4lV~:#?w ?? Ib>AӽID@=[?Zi>Xd?B9|? y>\~>jA5>@+F?oLɾ,&? r?2>O<>АX??>A{A9?"c!Vi냿 _g¾B;>L]>>!>su >fBww"KB{=ݿ&he2a;, =MB(?.,u࿏`\:M ݭ =A ϲ>'U?΂?y>=$=m%3,F9>KSA' \z?Rt?}?|? `>>됒>3^?hA&|*ګqܾM7>3x ?>5_0S??Y>C?5A4s?4?"tnu?9}>l}?K~>(>,?#$f5+??Kl '>= 6B>A1muq?Wq?M>~?p?L&>35;? w P?B&>ǽ} d?q>Ǔ>?z׿'4?+ǾtrAr?7p8m>/>G/a !?.>n,w>I=B):?Qj??OC;$=-?ſi7.>wMu?Ľ8>EB2mտ@hwg 3iUl#av>Կ}Yo?XBG@C~?*YpPg7HD8sĹξ'6BY~)@0ÿatY6ƶM&42s>CX"yBs->#SqY.? >o'PPhkD۾.Bz"v}_iH澣t?B?0"X(Ԣ>ǘÐپ~WB|oh֠ŴnKjd?DB h.$hRB{Ŀ$S ȿOU% )?VAzaDv*׿cyB} %Kѿt*쿈kq? n>vi*aB|K-NJl k?H mzZ(5(=4B{>jɷ"qWOkZ?/9>,AE^hBzS4~kN4>j>6BUBþ쿜8Bp4?VPGQN]+i= >t>(R E,¿]-BVKB@h|.?j9oI$뵿| >1>6Iay=kB:?ٷ@;j<9Ͽ.:A¿ƾ1F?=@"ҽB.@ T6`@/##=2ē6>fp ? sB&T?޾PI@.<6? r9Ks5i忠|Ŀh;>6ȿB'S?=x@K ?/ֿz-f-ȑzտM!>0pB1e?@\ ?' grӿ5\ ?KgB=@ 꿡@PX;8c뿽lȉd5_Vl>&BF4@69횡@)pl Oh{Fp5ۿ{< );BMe@98n@rl;aLמe6R&W3y[N ҿKBT@;?P!@lCtW{+BX1?/?lM;uh>GqI[4G 1ѼcBV?ocE@r[)MmuY=$oD ׫SdBCo?26>P@'p˿eXcEwD:>V~˯U=B3@~(T?t@y&fAPƯ?Bx>iϿ_4B4@+?@G"SW=?b"?˿`%(B4qm@r?@S)v S-N{?`L?>쿪q(B3 @}%?@ɾy' U?!?>_犿{B1@:0@ @ç ^jlUEV?7>᣿῭B.@rz@i@glܸNڙ?j7ʿB+H@,@&@4=n!*GO?X:|KB'@Dl@H.@ QԿxƿM *?wlJ0YzϿ6ZB"s-@@O_@$@Gnq? T9cBZvAx@|`@dn(_{? (߿4ClɿBlAT@p@Ah;[209<ѩK}j?" z "y%BA'?@G_ӿտ1.Uq 񏿲o0ǿPA@nA@7@?-6ÿ -nh*?zB5S@̑@aC.> Uy-;_,gǿcR›zAɫj@)@>ÿVt5lk>Ͽ@oOA2ĸX "i~a;RbY=U]>R>Ɉ3Ah>~.#q?=?}1?L>࿃Ao>R3q&vFg4?4?]z"@?ƍ(_A} 7#侅,?\0U?@2? zBA 3.9 N{m?w?BU@?g=ݯ9A6$ n=;Iy@9=?|@G4[?ӎؿdAL Jl $)F=kY)?BY?Х?",7jAI{^H^ ?g>)&Fھch>$oAv. >lAv\f%?ԼY>\TMq 1HB+HWNE,?k/f SW>z(ռϟ B1@?p"R@H?ɬ ?}J*ȿ(Jz{:.B;j@q_e?] iʓw>pƿGOfWBE@Y´SS#P? a L+df?[WTg BF&@xxƟ1?c@RGi=[F>tOBF0@B ?Ῠ+];*hD>z}fBE܇@>2?lNmRw~\~Î? [BB)@?t"6?FܿUs!bݵ==a=>v4VB>|A?[~N>tܿMнj>]>)tB:Aj@xe>P'Tmc>3[>[ B7A ;@S5^=^ѿhn?h=φھB3A0@náS0ĖQyQݿ=>1۾B/@AZ@tM(PҦ> gB,_Ar@~#F-ydy%ˑ?%ν }B)ҪA @5j嫿SS<;J]>1WJ L? ЀB&ZA">@k,Vbly+=?] %B%x|A)@oqX`#]׿9/StN>9K>rZ 'xB%A)+@rweb5@4T)Y? hVPߒB*A"o@6f&G2cȷWjOʓ>>8MB05A"@kȄ> ?"A?4>@>%!+B8!AnM?|m<?ۿ5*~ O4=F+?h~;ABMq(@g?^w;g1ۮBI?'FBS}V@ :n\?kmB Y%>]c!B>()ƒgBY#@kӯ6],}?zF"g-R?(TjB\@[ u=!h}or܍? o^޿NոvB]3@p`ɿȗ7R@g4%!?0޽ +ÿ{B[AF@'aѭX#S~L7>$$.ꞿBRZB[@ϸjP**>⚝5?dE=t=VTBY'@ ox$_r(r"1uBWr@`,;@5wt?u?.x@TͽLYBVT@xsՃ@4-?AJ?8'[wؿx!BVx{@0@DrX?\e?z迆 2 zoNBSv@A΍F@E C>?xPq}W?BȰBQ@-W@``Z>?ŷ L`BBNŞ@|B@u>z?W1Nv*nBM@e&`Vq@>?e8.84IfbBL@WL/B@D>O?p??# *é42BG@Q9@q?>>73~BB@˃꒏>J?-þȹJ/:(B=o@p.̠>sx &?⾺? Ѻ忬B3!@ >%>{s?ڐ ?\\?DB;LPn"K#y~Ŀ-%B=~@KA?ԁt!O$%p?tо\?^)' Qh˿OBC@-X4@\?fs?([>zQ!% FS꿋zBxj@SX@\*@g}9@atE(<˿ Y0~1bX߿d;B&?'p}@:@ucM`%%a>Af2Ta@Q?i]N:>˼o$$oڱ6>`AY@M@6>$=И>ś?rZ!yN1djEg>E"AʷYLFg>Ag[r?uy? ??=}9w?L>A+W? ?̑?oͿBA>*7?X>'_>!Au*ztêM?:>սW >+#ܭq>=A0C XL? 1#K?GE,y[*֤eD/>5?oA*;%??]Suy>801׮㔹?:LAtpq5>?cC?I|g(M:޿̙X?J?NQD;ֽ~$ؼ?ś?/AX.r@H?N?< /Ͼxڿ`ʊɍ?^C#CFAg8 ?7?uzT?3>* m> jb?>8A@aE@h?y>?J:pq>+%>WW?EIsA4%s]C@{l9?{xR>lP?h8iyv>Q>4AB=׿1p@S?6F嶾 S|]Xd[Cn<ҏ?'=A<5?@GH@;|@5?ݾu[UW,ʺ?? A)v<@p@ N>i>si?>C8,?@?\A,?]9?%H@oH?/> >ՙ>CZA5?<ѿaL=N>9A? 6$]@RY@4B>>,S>koJ?L?xA ?ekc?T@1??Y:>@[m>ۚ>5@ʿE@$?p)3=$%LIb>bLF>?ga?X0AeP>8?j@s@B?懽i>zm{ܘd?L >Ț> X- A_VK>?F@=A?]?`^?"S?7>vy>$>7><V@ J?uF>_\6??.ϵ> f>>&8?oG@m1:z?dc?;f7f>Ǐh?yJ>E?8K@*Z?Bx?@m5> j<ء>?%Gl#>@{¿>d?O?=bSb?+Mt֠m>D5˽|@4'@tb@KG$@mu?>mcW??` > q=k>OK"@࿩h@O|@ ?b?e?2A=iY>?>[@bIi?@N?֓u<O?X?)u??K>K)@?5ڿ??>>@*@W@U@!Z?b>p>*?:rb'D>w>C@9@??& {?kt?߾&H\?Q?`zpocketsphinx-5prealpha/test/data/tidigits/test-tidigits-simple.match0000664000175000017500000000231212505034521023204 00000000000000one one one (man.ah.111a -22042) one (man.ah.1b -15261) two nine three four zero (man.ah.2934za -29271) three five oh (man.ah.35oa -20757) three oh (man.ah.3oa -15441) four six two five (man.ah.4625a -26494) five eight eight zero zero (man.ah.588zza -26930) six three (man.ah.63a -18121) six oh eight three eight (man.ah.6o838a -28095) seven five nine one three (man.ah.75913a -35654) eight four four oh one (man.ah.844o1a -27667) eight (man.ah.8b -17265) nine (man.ah.9b -14165) oh seven eight nine (man.ah.o789a -23931) zero four five four eight (man.ah.z4548a -31298) zero (man.ah.zb -16153) one (woman.ak.1b -17649) two seven six three one seven oh (woman.ak.276317oa -47026) three three four (woman.ak.334a -26853) three zero three zero nine (woman.ak.3z3z9a -35400) four eight zero six six zero zero (woman.ak.48z66zza -47568) five three two (woman.ak.532a -27690) five zero eight seven four (woman.ak.5z874a -35162) six seven two eight zero (woman.ak.6728za -36725) seven five (woman.ak.75a -22737) eight four nine eight three (woman.ak.84983a -37907) eight (woman.ak.8a -16000) nine nine seven three one (woman.ak.99731a -33245) oh six nine (woman.ak.o69a -30350) oh oh (woman.ak.ooa -20281) zero (woman.ak.za -17031) pocketsphinx-5prealpha/test/data/tidigits/woman.ak.1b.mfc0000664000175000017500000001601412504317076020621 00000000000000?V>eN?5:?H>?@A?Þ/>y bq!>~{?vo?hE?Q>=(>i*>U?>|,t?D ?S{ ?>m?J?l?8pF_?O>>^=W?">öPBΒ>zNbTr>&?v͊> =q{ |?mbT?@06+ò>{U??L>lUP>e>M>v)?M>s=)e?/{?'>?K* >k޿-c>\[=?d&>ɿ^;l7>{r=?FV? _i?%UJKI#sƿ<9`>D>>>D>r=? uEW E>B>ǯ*>}x)?@R?֭?oE?qL>F־}A{<1>f;uP)>˴Y>>6>3T(=? =>Z<Pa?k b?YK= Fs{?+wd?'?V"V=Ql?}?:1?N?qc> >[?:'u?>>q?Bo>?P8??YO?>>Xw<1?=׽bke&>]>:>?A?/?Q?q?sJ>tRze?[P> ?qҿPЦ=нy)?j=/1>5i?Z>;w?B)na/>0??8 I"?QM?p?Z?:P>I䋾??O??z >Ε>}6?" @?X1>?>a%]? N<9]?>lpgt?Q얐?e)>0CΤоq=Q>?[f?;?>.P?=R| ?$?Z>v=>~bľ:>qg??3X?(B>Oؿ`%?d8?P? ?>r>gy2?O>4.!O:?(B$?NB>Ǧ> E^?(K#?]?&>H?~f?SI?c?h>h>s?|?{c>b?X0>z9 [ }UB?T>%?N,?p?W>6?a?u?H>?qb? z=lI>N=X!?HSQ?s=*?vE>: m?r}?/>uߤ@D Wb˾ؓ??OA~5>? >`#V1PAQp8|>MK>#zMRѾx>ϻ3>-0+뾜oA` ?K?|5)Z8rΊ͟NX6>(A=#uO@t8@E޶{A&O%ƿ Ŀ/Q=" ?YA4FC>(?g&٬Ǿef=h}?=ɢAai?g.G@,e*-<= rfe?aG>C@{S??4??n/=7H?%>a?'~ S@ $??? I׾=7?Svuq&d=@ ׵?ư ? Ŀҿ>t?)[ { =%? u"Y?C???@Lɾp??0Z>?>-H?4?ě+|??yr?eer>k>:?̧ń,?n쿤?>&?i@l> +[!?-==E=@mZ>?H>P?(?%>LV=4>Z?꿛C!u8 m>6@q/?h?hqO9>>ʹy>c7ʿPp=N@2?䑪=5>_+nj7!Nx$->ɽ!JTdA?@ ^Xg:`7ZVgP yh8R/A7@a@ ?}^>-.̿%ǾePC=HZD Arg?>?𑼒p=#>@վɲ) 5& ? -2ZiA6F?">?,E < D޿&? ?)A5_?G\?O?_p0I'fBS? <3˿VAx!8>8R9r $5ˈ<8 lJAFK?(Ƭxv@@>߿H=i AT>4@L? I>ǿJla>ܿ?>zB@ΕO@l\a4׿9qj0^3Aj!ǿpB$HA?k[u @Taf H;ȿB/A.Y?O쿹-PA>]?h=?M__G(pB?OAp^w/ Pʞ)>Uzrް?-]`!^9 zBD>A⿟` *?P̿J>2wE׾Nc#BKAkfu>?hk?'7+I8hN `țCzBVg@إ6$2q(bt?ӻn'q B_rV@G\}9kt~?koM? ?u"`B Bjp@b=1?c?1P TflgQrEZBj@dksN?oթm#,o>}r.Bn-@;A{F&?&,[m⫿c߿Re)Bt @ [IMR?/1ٿ Dz{Bu[?>GS2< ?ӺjԿ/{VДUBw?-0Jl?E8ӿ75ꞿKXBwh?SÝ@HDoR?1I*fB)6Xȹ?BxƗ>K07)>'6& XZ-B{,qbx?0/qBT>q~b( Uv%T_B}Ͽr0;gԿnSԿG5OUBE& 1ĺR^۰5пр< P*0k%BzCDӎGc\,jJH+X7B+h+d[߿Dc=IKBTG8B*}G+w栾lY.jD_c4F9v}Bh7kb'q ]#r忤f4#B][Rgj65>hdVu'ժď? 3BPJFh 1͉V?7̼!%8w%Bu3T\>?`v p2;OSB}1ÿ )?LhZ7FƿWHͿӿgB|sj=Fg2FgjV?1^B(!閩mj㿭/BvLiv?Ru3!?qn '_= U &bBsƕE]9֛!}0?WMgb܆$O%Bn v8f d@Z]WFDCUBeI#c266?ѸD'Ԫ)eK(B\mviO,wHH?#l ͎; s %v]BI=s>>?=@ e,3)?2j7g"Eo|wuB8 @? @Yr sKUkķ٬dSB5z@%Tq?}@zx+PKX+"%FK_B2i@A?6@O_!( tL#q͓h"pB9B1@<?)@k6(B<[V'oB.d5@9?Ć@y6e}A%F-s (t"ȿ8B)@8G?<@OֿwN63X44ׂB%&@??)e@vKaSg>06aAuCBZ@xi?"@ogAy6B!#^$KZ8B #sdB @w@:@yRNm/JڿnCM޿ai6~JޜQBn@@@UW 1ֿ*دKeͿc~rB@)n@8@rwq-O8< 1S(kB @@5k@YUzf{ K2ݧ6qW>BW{@n@D@@j9dߪyVˋO+Rwҥ_̀AoVl6L?j@ǚpllghaWHT>(ﶾArC?@y̿>=ѿ_OS>?OZ?l>AoY ?-E@;l?s2}E ?c?>%|Aa(?ڿ@c 6OV=Lh=vUZU?C? AN ,?R@'Rѿ>g>9j>2?g=?ARMp~@Ƥ>?Gejt,?mh?Q ADO>v@eFvMMr?Ί>q.3?iL>sozA;iG?@;:s>򦞿ֽňK>^~?A.hA2LY?8@mȿA ?C:H>Ro>c=u>l6?&2EA NI/X>!@OI?`>?ICV0%?{,AOcQ? @`?|?|Q>M.>4">T`<̛=g+X;A hD?e@W??{Z&uE4 ȿT>A5I;8@AF?6l?h.>fPFVqX?8?@ ?;@T??P?:aBj=>)> ?@G@?@5h=v cnؿ|?.= @Gz@;d@/Z=m(uTQj1h>l>zQ=^{u@V@A??OUˆq?p{e>)q@¿Sf??~.?{> =5Tr;*A7K>2=G>I@ #?)H@"]?N>-> U{;"4CY?"l@qv@1 ?L?>>P[>44?1k? >@YK z@,??/+j!,+?9Q>Y?,ĽA'-(?ZS@ٿWV>'WEyX>~P> A?#_*AOg@@>_S??>6,>cj?cS$~?J S[>>^@??(?WvKU?4>?o>?,>q?F @kMu?ϋ?.?#HS71??=@ Ƞ>&=>_i ?-a@!`y @m< ?tЩ?XY>I?!e?B)?^=[>r4@*?@?D?W8>>%>4 ?+pwr>pX=D@L+ 2\?ѵ?4??Y!-?J?g?mK=???潝8@xń*??O?-%>+?>?;Sh?w>潺1@'DM?Z:?+@?e( ?4C?,B?X>esd>?^}?0@a~?/?L? J,8?av=?e?*?Ahu?Fp@.H@/6sJ(CL?87?t?ݸ; Y?j>F?Nt?&>t?$*?"?&>G վ@n$qz?du?@?}?1?aQ6?ߒ̵>8?>P{rpocketsphinx-5prealpha/test/data/tidigits/man.ah.8b.mfc0000664000175000017500000001446412504317076020266 00000000000000L@M??>E%z2Zg=? ?[=`>=> ?@ ?壶?=f?`> $JHK=B?&پF# jP=PV@6dR??R,XпAT?C? >?=h>d8@A4qC?UR׾״?0VR?a?ɲ>@`?2>?Z=z1 @i>ِ?o=2{X>ē79>k>f8>@l)+?L>Fz>DE^Y2=1;>,~z˯>7@ba6>sQa(Y>Bk)+> ?>ism>M[@D8,M!@ (?gܾ|㛿 L>>G@Ke>QOm@b &?fޡ?Y{>7㿆d:V>>CK1g>0:.@^ԨF?y?n9 r &[>d&F>,= B@xsMJU|9CdN?&m^?u\%o@7z'?_$=>89ej[%~ >9u3>"XQ_1;@46? 憎*~C2Pܾl=w==@]Uu(?@ tZ>ſ?f>['>y٦ӗ@J_=? Q6<%NҾ>սo?S@:1H?zP/\;-?&@W_z>aP>b> >i?O'>۵?bG@F#Q>/FZL?.s=>?b>>Ҩ?9k@t*R?gE\(ucо_? >>@|d(v@ ]v>6-ek5?kH>pm; l @ lG>DH õ> AQ@n-Q?TS6H>i @FP.*\@0?׍dw^Z¾=bAv)@x2ؽ@?#R?0Ͳ,I^VӿL}:>Bw>$¼˧@te@ĿV?e1Օ>lqh>J\=>?!>Y Y>@2AvzXY俗c΂t=F>bC>j#?>ŋ8>?A.e7_~; }>8J>"?G99@,:?~{>AL !soC;?Xǿ߲ej= ko@$ ?vfA1mdA^']ҖzINb>>'X>ԀA.⟾jEI?%>#p@,B?QF?Ax<ϿÓnK?޸Q?Cx? cZĿdK?G@ok.?x?d?eP@$Uj@Kc򍾫;Wd?z{4E?оk@udqSo?>Hn;K&(>k ׅ?>b@=t#x;@j6l?5: ٿI=ao=><䂾 ?N=w$-2@">h?TKs?/oѿ>bM? u?=L>?g2H?Z>>WRվ"<>l#M>$w)g>?ϕu?M^?D鿨2.T>IH?>LI>>KB?ʕ?&Koo 伈Z??>G$ >+?fU<@b*8?9? WӐ??o?c>LLK?`@BO:?#ABA?0 z;%?!? >?3 O@?d 뿊T>bs?c#?"@? >v=3E(@@uLv?]5yK6m??L>%}? F<@T)K?i?&T6}ׯ>5?A?zV>R@B?o@>6/k?C>l?iH>Ǩ/?OfV@͡N:?'>6?P?A.྆?,BNKAźr@ f>BĿS&tŸ,?[k??4>kk>]߿BfA8j@@M?>G ?!r˽r>C?<%HA$,@q@zљNyd?T?->5 QA?>s"8Pf=i$Bn?x?@u  ^?!?\?Wm?gϋb%?z.FB)`??3@A~קCoƿT?g>+?&>޾>8%ØB6ݗ?R@@,W_[r:0?d?c> ^>ᢿE$BB> |@=@ez3\x}ֿv?)?SK?Rz=_>Di>B7 <̱v@@6sn^uq%?0;>?'>S> ȾMBA% e@&@Ds2ZT=1_>_?>x>ӾB?C>@@4Y)[>> M?.=#r?TW4B8汾Z@A@@FQQz?ʷp?o>l>ݥhB7Q~@z@Ko"G$]>>$Q?`Fr>Y>L) ? B1b@)(@lDޱ'=?z>S>?i>TB1 @Sm@xWg}`)3@y`???N^?;dB7Z@@Z@̑<ϭ Ϳ3W?A??#9fB(=z2k@Ks@Ok>ܿ=Uyοz>?n('6?o?Ô!=.B(BOw@N@HT}l>S?>ŸOg;^6B!~5@ʝ@vsdU0$0P>W>;>#̿a{Bſ{@u@?k\a;mgAy?$=`-8=[ܻ:B =@֌x@a) UyNFw ?b?ND8?6Bod'@ˢ@'3o$9>=A^=*>+B R_>@`\A YQ&Tz ++Y2?S1X 1AȦӿ(@}@GMɽ0 >vW?3h?=fuA1H?@@tD?5>wK?055P龠xC+4"@O?AY@|@ C??y?4,[M>W] >vt@~@7q?>Ʋ>? ?6H>D>N>[tYZ@|??e?H>b>Z>E=x?@C;ISO@g)4?K?06?G>K=jr=P'? sX%c-@zФDŽ?8?$=x4m?g=ȈL?]%KO?9C4y@7y 0W@4ȿ?`[/>?Tۼ-v>b"@"kc@C?~ԽtQ=ng?4`Q>8A?+@0>@Z=@+?+}D>qu?1?25l 7])\3ALd@>:>T>:H>?1eh>k?k>U> "!B ,/ڿa.8f@iGN>3-O> ;A7@%OGV?Lw? دD;bq?X5OB X@O룿ED8cf?}y2%a?U?W]Atg4ʁ?A@Ek & ޾@B5>aWH?6~@ ?~Q=Az󟻿-e@QLʍ^տ{C ? h >l>fA>[e?ReDԏ*@hS+Wh?>A@?l@/?Bz?vY@RK?Gƾ=?>3 AAx?@Tx?k?*@?* y.?9>vA3W?@|?ac1wrj?k?eH%?Y)>?A_?%@ @=g흃G@ ]?]osF?Y(ZAT@DV@Կ*o?K_pAxq@T?@s?0[ {?ϰ?ՑGS>8=cA??{@[@n e@f??z@@?<■;>jξAߠ<&j#@)?Ⱦ#_>?*c@X@5*Jk ?HA'l?}@?k?--#?(X?a?p R?("RPA,@0@F@x@ ձ?;?q>V,{̝H.׿>AU ?}^@N@i@1?h<>]>P̙Խ?G>bAu^?p@C@@-@QQ?`??,{H>,(ņ[@ݞ޾ |@G?,?h:?a?摿 㻿/1?A9?2@&|O?C,Ѿ?k]>Y}K?2o>%>FP?H@֏?@E??k?=?Ó?d/ξZs>k>4@+>2&@rd?@?D+>[?yg ?gVh߿C1)q@zJ@Vz>,?G=3?P?Ko?1@W@%?@J?l?n?Q ?%?(U>ѾKl <@RA`@'F?(6??UG? /]7>0>w.<3Ӹ@\4+@v?x >h>ߤ?S >i>a_,3þ?3@=X?>V?d[?> L?n@ɾV@,>?ˊ?xH3?*Wn'>rf?jt@?*lY?$;W['?!*='>?v>#ܑ@/2ݱ>l>J;_??9=?V}$Ge< >L@kտ?>T>Կy?܅?gg?\;?0qx=u>`@7@5 m!`Ҹ#??6/` >O>PJ= %@ꏿ̝?ag?> C/9?Չ?e=;:W50[@#@$9>J>-=F?x?,+?==NK] @cl?+>+N? @ ~?o{vc?7@& D?`3*?#*^. cWZ> >R>iTy@*?s`?^?El3[`>( ?›?hx?#Eh@5??oj?BA96>æ>*{>?lj?#> F@vv4s(6fk2ֿ?1a?"?#=Y@s)J*?F& 3#'??Hxmg>]n@1^?A&O c}Fx`o>=J?f>b>MU>b?+pocketsphinx-5prealpha/test/data/goforward.fsg0000664000175000017500000000074612504317077016777 00000000000000FSG_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 pocketsphinx-5prealpha/test/data/goforward.raw0000664000175000017500000025611012504317077017007 00000000000000    $              ##&%#&2-1) *$#!$'%109;1+.%"$"$ """.(!-10)-7;:& .+ )*#&%*+&&#12/&#)''*$ $!  )(0<1?>@IAB863()),*&,12/7123-1+24/,")4-*/4.-743-'12$#'&+) %2,0CE76<..966AAEMOJ;567HTDDA<FC57>8=A<?FLPHSXRJIHEHDAH:1=.# "0*$07((),B<50:?=A18756/3-+0'#,)#$& (& ##0'*+/,! $ !                     ""$ "$$*'1%+(20).21)/8*36&%$2>888F@>C<D=44@BBFAHJPTMGAIIC;APFNLJPMJQU;4538@;?FHYSNORVBA?=E@PEEMLUOPNQQIAJ>CDCWS_YNQRHCRSQOOQIC?J@<C>>>FSQCTM;AGE9>>QWO`aWZLPUS_bkqqgckf^hhid^jb_dhpqjgfdabY[ibhhhcfzyrmieYWZ_^`pfbkhokji`\\VV_\_a_^d`]a^TT]Xa`^\QYZbYXVLHEQQRXX\IQJCVFXZNU_ffgijc[W_gcZ[T\ZLYRLSXTVd__^STUS]`Y]\`Y[ad^]ecbZ`hcmi`a^]i]RX]bXYSTZSYUTJADHKKEFDJHEK:2B:BE9HQRRMJHD>9<>5C@0;9;9.<:56;8*/4-*)&%"(        "         $ %           #' !&) (.%! $(,&(+*0($('(.+10*3863064-/20/7=027?;>@>H9:A9EKNBCNCQVPO_ZJPOM^PISIKRYVQRUMNB7>FE9B:6@;3850'#5$#2(.- ##"+2;8.)1<40)''#'&1,*7-10127B755>JA?JF@FHI@5HI@GFQMCHF>?E@:=:8<CB:55<=;95&'&).-&&.,*) (%!&*01-2=<7588141#"'08B:-7/ ""',/%''      %!                (! !*(+'09<85;3.45-==-606955;=AD<0162<89B9=DABGH9,47/20$..2/7>*@>@I@CA>A:BPJ86@7BD:@FDAHGICKG?J?=7984HB:F>@@AC6=89>4473864>7<94>;74>?5<;.4;/)3+-+(-%",,,"",&&"# *.,.&-69513+&+("0==2473988<2&',21305?48:,3-7:.;=5FFDFBF=A=@?=FEQRHKRVTLBAC@FGDNLAEF?CAAA>FEFIEAA:/1696FHDRIHPJ=?@7:AKIDJRUSQMN>9G7FSGTQNSLH;9;,C9#5585C@63./!*()%')$*.1'352('3/6%2-%0./G?.56><?JA0-;;?+(811%(4:*$(*1-(!"A=6:4D;*6:>K0&04^j|RUK;I>JB"$Hci8P(&=)oQ$ $322 % '  ,       " $!  %             '"#*##$&%!'(&!-,1(1! *'                              !&# $#"+'' "%#')"           #*B.('!#%,!               !   !$ #!+ "-%$$"'"&..2;:4.320.,''),-15..&,5'%-',&/834$)!%&%$07612D<376'" #!$%     "$ (,+%%'%+(-#(1651;73+!(-/64,6>B?3<9)1876-)/7795""*0$0'%)17-$*#!!#*/+**)*.31$&6;:;;67:87<>-!"+04:1,+5/ *##''(%),',+*%$                         !  !$% %'#%$)(%+.0<0#'(&""'(*)%'#! """  (+&-26601567<:2849B@:56<B<7<F9478:++'#(&*+310)'%-.+.,4::2;?@>9MC@QMPRBNbe^PI=EH,7>A>6:,178954,)141&&%"(..56.-'',*+-##.,2767.,#+1,0==<A9>>9DRG7;*1A<,+=049,/2,(..-&))$!#+)4/3/697=0(!'$'..'$)'''150/*.6-&0210,2:<@=B:#17)//-1.040.)&%!'# %'%&  $%$#%&(# "-0& & ".+ '($(2);:"$#.&"$ &(+&,& "*'   ###                    7001+1($##8,1:35     9V'"-horzWZ!Dzlzf2_QW[cV8 3:||n3=BV?OgkRs~()l\ nP\k#Sfn V``ti{.Xk]4r(O*OucS{_L0p1(^U~i)-E3B tpmg`qhQ~8 ZmV|2ba$3' Z!#>#3 tj Lq@4}|dyCAX 7I4,/O v QCON6DV OGTmf$ 4 L v u'xsRdflWD]6 :$.y~r qH 7 `  ) I#/U %r@ $ D 3%/sUMEs - !- 7ImbZ}BUw>3j\GRx*@ vFV47" **JE U  (l0[1kR j A + % C W f;;1:re] Q RM?\f?>C^Ing[S"#"TFqSz4%U0I A  I )C$=W'c@u.1}  = # el[:GZ{C4:46!MAAzRAaF1GD<52Of>/-   Z \[1ANz=]t-%5Cxc2 mUH4E@o kBqW @Z^8c[EZTe'I&P-BVd@l58 Wv  N2 Idh?nVH4)cX?g[\})!}Xrk~=*Jh|E0[Tqs1gdtrTW&mJ(F qpz /d{(AVO(Y;G  a BZK>I2Sl, +=|a1eJq!`/9oc7G%cFsfc@$ UG . d "6uSH$y5mi6# <  XpYH9nh-B:^_>g.7obf` ]@ n ^k=b`z%g;]Ul YPriItyI+9k/:],~5vjc ( <t { t|W4Qm#oP7b c > =  %v!m 4v~ ]{YE=MD\: - Apj  \& 'IfM%3F->#' % c Q I $ p@ 7,cIm{lSvX^(S% * ] ]TdBx RC27uh=6Y  W 7 C 4 ?H!i?tO;{[Hd U=tO@:YoygA+>j*a2 ]TAw  L GEf{C 6;KU6cJap t K RS x]#2vNLO!HkQ8GD9^Y_E/.HX+  j   ECVFS`s15)v;HT>@5e r {X4y + EhCc}s![;/_B e ?EH>EH8,jzSwX6MVo lku{[1x~t{*\xvH-*# 4WshsTyB I)3Nsd^t-Zas #Vy }9"^ka0Jq|C,5OT>Z@jJ:PyF)zv#0Q]#a^^B'vrR}.tMALb+/Wr4KK# !qj-CxyMfkRaB@~ L%9mZ?*EnG7Ky !7Xd/BblAq\.j0w*mP_LuT ?cU;gcjpjUW7K)~O>Cw=mK>Lyof%:25y%UsevLQ!S1V.h.,LoZ&yNal T0&'^Nn/`-H5`u%wk /5OA4)Wc-0qFL~BC9@`N#6e-15x`Is"=r`[-vG,r`d7/mKB$ve@dMVV|\x};k0>"VaD9hD Sdf@AW\m8.c0ji/'Ivw4*GV3SOaa [NTtX7%19EgG>J(4qDxezkQIr.C}PD?(rV %{R/|P'u\ #<%,DSY+|HC"C("y2Ear7v d3]{QC^~Wp"14 ap SJ"qB^lbUv8tsE)fulEOxBLQh`F.Q$ _BOCGD!r5u?1,cJ]" k=S)dK'gVy"<>~|EB G/M4F{"Da"O 2%lz&%[u(uD^%-&79}xV~`~v f.xo_/@&[<w]@G%T[s1'yV#j2n_(qTiphl&]M?XD Zlz'`N5w^7I VoXzT%*:)*L!rohLT;1?zO@k1 #y2~cZT  dO_ik}Q49A<s3puxqRrHC}:9Nr"in6{!v:nEt:b,'7/wNLw|x6Xw![{V|.^z~SvzK2S.%7KEFzpP"Y=8jK i)Mj--D>8hQf!KrxxpRyYE5I]sW "6 D8#`X]yllRksD++=tcz!.-I<Bz%qq^$EcU2 Q }+Q+q<')8|Sdt]P(Q"z $ 4 I -EUK5s$^~=rv!r;[ V \ 6B;F<mUha={ g4%|63oVk+ -PK f  ;VS"!Bh& d Q } nt{+ V #:<  e k e( +vabv9hb#f}pmr1 ,?Uv N}BY&bX18 s -  n7fP3up, # ( Y+yw3XEO2I}L81l>"POi " O%Y]`.'&- K1 Q W-~46M E,on , [?:H n.tz+ gnEj MN7qwA;XF.[ <W$T.1 R #o C  #R=4 `"D@9eAC'kC7w H k| ]:UyX$dyR!sJuIS,GAmLC ;aU  )-t;9y3q d  S% F\aT qVe1 T O%" Ix2C'FYj\HO@[#kP4OS=JfU rM<F 69q!}B'SwK^6AF CZ ?"`(sr?1<H DWYvO_-4>w}A 8NE`_=cmt~e4,1ia xv^ZDK R*9,Z? %  (SVaLM3KGF _ - ULJMS' <*f_P/MI/i-k>/M,X3&lb;nL' Fi 5 G/8 :-^++T%5? |_d ' ghQJI?49u .k $:Sm h;e3^ $. l=Aa0r}#\hg(s%x R  V {b_ZC-ag z cK= rmv*KF K0#C|  ^v-t ndQ"L1/N5Z 24o8/g83 meADZ Ki  E9;JO n . 53H lXN'CpA%l 0^1( /A` 4k@?T;ml}pm[ M|VrR 3 _w Txy _ WTt>] H | +Yb8vx?'L  eB|'C  6 lElFr+\U2F WaSyF] HXh W$#7 n $39 .*;MbE! W  <`KG~-;n+s!ae" K 7o l'G +m.eLSS?y5QF9:$diQu' 5 , K8]/O.}J +>d?  x96o<9S&)t8, o t b j3,a]HnWhgzL `uxu~qCSocfunhDNVL r  )p' 4#*%p5O9@7  V/5{zt&GZruS$3an/yvnuC 2dI2$=Ja|#x)x"<]%s";+a^$A %d6Vh`f{V'y^x`/A IWifvL4(6Ns( zwqq4um|J2S>Y889H^b- i;;1FEELq@M $@duQk(h/3Yza[iCqEO jI%PRg4A4>UL325YN"hO*oOw8c \=?FhYdo}Lz^8!  Kmw:jIHXwiE9UWI"^&v]:ow7-sjskeV0&")4+ M h<18EXr~}Y28Q\cJB.7Ddz W]<Rr"(~21sX!W|s|%VugGL@s"0iTnP_ Iyrpxx9HCO9j9o{rE*1>$xe ]:ES'|R ,#vsr:MnAE|@PG%{[#,q+W#G;FL.;Yt|*a1 MF VG$CVn 1+@nyunxU>G3!B,2QhN\ j^ n7w3O8` 5sn>5RII&#VZP"T@e5HEbj? Gb/ASK(7_?cA\n `A8_gqmV;AKk\T`7"kt;I%>S xMmO< Cu$m3FH4tD] {ki]\~ JYO,1&}dyO:}c^X^A;Q4Lmg;pOyh?{+27~<_oVwC'jEY5x."!ne c}2|"*v1_pd\9&bd:/=ynjFtEP-- PV(KcX^(DQD [XUy3:dO5 ),<1%v!{'v$zy/r.Edr'cJx#a\:iV&p[%$173 f7m(I]Q;cBi!Zg1|luE]%v~L#K~cgB \=47Fvn sLxP( tod_6iaYv1rJhY?S_\{d Y 1UmVoS.g:BC zh;NOq-.[3z4`?eR9y{mQ:o!+Idr30re4 |}Q}acy~-^. vCMiy.4I ;> 4MYKHk+Ta7)WWykmI e1; zKi:'z\`a&X xhcLlJDv"S/Nmd.y3 -,<pM-a a7p<(*.+L4r@X%!$G8eWHlq -_GT 9as.uDzn[\fS37,lF H@J=V/-F`"EFmZ8{!!4Mnf/dX #s%ncx@?zq_EGWrXd"wixrx?4se*/NNJ cz[q.imD4a!3k}Q, }r .I6&+  9GM7  (4C>?PXTprr|sqf^WMF0*#"!'=C6700,+'+7161   wr{ &+9IJ@LIEOFFB?;79-%! ,/(.8/4=;1:=9GD?FB4/1 ,?"0(   '!' $1-+,(%!&+1#'(   38.(+%+/&-27>F4#C./C<A@J@OeSJO@HWJIK<7HJGD;<EH>@A=<C:38==.1.2<+*!!$   +!$$ (9?4304<;?JP]\Y]`bdX]h\\[YXXegYYYUWPLKS]TOJ9:DOSSSKMMGNNJEB@</()&$%-0).,*3..$*0%     |y~rs|z~ys{ Ns^f5G 7--u.P<1 )6 * ' "-#(-#(*(./,  "# !$ &2(&#"%+$$&)/13(,'%765A69>433@:89@GEMD=35:=EJSB><2@<LWOJCLR=)3;<9:5/285-21.8>60-.&'$(.(*,$%0,%,!/18/+;43<?F>77291,2=FILJOBB@9<<<DFAC<=CA=BD;6BF4>B?ADOKJOOMGKEFKRSXadZQTOCBLWMFSDFWNOVVNNXWIVZWcYTYY]jjcq[gp\RIZ[TQS\Y\[djdhfUMMSaecaababhgf]bkhafhgnprnmjhb]ha[Z[[T\d^[YWMD>CPMFJDIFEMHF@LNLVNOKMSICEBA<AA=;;?=:;B@:3))'***32'.71203+"&!'/)+$''!     QX-l4>PC$/;*W=k^ss  8P %+jf5&$+0     <bh8y"(}/O'/!8&H ib)-?E(?P81 ]PlgV]P;oyh+MPEWm>3W/= {RWk@t!A=Zt@z" HpwC1y 1? )|jNxh*AP#}Yv Sm?xkSrXF1+](N'?\S=eumY) /k=ix>|qWc,G]E9w^j.$n _8jX#V&-RYIxOdT%ySb aI#&@"eP/^>owp4se[U8FUP0MD/kZEMHMn fr^ g!G% O\zN )\_1y/9 I2 x _F k  J a @ a a _ - < j $ @ # \ e  B  z \ l  q  O  E 0Vh n G hD?->f@{\uy/ix[ z u~  Ow!1 _c7o:`l $8Z?O @$N{b]cyl(ZOt))@;NR+R  xBjFW"sN$N AtE&zd <xW9/GOJ|rHDoh(VZY.(eyLL%$dAq@WY2BS,fRMl.*3,&dCWnl=i\N_234e#{eHQV}{Ni{BA;ve]U0$|*-, Te74o08GwPOUXhpmR5!C (P]Af~wXl;67]gGDQ'En@E<M /Pk/i6:m,^dA0{.~0_"LL$losX&X Se?x_&*%hK @ " UF! ;A:'+z7cI~Ye-OKq>y h2 t dNc7Ixk.aGR@WwteB 'j M`89~:s  ,A'.iQILFQ,\M^8 #6l!48  MZ(Yx5Y2zUG[xBmV } clO%bH g K 3;161@QyJ$zmysx   X /f /#Eitz%k; L?0A"> _]= r # /JM C + ny$o|50@V0P?#E]:B2@ H \*xmQAl]MOVlHR!w7ym8k(Qt*jhh vXYr+J g-zA#V1~<,?&C b'nWX-.b09 x  C#J# UB)Z4[5HYV 5/ OM) o 67}eBVo!2LW$!Lfez>[P1 q%aG# *'V}ht?0_<\<G6j3 8l 58}caq\A(N!] VB&0Uwh6j-:aeBMa[lA.V=y\D 4o5 3u2Y= &1_~E.Hi6]N 6xyTAjO[A%n f2*]sEz E6+QWO3b6~&/^W2a/] [0q!>n`W#ONP R@Yo? =q}jK HA6}J? "6[e{K"2k={'H Kcnv@[Fwh g\,| 2vL38&UTt&zYn:yPndb|gNqRz{R0*|Nc lt]cZZ87f(q#:qMlp_/cZ1RceOV ".#XE%wsQ9^/bEGIsdQ;=z>i53\2$vw).VoH UY/Z]iVa_QM@N9K%R}(lT)(C?g|S3YJ<1,xjmW&j u&Q"KNl4fC_uTTY/Ir~-r_ 0T-pUw6nrLw7|Q WYw; n{({ 'qYxoc j` DZ)>~OG~L`!Zy!_PFx\dGlH]-w>1|AZ4Z00T5GMf01C.M AP-}lQm:hw#$q? p`T|X6Lixa&t|\gK5r{ l[Ku4n%x h%;Qk#5N,r{BEeGb}RR>!qUkaZXPS^*-ba\/~|i&%C w;*l8'HK"7)~4{lXTsURqI N n+'aoA`y>5!*9q<-`h1OKAkQ2pP{-9hEp2 ({Sm jJ6z(G& V OeITp pF\4mD}@dj+u%_ ptXh9X,XaJ!vV2)e^G?44HMI@_u{I'w>Zj^>Yu}0`+ZGCx:x:Yj@w; gIi6nn, Pcr3LBN? DaZ@E(fX0(d)gk`Vx$''+N`W,,!_$Jr[@W9S_0+'B7y[$XXwtYfm9r&[r 0 ;]LVQPCtrc T|t"`.g8C}OM]U9*i=9ImI!pR:^!q9ZKGj|$ &A>p 2lHgTi9DUh6NSy_u1<VWm>;oQ=& Gn2pAb38_Oemk:rB7BYOIWS]Lh 5 ax)C w%oA84#;IytOqGUku/Z[|{~.BT 84-w %+|P; -PdFT{E. -^&w)RH!! 0!:so9.`H8}6 x  g9vG3l,,IvS0& 8B Ff,N!g4yQ Di"4X  %wJk(kgIK=&xygv0-T\<a]3"p*XFbUWT8\R/<7Et%hJI ^8x$^T-o*|1dm9v ZI [i-fg /J%3igMr2p0iUnFCIT77d4bp L}UZ'/<R58g69wRq+NM<"*dw_xAm%{".rY[[-m t _z0  :j|Z*Vk8e%)4-AP1t8 t?o*]4 &Zj~g+I7tkau]L]AnNP' K] ] ?w&"t*4w.&&yd| c.[nh,#MLBSF->H5 $PoR6oVrogj2"bV?sQ3,`6s^|4aJi[dr}A p9 r bWfkg]R,;DDh?l"5 VuE(!bf;j 4H^bf}+x#=0C';M-#*u0Qsmpv0A\Ok}9^ n KA P cX(|F rxx_#l=oD~ .4<'1}jAKswcbS?Jx (QvZ$+2''@lNAsF,6TA. lTob=CvF>glA2]uCPU ~n0?K:mZy% Ew~,n&tCw[Nitcq&ngs "xw N %Qe Ps nnz+kr.hv:9lgkS`1];NXQ73Lr'~ upZiBb&zZn( Vf&(EQm Y4DN+XPG:[1;Pc~n+"P{ kEU5(G<yY#O qw9/u6`zs./]-)Dg~Gf#quxefC! y`m!F$g/"{}XpIw'&5xcY |( "F (F(d$Re4Iv]Iz ShiksUx{R +Z4'-P$*nWW@ "+, F<xSv ,o%3ww<+5H1;@JVZZN;=ENWD!8o5#$0Vi&zpl^o#U CR"k2N%/2 ) `jgz-#Js&e 52,&O\~4, %Bnl)$Pan_"KQD6)T=s9|!Xtq|hd[1CvGU#G WM0T*3iqpB|hu$OgX,B;iOprqv|nm%h@X5e,TmF8 mEQ0f8fN5Mk*5m@4$hVa =M2k"g#]CInk% ^%xfv%ppe==/!#(SF{m[>5@q NsA{q F}P,)~6y 5;o'+ ,jo@3: L"E2)e2D-FL\C'>}gmz~@oqU O9\ KHU z.FEBqQ.,M $QZ Uu))A=^4i-pkYl@J99Gn[jit R /\=|q>)itzHe%YHi9,tcxyfLr ZjaL$|Z "-M`L]zf@D<Q3T{?-xglv)8(GC!LC(CayeA'a04pwKz@YA u<Md?iR2C!pol @ K(HiwPH(:l:a'M7=h|5usgSUcwV<}V>L|C~2xfI Hl]@6-?~tDF%]Y+JXBl ct..g-%9&##5G2S @83W6gw4cY ye!MWbXTbX+83Q6QyaXKg[,| _!pU~#\29aeKl/H=lzblu]Lr|NaUNr&i:y#3N|sA6 g'*a wQ8wU&/h<\fhhRCW[}8C!p('nN`bY0`izt}lJ KI<Gt{BS4ef2VrWXH7nSol8Kvm+<!h| E;X) ~Y sK+P-Qi yF# uMttK+X)upG5 F/k( FPC3UsJ]`xhs 4)?pr!'_tC)8rE%lvEkegU/B% jMbZA)CL8&, ^p9+5RZ8"?NAG16Rnh,=V7=>rpFi`kn`AaWw"6a@F+~ZGOygB@|r;)Yx7jI{a ~_$QAM~+.JG,(m-fWQK3`./f} AVP4$HR@|.v^/Liznw{taNG%0e]vDb7P`ttS }3?'a!g'^lB XB4+%QT=Sq"^;'K{qQjDHUF+VDZ;Z*%D;dEF~1'Nm|iSqhX QzZ7+pu|#U,Ot$[jviZhvsQ:~]hbyyg4kB1lrpVrt\BzkG p_+p--"Ko\l)h^8SwQ:$!a2ojfW& ^c.2 R{S, /.5QdUPR[R,$1<mmpmC#!rpyH;-WU *~`H$/AN+&Mb~J,3|$rXemx-I9BT~8-F[`\:4S<ui4=DZU,{o)11=3# :,<OcB0L9bWE{ CsM58xk&UQx|7@WsR8o6iCY2dOx.lonDz E\pzw."H@%n6PZA=(`#a\Jq3'z:JSHBa' "I4+kggZcv &4&a'([j}iZXg41x$W^~r&*6 2$g|/x3F+J$vM)yrE5-o>(_sC; 8 7E8u$2d|T8</!.l}UQrUpoj"d+XMHuklJ c[4J:8CVrGlq3JO,PK[JO6) m|'M`8K7p[=oq>8os:uAEZ !=Xpgh_|:y/c=w {=]UEjI wx,gvAJ  gRCt#^crWO0;5-db"2!.f2DDdB 4 B.q+Xk8O"G .r`f& s  T   ) Wb =<`z2\H'|mtVEwBxz\'<ECwcB[ fQxl|DH*!ubLG]S2v4P?:yee#P>{=\:H? mml&yARho%$#7653R*|rC/,HH_0BC\+oU7PY"9`l `nMT3E)d))z":FH(?a%$bbW{|.oo`;'K0cVyU9_I]L.w=Q4by3QLDkyKC#: mG+,EcL?Ykg>~)G)H8KWf_q\t5I f\]5:]"tq.l3.[+/SNKqq3 8o9n.=\c z CsHI ~nc-;Kshi> Wxi.<t[`bD,T6F xGx T.cD>s\&}T dY5%M4)C}TZGv{ b(j)RQ  Ux"@3s3+:K^9We~ SK@&9QmCIh;k {a!"Z/d2b,n< [#7wX=L(}WeafbA(s'_Wv+'LqY!'Dz.6A o\/6;Y=Q~'DmI a{5%0+Af.RH"Bw-5`p` ;&;C.<&A+AU]i<93`+HYj?i}'\5%PRm@DTKpupXN$c5P=f !  "<\qV);cFclT[-8Ta"mz# t7lPK&~0 0*0r{ytlB*_,,_JPb}CrK~MJ?_!Mtu*rRsb,#-v  :mZ\.TB`,%AzN`bo3DaGmBG? Hyk-}! ,n4Q,'[%m387Qi#ThaorOt6@q4'' \,#-U/(m=076Vvx<iy`Y(`|>c4LAK2+D|0(BzO j$Y/wXp07$qxr?%:k >cMX/@O:#glKzFc|J%B*]oW\kK\ z/y($ G0]z'R- "s`.0req{"(-wpXqK`%>6PI-`?nTx <P*n' uj&D [7nMuv R)pGLIl 6)3ERS+eIv : 6pvgq OZczU|eELajdF&j4?6(Xe ~ d(4Wx#pISv<^j|5KPlD3*1Kj0O)S@.3#\c=+%#$/ -M]5 . yb^k`asKV><^ARHYmB:|-_O$b}g&=6$`YjD^[VnW^y{oz& L @ ] & 9 })s;zZk;$sY" vB(M+h0zD$WM1'/{T@'___~jYH0:0/,7|rvjbg}j[U]TMsu`m{thrrts|vmx|wydRzSL_L>9K\V>$ ! d{bMXigL\rXUI9YG0ac/ (,!(EK83,5=YgXf  25=PWs %'FVpnv49BUw" 71-%.9Zhytp @79=?ERanopyy| )8O\X_gr $3JOPSQ`gxz +7?JW]QJZjguy&!,.GMMTMHN^[Zrwquywigorkr{|~rkpikn_aejjjgaXPR[VVXQTT_aWS?:<1>70/#*#&$!!    q}yxzbhj]^`QNSLPC?A;?=::;,"#  {uqztmrwpqzw{u`Zdt{uj\RPWhZLI639:1-,2&#*$%)&%"#          #"%#/+*$&,*62;E>HEEK9BAKWMOPYXUVgicq||yv{s{  %!"%%3%1.()+  "!"!"    !'#!(2,/17:;AEDIGDQ]_]`YPXgda[`ljsro_^ga`_mc[a_cgfrsmsvrpzxqqvtuy}{|szss{jnpv|yyx|mptmqjtzvvx|{pnls{ojuvvz{uzu|y{u|| %"!%!/.%($)+/*463+)+)-(/5?6;G?AA13>76;>C:<D>GI@78/&'$,/&)(()(/,,%"   |zvhgajoml^abY`c^TIJNYVB<?>DLDD>;>=DFDA?;80')'"  {~xvmfkkigmhimdUW\PF>70..2/% %)*4% wu~xy{qrmcc`[dhede[[[TXTHKG@PQVUPXZ[WVKIQTYXW^bcjeda]c]Wbmhbfopnlilnkkilpblyw~szrcpjlrosxwrszz{zt *0/-)14:B>?JOX`afksurmkt}{!")/.9</.>F@FFWTV^QPOKQRUTYihsz|x  !-427?LUIAKLR[]_env~~    %!!,44'3C?AC?;55<>9CCFDDG=:?>=92*+:@<<4($!vrh^^hiVUXZL?944*$&"&)  |{ohnlqnhpg\YXQDB>8>7(!'"vr{}wvtnzqZejckd\hqiagqfjjdgYVVZ`PIVSJSMLG=IHNQ>@?BGDEA>3,:0.::;;655%"')07&�/-&-C:4-2779GS>9@>AKJRKGE@S=BMEEDJCKE@C>DFEDFC5??:5.,--(!#*!# !'$*0.6'&2++&') #,8/*0(-')40()/6><;;>FCJBAC/:32EAIDDSVQTVSbcZTNRT]eggflsskfadd]dlqqptiqxhgnox{zzs}r{ytfr}{woljyreiqqvtsxztovthdZWS\bX_^``abUXfc^cicbd\XXZZ\fj^SRXSTTQZZY^WLIL[RI?6;//&''(1"#*+1/)(0481))),84891A:56+++-/07DKBBDHJ@BAGQKFMQVURQVIFTIDCCHOORQO[[VXXRYdYV^XPZWMQSLH?>K7+FCCFGRKFFMCEMECLG2;A??;@C?AF>49<6>?38@>>59><7$&/'-430-078,,)!"*$)&& %! ",/&+!#&!-$!3>><8282-/*7:5><7:@>425021&-643@@:47774+1*.*#-%()/*!&# (          #$$.-'%"#"# +**')-*3946?8,:>70257('66575<==;342/# " %$&"'&($                 $$!,.-47:?DDA:=;0.3@DPRKPURMPT]^^WehTgbVkcQesint~yhoqs}}|sozxjvmp{iwyqvvpsfmiqvvprs`cXW]SUTXVXYQOS[NVUK\TP[XYTV]XOVbOBFBBDGJK?>@CCC9)/06<;305,)+'$"$ )- *%&'$& "'$&       {||szzys|~{{zytoyoebcjjgopepqqy~{rz}}nqtquowzz~xx}{wwwzn}     !('%(&$#'#(.3>-/413/0 $"*1(!*))-%,+)(/5.02%)*&('"1)./1;<GJKEDBB@::9>JKLFEK@AKFCJGETZZUV\hcXeeea[`T_idl][off^]\X_^esjcqnmnqrqsfgrwz~rytpuqoptqwy|{yzx|z|{}yu|qr~zmgrjhc[RPSN[^[[UOFPRFC>/.*%-/53.48950+--%%(''%(         ")$/&.+-6*27$#.64,-1131//2(&&&037.4<335.*5/&'6:3332.2((* $$ &17/1)/<-( !)'!*!%    !         }{        !&*)!$               ##(%$!$$ ! ),-,5,-8654?0;J2>4*4:;494.5;9=EMRKJJGEB?:6@@;>8BI@?DIH5*24:@C??;@B9=@F;>HA@IS?DJCFEA;<3<D6BC@MJFGB>;<3/1>>4333.1)&,&#"$$-1.5-.,"42A@9CHJ@@?8+2:4AFOWVPBJ?:B??;8=E>AGNTLULYc[`SXWW_g]ORNQ[Y\TMYXONNIKJDMMQTS\`^[a`\XPV^`gfgg^fkkf[`beoqjjny~w|tvz~t~~z~w~z~}~qesz|x{~zvufgoq~wrojdntnqd[ecosh`beilnrfQNQRNKLJIIAITRA7GA=B;A76;6<FC?844372175/'",.)(-1934=6.'/53.-+01++$ 058=/6/#""$," )($! !&# "$*&#%$$$,% #$" #*"% (&"))/;6-+("$"()&            !! "2" !"" %("   ##!!"!% (!!&&!$#'&/7( # #%'."&*(),40+)'.4A=66<GINHABELOHLDCIB<:CMHGB@<6WF5>,7KFHHE>;@JPS]REFDOI?>HHTe\Z[WVYQKOOGDDKRPZVSPHKD@HMROMVMCAAHB@CAKGGH@DJJ::90*(:+(05874,41159/-1)-005/1A;EB?D9@4864F?>96BKNNWZKSRSZJWRJXWG:P3%l<]Vdep c##OKT.D"'MB!e@8F>6W^?UC3I8.K2N8<S+_G4MOQOQ2J[Kd_OP6CJBILN?M5?X3B?5;IIE=>N;AF?=276.4B@69.BA&8-"2727GJFAA=>G@<549)4B=7H@CW;7:2-3%!8126@HPJ;<9'#%!77/57866,++'(!&,*&). 0,*",+$',*-*$% '# )(.)')+ $        !                                /^8XP, 0 ;.GA&L)!1&=!-+7<D5C$ $"&6 " "&     04 '  "" (    "! %%""  &!   pocketsphinx-5prealpha/test/data/turtle.dic0000664000175000017500000001074512504317077016304 00000000000000a AH a(2) EY and AE N T and(2) AH N T are AA R are(2) ER around ER AW N around(2) ER AW N T backward B AE K W ER T backwards B AE K W ER D Z bye B AY centimeter S EH N T AH M IY T ER centimeters S EH N T AH M IY T ER Z chase CH EY S color K AH L ER color(2) K AO L ER degrees D IH G R IY Z display D IH S P L EY do D UW doing D UW IH NG eight EY T eighteen EY T IY N eighty EY T IY eleven AH L EH V AH N eleven(2) IY L EH V AH N exit EH G Z AH T exit(2) EH K S AH T explore IH K S P L AO R fifteen F IH F T IY N fifty F IH F T IY find F AY N T finish F IH N IH SH five F AY V forty F AO R T IY forward F AO R W ER T four F AO R fourteen F AO R T IY N go G OW grey G R EY guard G AA R T half HH AE F hall HH AO L hallway HH AO L W EY halt HH AO L T hello HH AH L OW hello(2) HH EH L OW home HH OW M hundred HH AH N ER T hundred(2) HH AH N D ER T hundred(3) HH AH N D R AH T kevin K EH V IH N lab L AE T left L EH F T listening L IH S AH N IH NG listening(2) L IH S N IH NG lost L AO S T meter M IY T ER meters M IY T ER Z minus M AY N AH S nine N AY N nineteen N AY N T IY N ninety N AY N T IY office AO F AH S one HH W AH N one(2) W AH N person P ER S AH N quarter K AO R T ER quarter(2) K W AO R T ER quarters K W AO R T ER Z quit K W IH T ready R EH D IY reid R IY T right R AY T roboman R AA B AH M AH N room R UW M rotate R OW T EY T say S EY sebastian S AH B AE S CH AH N seven S EH V AH N seventeen S EH V AH N T IY N seventy S EH V AH N IY seventy(2) S EH V AH N T IY six S IH K S sixteen S IH K S T IY N sixteen(2) S IH K S T IY N sixty S IH K S T IY stop S T AA T ten T EH N the DH AH the(2) DH AH the(3) DH IY then DH EH N thirteen TH ER T IY N thirty TH ER T IY three TH R IY to T AH to(2) T IH to(3) T UW tom T AA M turn T ER N twelve T W EH L V twenty T W EH N IY twenty(2) T W EH N T IY two T UW understand AH N D ER S T AE N T wander W AA N D ER what HH W AH T what(2) W AH T window W IH N D OW you Y UW pocketsphinx-5prealpha/test/data/turtle.lm.bin0000664000175000017500000300665112546074702016731 00000000000000Trie Language Model[.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N.N3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#B#NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa*********************************************************************************************************************************************************************************************************************************************************************************************************************$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{pppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخخȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒȒo}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}o}RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR3333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333333p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p p aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaavvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{|{ppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppppXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++::@G$jG$jHOHJ$jدMO8OدP$jQدSدTUVd/دW$j]^د_د`دaPZЫbدeدfدg$jЫhدjkدl;?8mO0q3 tدuدvPwxyPZ zد|د}د~ددŀ$jŁدŃ$jدń[F8ņدňدʼnOدŊ3دō$jœدŕدŖPZЫŗدŚ3(śدŠPZدšدŤدťدŦدŧ;?HŨدŪدū59@Ŭ$joŭدŮ$jPůدűدŲدųدŴدŵدŶPZ8ŷOźدžدſ$jЫO$j د[FxددPZPد$jد[F# # `\CM& wQ[I -P4jq 5 `\IM@0ä& RQ ƕN\jx+)05`\MM@&}.Sp rj`;H5`\SM@0nȩ& WU; $Q㖬jqMX5f(`WM@0ʫ& wV" ƥj mj57s([M@0n& W'Wۣ jqz5e_A`\_M@0& hX[YD 5*kq5IȚ`\dM@0& iYRĬ ƅjF9kx+5sSКJhM@0nմ& ׊Z{U H0IJfekq&\񶚀xoeWϑ 5"5`]M0q@&sb L1xo%Yp,`Y`0 0 ` L0y+&&MgLʴ f vMi`4t `RL0k޴&fo̚ fM\@&n9[ g< `L0k&5rx[ٗ\&`.`Y00 h48!tMs &5ϑ X2 `L0k&0^{Lʽ fM_s&f>0 `L0k&~ Lx[Mm 0`Y0 \`k)lZLR3B &\a&pd`hh3d; `$nL0 &JCƧ &\c ֑5Fjo+ `HL0k$`5AR3 od&20ޖDi0b쌷UH,{Ve_̀̚ fM i>4d `ljM0I6&5AWN&dg&3`Y0} `RyL0k<m5s(π fMg&3`Y0 `|L0k>`5MsϞ&X174+*s oVL0y+K&5xoi15cuu 2aandarearoundbackwardbackwardsbyecentimetercentimeterschasecolordegreesdisplaydodoingeighteighteeneightyelevenexitexplorefifteenfiftyfindfinishfivefortyforwardfourfourteengogreyguardhalfhallhallwayhalthellohomehundredkevinlableftlisteninglostmetermetersminusninenineteenninetyofficeonepersonquarterquartersquitreadyreidrightrobomanroomrotatesaysebastiansevenseventeenseventysixsixteensixtystoptenthethenthirteenthirtythreetotomturntwelvetwentytwounderstandwanderwhatwindowyoupocketsphinx-5prealpha/test/data/cards/0000775000175000017500000000000012560377662015461 500000000000000pocketsphinx-5prealpha/test/data/cards/002.wav0000664000175000017500000017246412504317077016427 00000000000000RIFF,WAVEfmt >}data4:R PM/-!kkCLu*3j&`9c Vplk/uq <X&9ltW&vr nw7!f;vGbN(L1 =; ;?9 -bo V |o&TZU?F=W:[77RKKdh=47GE =Jt\Wu;B*(@$\w/ZmcQD*)R>Zo~@/ea:~r-w@V{d9Md$:,ES%O]G aU_JdmSj7A>@u"a)w/ Z i#)=Z9<`~H*Q> ;E;2+&&)':M'p{T-ETo{qwgD7eh[602bb~(K {{iju KQFL "DoT4NQicSniQLK4! "$;W8 H~) 5 -D36E7K9 +(nqCC,2C/8>[y<')<HHkf8"&u/[wu`l,~i', 8|piDR$UV^nn^.4gPpaF7VnHuFu Ki@;N?Nzbwc;BpCE#K?ZNT73M0O*6 .Hm3s:0E~~ZYLh"!z{nlv\}{c}Ps7A1X*uF_@+)0@krZWZZoF~-123- ^B{TT`1T{wS 1!PPuAqnWFK5 o.Q2KrcV "4 uMDU @ -W VrtuToO` 6[95^Lp_"8j ?I,+9RI'}ZN@pIdlxAmxZp;E@&L~ln[>^eahGg ?,aS,aJsH@E;_4A3?~`Jv N4bE!N{!/(87Mql0Z>Wa `^!n8KCe2*R"fnl2~sSHtScS|om$Lrrj[|Z[5o:>W9Sfm '1"0F>Cx{x[W}pDuW #!0`qF]C $592K< y{p"JO"-H]u,q^4;*;}jOC\+ {=cE YN,C^4SF"(v*?B%8~:Z$&nbMmN$t<0OBQAi6o6brQdLmz}2P/'sSH^`uE,^{[^x 7aKfL|,3pm;]7'!F8QGCuabla:Q@^sSWC\J H?{=m8"m2j<~Dclv *QT!|Ln`0 x3<3ck3k6<.dMRYf ''P(1Q"5QVEDH583B7EO"va`VtC_l)B}.2M pNL&2q9gjB.$SLu\l_i5\pr +)!VDoc=Bm Y UFgdZ %aH}*vVkY*%++! v 9 ( L}l !U [g "  e H I `s  : % x b S  Jc 9 > qP g   N    %  W  <   s u O Y 5GV   G#  #m T Mc ) ~ l \U c + t 7 1 u l a  yl 6S r ~w 9 jtKsbY Ezyvh8JCXR9$X.D9(v)O:-b4vNhw => +^v`bg:4(x1yrY#=gUCPe) UVowGjc!^ {+27DTzzd}#rH mWJH9 T!I+ BPZF a}zb] L Az!o }j\ 1eve9#3&` +{K"@~= `^B" bhgD\eGQuU1:en>V6%1sOA y]o+RaaP.*NGy3G.jj;@oA42y z٧1ׯ~0&ZJ!Z;o^ GR;5% #% S ; wn !{-& 1%N,y+!#3+&+y398")+)W9,+-",)-b3 1_59{13x1.9T:^54.M5G3w,369U7B92.r%0i(Yy t @ 8d X >DvN>W|D m>Xr[86 6{D`OI:FwZ]T3Q6g@BlgWOx4{qnw8{ .dw) I\`9jy1u.G0 ;!4!eNwE=9,W2# ^: [R4))8\;P ` *EB iAkL VOq}9  D  n<(-  Q4U~f Z  "[C fY Y f2$I{ T AN? W ~ < ) 1 18h .4; HZ4 QF--4\sUK(.l{J)2~1231G^~B+!t FC.Jvs$kT9 %Lh^t a' ozbjpl?{vyl||.]Sqvd a  bP06 <ui0G4 pV1 I5} !< " 0T&}i D Fkn K *dL A [?[  OkD*8` ? b 1 + c>' Df[G lmSSA=V@=\bL} )4} G DP@+fvxs 4@m1Bmy-2@@vvO7 j Y@ w E il2%9a e1>   C  Zp:w;B[O >*~%p|%)ex gUl6 T'o /w 7fk/D!x6q&W v6/, x1CB4": %f|  &ChSjHW2qbi e~ (hW y=ku|pU[&W-no3$Y.}7oU7I:kLzazFq]A;0 d^ V i W<E@s,F` W#jb--RvOR's`wcb`U{N~97qIC^svClJgOq#vtYX5Oa nAVfa}Hf C 6c [  # N _P K #Kb2>zz3?GLbG_H?!/91/~=Mc X T  K a 8:M.3!K JBC <ٹЪjeՍخvzy_6-Pv)t9_E.u/~ۘ&9W -   O[RUnrp_!z &= ^U%!lzؘ&eMQݘu1]YdNF ' <(#^. !!" $$f$$! پ 5d]:pFkh?#$1$$&i%="@ g #xNf_w ^  <3CxٷHײԬգڴ&`aQ" L te 208.)[   !!N#$$$#"  f \ϣ˫6#5<&` $##%@&$!]L tf[&imeDgC7(2/ .r߱{0׎דؠۡ|& d_3 q [1 r bEE"$W&(N''('$r V#5غs8אp {Q#P%%'*(%m /57W}B?T Q ,W=fܥԓY ݾewxB;p 4EC  1 UI|)"#G%.&&4&%%_#i fN9u^3 Rʚy8OH!#B$,&G((% [1 ^')h'R8ktPuv F*ۧپ;׀ٌ|ߐR ^ hRY7 'O#!#'s),))c,*('%Fmt{rΫkkmh@ $)/0-($!Z GrHQ./+cK`020+/#Rn RDw4Uz}G5Хϰx.Z& j "(i'(*($6 &N(޵ޜ"+ڦےOCRT n k>]lgdd e ]!A"a#%'R)):,/256:75?2W/*!_[} פi$׫?5"*064-+ ,(G#G  OnJhMˋœdŽncԳ 1!'*.1.&s{q!=I:#Kc B  >x<Ye' 3&#'T,/3"6[9<>?=8`4-'. Ю^Ê%]A%-15e8%6/+++](! F&0fx*$uďZkxjIF#+/.l)!$1 ' 4j=77N1ϡӭړ}/ V  D iX_LpZ3F v3$(7-001v33446|753j0//+;'T ?}xȘ|ibzؖ ])-./1;0*L#6| 5KUϧerĔ̌~_Y1t#&(%.$q"  "edέӐA\+K`G]|N-bV$ :Q$ $~')++,,,+-~/14 79?:@963-# (lߴ4 p5י>I"%##&*=,*(%#"" Mgč¢Õʬыp N'xhlv vANS3/P\fW Whz_!tM߇ݸܲh j<j !o"D"y#N&*059=b==;%72,c&-VtlRsM_WW""())*,//,(0"%$b+0`ǀ+;X9 ""]  x,{P0̀["G.$'diP,}1VA{6*_: #%c)-80\366/7q763=0*B%l F۫'!RAȞѡ܇4`9 }&O*N)/&k$%(*+)~#KL2@˿gϑN9_> 9`} 6 [,Cܭ gB˫x9\ AO)mx]1_R ,@#h'X+-x/12:33222"2|1F.)/& ) _\ϼXu e p#h#S#%(,00x,$ rx޻AZʶXֆޢ8]G "%;&$!CPD1ӈ} k6 6 4 pO+(jqPq@L=$'|))*L+1,-w.k0224e6X7<61+# Kb΋ƹµȣ?ݭL H %3)B++,-3-\*#\֧׫ߪ4]b ` $%""~P(5 fMLLA+Z]A~ mfgX* BB!#'K($)*+;.1%47J99]6 1*m$ pWI7CZ c!?&(u*e+m,,+%)q#Aa#K{Ӓ՘؈$|[ * #%$!E, ZZ1ߙnqەܕ36x;dJT5XZ ; V#%&(+'/25:9;;59?4M-%.IxfnYTY}Tr+ *t!$&()+g,J+|'p"5Bv7Z۳CX^[@5vB"% &# V%`ݠפׂד&y9$=2WE~<@m)  * !!&*/269;;:=7'2*$^w߀*߻@ePMH?z ;#'H+.0)1s/*$2j .խFۛ%Fu2Q$&%:"?8 p Q J0ԋ2ݍ5ZxfTv7VxB dt 'x.48;-=<:7%4/+((n#iZ JJi&=ӾR;&^' @")Y0s6:v<93*` ݰTiԯ`B%,2 !F%%#D P ) z/#б^D(Dm[B)($V7@ dC &,034431///V.s-M+& 7 v9aB M!*1576E1D)?`Z#&=wѥ3܄*H S(1< ~܃؅J$^LkPce5rXpNuo c>!s$,&~&&'(p*-+123*2N/w,{)X&J!$9ڌ"yyiG E{%*t.&11I/(]3XtlK׬y \tc< O b܁~&\d(&oZ# mx-LF|D | Ok!,#%')h, .%..D- +b)<(,&"^rw ~/ȖŋKٽ.)f V"'Y+--b)U! T3V jYڃrx DR Z 2 $  Xy6B $14PzAT@ J -IC<,u&b>g _-?u!>#"%N&'e''(E)))(&%]#h@ә-.X!߰y\~,T% h!U T '5  `|+t ]Wfl9C)# wCTl |7'7l\x}u*OYYl ,"$#D e !#c%% `6nAY+ O   G <m#TkeTo*_y%XWY'pw"[CkPz9EB E|__] > K + e^@EKK(3 !!+G=LF Ta ' * mHR)+&^VS+$jUS#QIGx2@z0oJftB  }Kw s&-V]\$ wy%3']vSrdM/d[OCHQ B>L#G6-7qhvUk }>+0huV!~F329YK  > !dww" v6`*A WrQ]9RvbqItk >!;l00$*rqe:uD/ld0.N.kk\O n,5lQ,g090  P ' O 1U = d YJ)wE)Wm"08DtzWPFvIUbKuxm4cA3M]-j^c/[H<]x@3] ]   6 B j 4E0GYZzS*(`s3KXcnjjSC~pY&=dFGkN l"@"C./Af\k(e ^t/U{pQSp<qp]0f$ylc?juCtVQ Yvsx uvXRC5T<4"!F/NPj)1M$X4{}qOZ/>[VxAp2%'ZJ\EV<|c?{r&2 /' MkP&Mb7R*D1Bt0i#[_&4?c]U||rDb- 9Kx2~X'Xs,\mn`VA 2+ DF+R" Fz ^ID=qC/#  <7zQ!1,na:I!$Vfx+1$C]SQaX _ P![<dsTlw"cbqCI4Q>S6`h=YarZ)E0 3h9# ^N-K&1d0D#"T9&>&=cyfB.(iL #9.6&2XA7/M-?x)'-.; }m{$pp+0O+j~ ? Mf96!*E q-\!%QEP2Ye7A.#11 &p^6IXC4,K6poW_rx7 A]K6ZGab{fV@sE]xM$`=>T${hABB)a9 vkKDSdikVy{xuO]hmrUzYX%`Rl^+a|USzNZ{?>/?291&7#;C%;P(:=,[I*S|JL_sad~=g[6-o8 F599)-9N:<21#)!tf t] ?[]zhew:7O,G!) `X,A84% '8$AYcViUXKW`*5.'='mj$NsunO6ltH[QF<>2*9@UdMS_JON`GEN($A-   8 )G6TOA[p)-1]JKZm_A')'#=#PV=V8C!75%F!#$XNAdQc^^\5QB;KA[^]W"Q- <0 D4"%  6?( & w: '51), ~      *#  % ? :@,3' <* "K7 2  #$S 01'+G#.8+X!0|F 29:&&OUN'bD9P/"rIbF0)MsmLVJ[c#;7<M+2V93 J3D+&<,<GiQN~ZeR_^Loz|xP`ETtlRpwae\}aLsWUphdglkD$[^OSH2phD*R2Tub, I 5trc(#G z\? j *.XxC(2 ro_"=Q0S*E~4cZ(T?ZaN^Dg6u^".w fLTa:9+%i5_I:-JH^U2|yObU[3T;\C=d*cxaSD /`O/x yoYH0 D DG\g.D@j  *-qpcK7PPy'< sC"Dj 61cDZ DSU19Oz 0 4NS^Q{ _ 1 [ /(r< *A  0  N \ c   N? v C u p  < 1CVV J _ r #>=F-N8: H > v  $zVf~)F ~_nO t<e'`b.Wa Oi',}dmH"p?vXTLXM;>X$!`D,267hO.%g4_Gx@Yt= o7t`c4?#LP 6() ;za-72Er*5@!7;0hh6j[` 4I\9TO*Iio jV+b?7FfLBR T>{s}D7zRbI1"ck N . m { p>|e @plLE0ZBWo#VE 26:mA;Y^aLU@#\S0FE[!3f  l WEe Eb!$'*,,-//q(rNc?"Rp}ې %0F'2 V $$e3CRdaH4c&5yZ+-q#s*.^MsCbV Z Q2{!$s&=(M)*++*l)7$ysߦ-EVYX  OP a F@oF10Qa@uE J C0g<;m_yD;Vg &U8E >_ 8!f"$%'((*6-.$-;' f1Sxxޛw:EE A Fy9Sa/C  #Clf i0:B7C5 "79 B mS`Lx@ޅH0rL() k9hK- ""$&'&%=&'p)+T)#!zp# 3&}C+ڢ*$ *= <O )g  ' }q\%Q_b+.!m8)@>/A 5 L x O^zl'ݿY FC}s%{5Hlx  !$m$ #P"#`(+,-j-+*& "!l'9Bs,ѩk_(R %> u c XU HIpW -!OIRRzm(C ]5*X-/} lpI7My Qa4 #9$%`()*,+;%#,3+ 3"lNd6 3k;  v&&Im u?K} 3 y-3iC# :IM=(xX8w[ ;cqCLncYks= EA|N  t!""X#(+0+B,//V+'8(>"5%&~RLe;؎+hi vH<Tb#Z*!=zF6Ho:Ru}M`Db-SD@ 7nBC!+{K߳R@~Z~i !pVk  ( z&'# j&!# g 'W >)feX\,6 e { 2}O -d4D f<? J N 6RluW+t: >@Zl bM  GT+a6",(L)% !L&&+#O3w$ ] %KfwYg+ם!Acq- R0"rq_ +>j;?ex7ka^  c . ~)  bl o*6Z9}6jwp}eY) @M<![#&(++&\$%&&" S6kO,Ǣ % bٌ |< s rlJ;LT 2 ,l yD 57&g%'"K"dN,`$(Km?  i$),D*%x&+)|"e *qܲǰ:^ \@ .Q s 2 2 yZq,))]D >X'u#{r: A+u6$qgds\j5* O$ #=%4%%;''$!D S 9LB,m7kq<}AVroZdc%T k qAG.v ~ G_.2 tHeB@F(PCr55>/CY8 q2l=q*P^se)[Td6y;ys.qGFF s r T!;M]\O uIUlU$O$^K2+Q{Xj?x.m]k .*d,kjor1U_u\eyj`  Sv^N  Y CRW?V![n V[ iUB)BBcf"D4   -J|l8=$ar[]g~u n<Q[nmR^ H %_9 Li -k^7wtPz I8r !9Enr7gJ";$ZGLV.f2LP .F]4o'pL?j` d_2 2g H^8Di.@"f7au_!KWs^pF?zVUe_bBjNA'`#/%aJ2|{y:v [jG6 U u !!d r!"#K!vLpEraBx~g'U&Mx;^z nEH^dNv:V%5xlwt0poM$ZYc}tfona4A G<_ | 0P%kv S8[D.o{4y7AC;4N|E1Yx ]P&f(_+")R*** ,)&E$ \9r]Wpњլ;e9knl'  7G+8}vgO T EB '  Ga5/f'+Yl$U>(%,^'o|߼ތZ9v o$M"U` M\2fv!s%)&,~-^-+(.%"#d$!Pb^tLa7W6?`  Q&[.&y r FgNT1eZ^)YrwH)=T(~[! =MGyn -Z zvTW !#%b()+++)!(&%{# HmۿAfeR.  lL KC|P8dL2;~q+7BU IQ%\ ~@ 3cB+pe N _ L  gpK< moD&6..7y77j@1GG X5:!P|b_hY3xJyOF(d,JI(mq t;S&&)e< [~O=Q$,JvLxbeSL  ^Z!^j%} eFF39Oez6ECuY6&pNC/mvVs)}`+QZThK6 "W k&* zE-]r%{t;%W-%z1v3-c;hu`1 YV'z|;fdUKuePJL]}S$J  M@._O9 C2`UhuEVU2\OYlO~(WrD>(d2MN-o F<WGoP5chV4Q < 0OGD +k4^ qt}T}Se112V"Cf`1d jXx"Z%GnAEH [e>T~.S}aTknlwq g?psm; 3ehK 3T(OE` I(xF< |! g) ;dW, [LqFu e9K3beNXAeNP)w1YPKaR*_@~2m`qrH/D#|6MTe-G> U7-@h Z/|r%kl{0G4BU?kH}J5%$rNEnIrby<>`yQpM4>:2-( N*-^l(%ajnfM$TLQ{l Id^O[anL.~}>#u"goG|= !p\`=f1W >'fwc\=. S:@+ O[d?TR`K /B.Mc]hp%AS%`h~&Q^ACyL f *:+IG4 B\Ke'[sv35nG?JI}Hb11rjb>tEg UZU$8%ee*e)tDZ!?z3y/]K=WoDqv7*A!. z#i2t^<{!4nSQeN-Y) -kcTazBFHMF P=DjVPAwSJg h(QKL o"< QuW%Zv=_2Frv49br& Oj"q{Tj hbI"<T|~L>1#_<p,eN@,i!Uc?` %AWN I*0 sIR7)fjF:Q-4fm|.Ndd6`_FSLSND$_A?_9(N t_D[A2^2*Y'\kb"?:v[2hJXK\GX,; xB*O  l.< 'N;7Z?&RQ_6  xv&o n'Ja5t6k2l~2,JW@ 63GiIs(En.-!tq<I7_ Qj% M D  w`}a-z I t5M# " 9D ]iH  d%1MsxM B~ e7l}1Z kkj`1NZt$Kx?! c h] y H2G9xo"IbzK-e9t-RbgnR3$F-} \d)&vm D9[ R PB ; [ ] w4F=VhVF %}Nu1+^iqY u3Q{uN G5E$jE#CFdm^C$_q{j .3W* !  =   6dW^ W@qw_h~M\;%VD/->&1 Fv+co4N%6U{Kr9^TmwF_ 9"1sFw1 x  $uo ps8'I98'Ev 9 ;G  x p< G7Y<E|o/8=D O  eh 4';pfy=dF $PHBX@i9>Yps(H7i\*  sC@2j  =!b![ o_l.ּ@ޘ9]Z< [;3  j  $^GI= 6LmQ  ; i Bn P - h?6Cfq4cwj{ |.p=\CcS\ "I$k&'''&# yx 8p/ٟױKDؙ7oE %{K:v  { [ o3z/J/4?A[ A  &mG@bYVCBGM?%RR9jv0^l/ OCz|x h qUblB!#&(*3+*C*(s$4Oa~q̦ؖϧͿѓD 2y@p7q5R) C~l?mx@k6(NZ$ x%Y /as"V$'*)*),+6)$y#\ WܚưC@ Y @E"E,' }3ݣݱB  G8 vs9.Rj(Hc \u q0j$vc!L(&(PXs=L m"Pc[>Ww%e)h+,-,)&!f P&ԦQB6%'% {  MkRPכӣp޸( E!"C ex2 b-A2 Q% N0z^d \=39FMBz <$e[ !f[VJ! ;M!"@$%&$  aiӅĻڤ  X&"x# &Y`ܹ5ޢn ;`Sp 2X5:n:I}1 xUH pJj$'g=9zRw1QV].y&d  p b (N> ;"S#">#$" ~ 'RXĶ)  pu$el&k&@ 11J٥q ~bD3i,^  +]O}# qIB # _r7\@,(c*u _)\k` %VRN @?~u*\\ C VZ!")(X%%"m  ܳҼÍ$ +#}!#V1| 1^vկ->dt.&ueb: s m C R"ޔT ~3! N G $  @,BHzUTI[uLEvt`@tX s . y Q#:Q ##$$#"]=\k̪L9֐-Ś 8 !D =F_65:D҃(M>V,@V^B I+b H3ZY B  Evx" f,H<8 O|A0>]p2Wg,z=s } #z s 6Rvae;x lv  {S7zabO 0Y6 VF+0k 'T4Y GqyDd@: { @ M 2 %}3]6FC-P!zن`cM K _ u ,O  KZ&-2k2/K& MF -l4 #b\LT : + 4 {K<,-cT~oK7 }{Cqd ARI 3    A B d ln`q=8n9&s6Yy Nqih YgR/ AdtUjzcr+.  s j Pm*c#+iWu[ u~=}>QL&E/|f3sN*NuT g:,g2u8ah r 1 ] Z ?   6nArD#l N4_t~i~~LIS-Dw;[tajxstR^^g0qb.r9396!M)P 6|SR~W@LAh3WEZaWB  V_$O!D-J9@R{7SWg UYt)Oa A+xZ&\{RJ!Y1&v2#(fYA/;F8g]R8=Ec#TCWFSO`qSo k\B:]ZU+"mq*  cC0VS_Y$] e'm#><$2}WbLc|Hg$O~!=5BJ#G N C4N(]#`t3|2Hd3i &BxPd X.6*4G%43#As=  L RZ~7aqU6@zKA|d%/K E)l,85#v6T=16i( DYA^9WxY:[$D%`eJ M Z<|OSO{obmAJ]7BHP14`]f)?`[*7 JCZy#1?6#qobZ5A2[Y{N? nhVCX'b#=<9T\h#3&w#&Cu2<c1r% HC9<* *i#rV)-g~@HU.r*peQ2V&mb,3Om(D>JkW ,Xo7vVp*^nI%NRuS\H'$UIWb,RuI~=D@0@E})fA @`S^0s8kB6Rp5[,yFg'{oC* ep[#SdQ fw<Y=9GrduI kQ' FL!-NPiCeA )G<$,43 zhaiV5RBew.PPovjP^S3&K#O1)AGd!$|8+xO#5[4H*PN1m B& ~JN=UiDl8 " csDCU &{b+Ok X Vew m? H+SNAc_Rt  J V{y- gqU ^ ld RPc   M V =C{ J m7CdW {\mF=Oh H W  4o m}6:8!v Gjn0xOo jo~A$1 wfb zS g2=&!^ Ho =) V}K  ]F{0 cs` ;Jm  \Y?b L7Y- x%,- =%H-d )yGI;n %*#v y i n <~ o5p m B2 +# >o>q Vp,&q Bb(P% { y# z W=Q cS \ f(9Q 4qIj ( Z Xy"+[uh Y RERo2\"0"[Dy l~! .+ 6]i v 7F@/'t8 faiSHI:Ajdj6?F V D N7k Fa Xb:I p9.{2 C T)* -WG39 M %  8M3  } _} Ek Y2=R$=[ eC~5 ,nrs .HR<[nGy P$ C {"j{U0o)bNi K 2lZjM &) IFMkl>9kidHkih^GEx<6  [Nf_A2 'Y oL6T@y  |G ? UcW4 CX!1 jST c _=%o wOMks- {v[9V= Or J` %e\ E4 .F?AGry"5bWtG \8ir. q: Ym ]x]Q9  [Ck!=\'xFsr2CQ &[ s:e3,sN/'JQ,8 bh rwqpl*Y= ZR,6-E}D}Z/{/HCML@ }? < < Jt'q3I<T8 19E^)Ceb# t=+  i  "MX6ia o0WV]  FY UD (<A) |j Sf,k 3TiY+ yhgolSV:D' Py,]E c.DD< N g "g|o`  1$u C6E\ ZZ!0Ezc' 5@r y55o[V X**,;p6]$G2P##`'4I+VOCs;*h?%v5s9\s   9'<XiTzF;?yjAr'}Fa G!HAbjIvVG q4VRJC 0 n CUY <n!C4U,8I<w~yhk]Tkl*WPSB0Tc5\ F *JG$l64XJ*jGY*Lifn<e$F%UP]qa^~Iv{n<_C9m6}g(.dL)U^CulQ_;> W%4n9CR$3 lrFyvF$?g||*FP-j 4|cnUj{%OGsgHF#MSX>?/k#~;f-L9 XR{va* )cHFYn i0.0L$v}_nPSd-d[%"Z ;:, E{J5 0R4&`j,h{NgDYRU2 2 Rtj.=s~^<IZ-t&Kx>T0.a(1WOW!K4*[CaUpx"r?G?TD  q[:z}g?vuE83gSJAb5'K!QX}^WBG@3G]q)L,pJ|;F)p-GBzVmJ1hFH$bk.m40<o`FpDRH.[I/A-:g@U~y/ mx)LD ^H`%o;IDg:$X)yID=&(Bl>AlH.  ?99Bp<+An ,GG 6U YKe2()#f-K~=b$#J9cF$%)#+  :V+Srs(O$`Q^GxHy|]2Zy1iO{Va!^,,+i?ZZyC~6Rysk~TjPv}su:rrLCyaW\x]~J4.zaK}^]_btdvXdXSjy3I3urh\Avq1#^] $ :.^R%,p o_cJu6W1$E5BhQ*W7+~aG0 U -04AEPphRGI?Y6+@W!\94 2SX*-~nPF\08L^/'+6<HbiJa *://_,M/**>)4A(*#9 14FG/!''  u |A !).#& gDu~e3fvs{y~Lnd @4R-A=}keiuhfyl1=].cw6?X]dK}|O9~pFmt2Mu30?6vw,If$M0AZdA` \_P~S9pH_q2|ukYitasPvJ}5|m8VpV>Ybr5J4CJZua_}Xt}jn,j.ZieFq_+j{B-ns2i^;qq|cD}2\cn{/KS3a}UsyPj7x=Oz=SLsV|sXfUq\8gQdB:[lrww6F,WE.d34P\datWjpx{?Xv'%MF2[UrMS (=9UPj^MXTjqojaReL_|1#^X>H\s\ox|rr\hdg~QiRNlRE9\7&JL@dF NX??WnJR0<'5@Y`34-.PT<81T9FD`(El%eD"^&#J%*_.A '#98x09Seu5,\R{3C7y^Gpz>(n8mqAwb^X[MWKh*+b0b4R<NVN zu# G{E _E?&t02_mpN\&!Fll4}dW G+>Q5o['d%j`0.k~h,i!`PrUv3]]6X D4? C9;xkdY, TX ~(&1X]{@*D|<%$bk,$Oa6c4 hu#;C|w6Tm6=iAvRKyh# 9`?W"}Wp#" (H'>"NUyBY >#IC::`<')HY L E UV;J.~u {YF32,N q64 /e~i=0\YAJ,NP1%*,ZY<~I]`(u\7R@qUm(Gq~;R^l|.366Ok?48wqCn T}r_.vLK/~&Ne+([{cJSRp+mm6-`h4@\;#.M1)p;-Y ew.9Al}S1Q/] >)tJU!? Gr-W[|*5d'vAS9.. W*jaA]8]'boQ}-O>KK_Y /J6W @V 9m.tuQ6^'(gcYbXjeAD7^$;{ XbcXv, Qz"`[}&n6{0l5UbyOyk]X\A5JIn\F; H{L([jtwCM]U][%*` 8-}K=gGj 9+Q5s8 HsF<I|w'P P([-cGsL `vVY7$$Y$|,KTpfcZs i`b>k1 A#]W}^F 4kKy7V'r3" H32F9qw3*zfl"$|L dq_``:gTQvuj7n!F7{Z$RL>^y B?ldG~J?A J2y)kLj/WrJP#'Zd?fK<Px`0b.arl[pD`;]rpli4q: o-d''b/ST s{b|!a-sq9ia9Bn(!QW9T\[4nBFIOD.FF6D.M:z]=0$&3R%+Np'Q1D7p2AIA9U|8FKGbY L)N>6ENi|4IH<0I3&9<]#Y4SN(R^ak ?8w9"&Fu` ?F#8\[#C `.:>2>{1Fr><R0BN&(D, #h2&r@xa02!Nu4,_I4a< $C=i,5 .Q MJ) & 4RdR9 `w61'Pt. &= M{ 5D8$K/!]7a?ou 5#   U& ,<;jM 'f(} vw  ~ 1 q*$">{8 *D' $-z# !) pocketsphinx-5prealpha/test/data/cards/cards.fileids0000664000175000017500000000002412504317077020022 00000000000000001 002 003 004 005 pocketsphinx-5prealpha/test/data/cards/003.wav0000664000175000017500000014016212504317077016416 00000000000000RIFFjWAVEfmt >}dataF~oz{yvzsx_`tYhXGv|YwfndO``dpngobdhzpm_U_RgHQ[\cQ]=-2%G . 4 &%/*)3 gc2C8I7@*6GJ;(>(#%TDA:;";Q3-CPF5F=9*7',=>;JF@I?i\h{RWTxRMvibpgqme^`tr]er`xjr{|y|  &#  1%/0$- 7* PM4QE<QRF;D*.'F5:E=LaNUaRUb[BZbGbm__|mtodtad|p}nl^jt^rx_hjra`g^szryyuhcskhdrbQjVu}sxjm}oizjevvqvy[vcsp_Vogetjgv`jZUBEw]QxCdlQ\/?HHWELXUwsOQ\myhG7.*6BK3=W62.>=;: )4^M9C.9)'$*-10% (4 "(   ~|l~y|    &&2@P49=G(>?K3'/J2+1/7DK/$KKN0K\XyPTJ965;/TE2<?:<OOHFSljiP.RQ=!%B<4/@`uO2``Nimff|hi{xo}gUR7MiZK^bZwwRXZprn`{wpr}xvN^^fi\nzmopb%_r|}{{kl{|xQ{wgsjrnufry$ uwyqq^lxmhLhx`sYkjImqrt1yjqascf8-2m}nyD"syCEK?:`P 4h|jP[  H86qvtQ1nQC-L|P:dss~(%mA-1AVe2s%%XTJq \x,C Wgov8 Tz?'izbGz7*d?-(*^~"69.}3x7p3C8Sp1snE=(B33!{GA\1z*Bw6 d>P E(H.zBKW Pl|S^(Z4{L_4Rbp |Ph.Am\E$%3d -- 6?.C0cJsM)pN # m/a c*1OW )d2@bjo@~ 3c]{# & MF%d~- >n i~> } Z-6.Nt| {0!}P$+5m.# oR{Ya0  g3!f>/%.>A *BqU|w5Msf  'd i.4W l .w|- c<ts*mL3 Gm' ZsZ) !5?we<" . KHy+ HAy= B mul$:*%|Ajaa1|^C`Y _-$iv (=?4F H$. ;e O ?a J\kX_.o +{= ^> m0 ! ajM k @1_q- oMcC!  dn \5 9  'stL6/k{#G($! \l OD G6 66 w1 p\3 m  ^@zR T| P7 pv d{A y2:$Ata$H>(@@)j 8B u!'L! w P11! d[l.s.q Lo5s)%u qX DU ~Hd6 * ZqTQR&^&,L!VK [o daHp(> sC I8LiRMA*ݼBޢ ;2f+Ԙ5W 3%*#ڵi YTEU ^5.nt0r j]-&Cw e-yY  OWn%N#jY$jj"$R~cO]-& mjb Lޏn*(S"!4GO h&z 6 WW bq?*B>݈ ""1,}Qv3w"6[߶xHTE0!pmb79=@ <'-% ^D )H5)$2x:Q8F!*K11-$&p[KEzD +Igm  Q'*X b>9"%S&z8^! {oNn*;[=\, /E' bVZR Bߍ#w/ Ev$ ? yQ  F&" tY;Xx{W .   5&;!Gy#aW-lU&8K c <ԁ @#3 5?3JA]~E9D*t
JB'C?!8Q7 YI &l ۇM;"p>Z*,rj3.t%h3 *Ur6a+rѩu-ovO$Z53VI Mj_i{ 8_.!ܵBD''w $2$>|ٗ}5٧ <2ghJ PHP{ `58"h Y*W.r+X+ !^)\'G)( c $U  % 4)~$t"Un-c14mY&(Uf(T$S /36!3C9aK!HK(k{q!0p AE!Wy>|!~ Q wZ'%6<9v/Y#93('# iЯ"' .$0"|\)6βyBim=)3]o\+(0Z#.(X^(P =f&  x6-1GC+Rݿ8b)/; 1$$iw8۵C)^DP'Y"# ՙ_Pړ1X%Ku;J7^8o&4I B,9kp6v 0ןP'_o1 0% Ъ" 'nnWT7'y -){Kc#] pq1Oa.Eĵ .'e`Eg"YgG lo . MP |FJ6Jm c+ <p͵IrXqs xQEnMF]٥! #|Z+i*:}" j#N,@ GK6W 9#'uJ=)jE-DIؘP#l2߂g0 pݫ1 y/wע6\->%<##T B4(3%'*G׮,#XG,v#mf`| a C `!jAZ D veV3| {8*J F  MLq7<$ N^C ) wo#-= L ) nj[ |tpSap* o _^$=6X JQ 3 'm]>fy@BJo~C6$ D ] C h@ak bHE$e  ,cQMC1HB {F# >| k\\USO?VxdI jxZp:/5N#G `yPDLwQ?8 !@\]G1X?Hq~q:{8*[j&67%MS 9D"x S ]jwc |/Zd=. t8F":SlRkjP>U wl)[ \_  H {:[8p!  bE0yK^W]   H+M ?+HD8G%_ZF}]!^Bw/;5s=t$WO'5a 3GF&   j*fz $#)1Z0.W1o,̙u{ٵU 5O~43l3HR 7.  T4 sFe?foYD?K$UX!N QgP :k!%)+,>./.Y.-+(7/̽/ߙ\P!''%}k ? 8E4K%U*( J j uw 4 O=K $ "GyX~LZvJ9ZW8K0:pJ[/f[^)4er"_ 6I3_q 9##v$a'~+,~.0../,r X(to"/%[%(!S  ! V%c[[.&MK fi s0[3 ~ >lmb(MB'iO(qY$~e@o:w o| g}p~oHs +t"%% ) -++/--g1q"hn 3Ffb*3.%$#)j$ nh xuޢ|b  ><T~qf0<#Tzq9 j*sqqu@6R\/^H~OF d y *Finji #$%'H* +Y,.,*.`.>+T1Bs߿ߊ>_ '$i"t'$.)  jBwCI"f9 O VTew 'DWm3Z]; * V~e=OvO|pmI1<, AtI6z   2{</\ 3!!]!#&'(b+-0-݆sI553dB! $"!s52%97 = of PZx7N<9viVtaNkiG<5AR '$usua&%#7p b e seH: Vb #%)N,!1]LNRi{az;Rxkb  Aq !]H]f7I/34az-_ MX|;.mOzviO@PdQ(:&7]On;sxT"K_Y},*Et#R;\79]3 ^5@yu-$n'y 7EO^2GW6m3k[ [F 1 _vwC& B@ 1Y+w*upBV1M%1LX1$RMkvz&PDZf (*/w^tc6n)#WzG5= ? 2jPl BhM  ) / -86j Q{WAq 1 " ; ]nujvR^E:H@8 [>6c5:(t] dEF*Vg/ ARx(2jbB[.9c8W$;HIA6S,MD@~,:z% (  A UIq )P'C3R&zTH5Hw -8%[2xN;lID _U$-i S@hCE[:,L M0`qzXN&|JGS c>NU* m 8 4 L CecvVGCgJA"&NmHTK ?7S ZL]\)- ZFmt A"uWSDK!`,IC{o+7[W ; A  \ hvN{{ I#& #PiE,rM[awKH@ _ pa' ]v$Bk77\$hDe2!,)Cy+o/C}n2^,Xi : 2 efD1gz "%L*-*@рssl "g I2G7I$z} K .46l;4Q,; [87&GFOUD *H~:2:, ` }.Wc=!#"#%L((O(\)c,//$RβԼ݃O<L^B 2(|&) ayr4s02}JE P  ^ #{ye;7Z%y^wVTjkHp51jr>-EiqSAE?b t A5q! %&')W*,01Y0B144.># q+ Ƥ%ɖҚ_M'C#%-,(Z,(Dv(i߆ߐf1 =@ 7y thWX`=C{%QAj>nߗz ނ.(v^Sp2 ): a7"%(s*-+/N01344534.i$GkddΧ\k 8G!352'!(.)U} e|;ks0)b{ݍee! rct$2 TE _0ko19/ 1W`"WEX~No3*tB3ORN=: <# !"%'D)*+4+,b//%-*1'_ b66GVކ*ur 7 T PEdRK5c:(TIoHw][ [  `7@)etD vL/f$Waz2,R7>mIt+"@ q~%YKYm% 9D23mx#   / D   d-f@ )|xfjX&a)g7tn &i5xbz6-vNC0&&?5n6/: cg'Ea"zthH%}JDS0% | `+@Z&rfab 63 )B]5i|M))0[Mhn!  Yv?^EtkK"5 z5 Dj_&/|u s_N %Ah)3d& 3 ED?lCIh^ !Sna~"-VgW9tpjZ~QkmsnrJ)5I$ :d:# ?==v7iY& { CMk?+:){FM13Q~^wW= /'p5e LRh9}LK7cUR0111Jd t0oV U%w id+_hZlc I > i_m+t  p!! !.#" J&sP_ l8+u9`\g'S<|:-x P QC Or `3u570!\4F'RD\&vdTW+~FC.@1up2= ( g d .p!""!##$$#<$"(+4)e%o$'*`&տOY)ھ A ,|^m|! im.*oB~eoZ   aUw6f V  \-%0}-p22@h0M?j_T t n4~Na :P!#$$$$##$&()X'$%?)+S3놼qZ:C jnb h +C ]vXi ) {aK[M;0] r x,6M|XEv2Y>yC%vKB|] %@&. z R . >Q}"! e "x"!!"#%(a)&g"a"'-!lڿޏEtl #OgIq@i/.t&zS C`wp=E%ZDUqj_p/^7w5&Fnx\xyVjIa} \ G'E &m!R#""##O" "#&+ **άD=ߜ 9!yF y -o b|_~oQzFd N9`&}'t9o4}Mne3bpCJY4O?CD -ej w y ,_ / uNFp2Y!+ !BYh%ey#Y/&>tDiB_+y:'801,E AM0\Dd=LD9r@M<34z8.w5P0]K_m* ] 3 Z M w}B,DBre8RDrDe \W7T{DGcJkxB6(6PZI=uPN./VERFI) ;{i'r)E@F,p*4]'dQ#o=X[$}gzfvK $B^i.G`v-mZ$<vpMmeZ6"1t"S 5*$(6YtrO7HYFt_j#Q3:zd4$Z:7 %^g?deG6"6UUaaF,yr#l:bjZP|0l8;{(/<"2st+h^\a`^[v3"b&l.=^|).,n}ao}M[Ib$:(xhu-24"@<#~yVm0gxoR{h`jdS3sHt"Cy-tI   VD%R>./9Wt=1az5o~?_)z~|x r4o>7.'_dj.q}nT3>f0i:hz?)VaN'C[e- D|3;9?4k%3CH<)UP{Y+][9LzYbR5,f&Tjbk.Xs!(0d {V5JPErb L(9D~b yd, ffNGnN `02^HCgcFI.;}H$rVGe/CU' P71KY>9E&xEQ>HaR@PesP~fz>HOd8TV*Z"Dw]u##b?5ro\2?r_gsoZ .]@05Xlw8@!~M7"n`s>"1d| C=^5 *~F" >([np3|yx3-G_Aqo.eIJu'kp6-W9X18Rz$ ge8; \QpqL2^zpC?(@S\[kXJ{gw$)A'!DR[^\~c}wkveCa=UYC)XnVP.5a;b$ =XX! ^o\dicqK~/* ; >!?kmhqfR@`SGOZ{cr{rI@A #;_BB58iyt{gyy{!n:?(28#o7+F(7G(OBSb3xK`y?::JXj]u}zatvbinq^coq|xA{tg}{tcyra5;2\zaK+3'*E)="/216)lfqew~[XFWmS(!'Jb$,:? :*DU5,|~}{yiyAh^R"?I}PMOI&0MB{M ,RK3&b  &*; *  4, 5 # ), )+ -N;IZUJGV;#5A-3:') <)A!8X:,)!09EOD@KZKxr<uJSy#Ga}cvw(v8CmiIzJluM7atDYr?p+ZR}$EeJrd{0 e~gI)T9R| p bf_#x7;GEj"'%myu@q ["YAVRkI(vAG&t 'vy"64j8a9cHxXtM\jE;h\s"F7Gl<W\1R-g| !-w}ty6M;~X]g e"wal x n }9[sBk;0  +q) <HWh}}{ 7GuWYHX.8|uL[&x/X%BCr`2( H*DGznDaN![ K!w3YR3bi# mez <*]F;{1;. y]=M]]2!tTA|/ds m#}lP%eHN/0^ h2Lgr,O} ! E >CHC@  !Q>Cy f )Q.q X % H V'i4B7b^=?<4Jrr? ^rk=m:g  8j 3 )*P6kNU?HbEx<߾ߘ]z>) ! Z P m? $ B]pCJl&m! A = J  @  &cQi1cZi@!d;T*( U#E|Xc M l,MyGi: q!"#$%$$" us BC!lَ]߸H5 MC6(+QD8 6Wi]s+}-j:(  < % 7 + c f ! \G/#+}u"F&>Fa7j1A1MfNU '}\6Ky ""E#1#!O /R {ܙפ8hKa6'8 IeBm5 f?4d,Za  6 Y e  }-RsvcDzX}:O[8J'z8FMGN}pHAMoe D cUP:CS! "#[$$#"V!" YHɓ=Q 5+}I^s_Q aFz/gߜ)ޡݙu7HeaP B @j!?3y y,q U 6 9DvuZFOlLsLXJ -Y  n : Y  qf 7o  zTc|-<z%Dے;r$*Og " P  \ zQS     & {B{o%#!!!:2[St$֙3? <",Nq;}  >~)z+ ($r<P *)vW(7tDoD v:wU y G)x  r 9!'yLFn(p0vE[LDqW!k-T,T PU+MTof2 ,4 پI=9 ~R #aR>) -g] ܹO&^ O W`H  :  [ VUo9:*[pW^9 |  ;::KP+:> a9m8Av1Wx9cL&M't #17'^h-nR " I%QC; O #ڝ}ɕیS YW {Q ܝޥ@$ UpB3l  { 5  DzCc&VEg 9 L 0 _ y w 2s@Cx^WBj].jT&5 [NW+A;98yvVG96bl K h+d)KRZ 6+EoEWm Hr1 .L^DއF6L   ] BI a5"9S ` P y M K +R1Q~U 1$l;&,nM"p!'&i%9f&b? ,7vuHX0c-0RSߑݑyܯC}|D]_YZWj 'a[%PH:0 =:f 30Z. w L  T$pV]hk)ocu*b # MK-I>%*w`vTF=nAuzX z o4?"o E&H;ڿ,Q4Gn f W 0 M mA }e@;3TNh(>]qDxJ@14sYB'+CeP&J K>GRi7aSgZT6%Ga-~:IKEg@Tlml,C6:3qG>={E#6%jE:\LGXe@e $mG`=;&q;\e{j0{Ry|WK$__  $slIB=?;~\a!szs'<b/G"b.!Xv526pWf2'$!X{c| wTXWE~ @ CY=X< q&uV"PV!rw tEcd lupLWC>s I\ Sg( ;7Q01 R&*(oO P} 0 :F ~# 4 0! a_{ +E9Uol! ) :(`S RS# xC# . 6 f z] o5&U #Q K ~r * M% zH,X;X Qk V~ CPD &2 Ne$\9f% > e9qY~s 4 4 z_K qV! b\=<di03z"d Eh`J u ?  eC8v2V  O9  a ol @MQ|$0\a ~ j p|`GHm: DmtW0 L L} 1_ ,/=7  *K% ?!Y \  QLD>G5 U ix b V{9j[K\4 Omi Y/ () GytQ6~ n1 jMc/L:f o m @& 2&Tw{e zwR+;CjSH! z~[|dda}5$' 5 .@'[ omv\+& :, /{E" gt+A , (^hPc$޿U64xF-  ACNQQ 6h/ ,"HZlYO o#Eu ,dUu 7 [6 (7W G K{ ;-v #mLqK(rL8~ )]|a pP |J/" Aye  F 4g J zB/ Rm%}H[Td-v$ 4# K WW) 4 ` iK\,!vM>|dv * 4>/T> 4, pbk&>,Bb(po-,j"wfld.=k k @cVl!Ib x8%r % o# / l~b:n31KbH [vV gL ER q  YN \#*n)y/51$ "FmAc H}! 9v PB e '  |E2|!6+m<!%$^` ^y?YOM&< +mwd n xs "4 i)*<L0%+{rk?e>UP Ri;J STD= 8N:U].KQe 0| 6-NJ } ) \ + d ""W1Y "H)xi6k:]Tk+Qe)Md~Y]p' [2}NMQf j k vD +m 9/4w'|{%zNVPC OO ~H ~T!l35gs .Xz2)D5_wX-ppM^NA8 {Q[6 ]u "Fy [K Dr> i O Gl)GZ5  '{Y %ZH _}T!-q %AkOl|/ 0:f a8G pN*^+EOyTTx5Eoi 2 K$ y(/N  0LY T Cs-dA n8L^VED<V  {/ 4.K\hl d sO}$Y1@0 pZhc lj9 Q!Y Fq: .a",`k+_#  W `Fc;uR| 4 9L]D5p05y7x~J Ye@EcXS#t.r; L 1vk'`Qgaz/MLD #M% wZh Y=  q"NlLK @l 1 +n  . 7# IACHKK }p 5/ pPPp^/  LNgb0G53E  \n_$ 7wY yY@OO,w$^P?5W r3y9?!?vmH.1RbH FaG}.']p(dau$?=H0:5 Asp=F>GI':T#xRXWXG@vE ?6:Sz=42Wq4kA -eI".UrA}|,a&~ g M>tOw^={0^ # \S9?6]V!'j{9+Rx+xe32A[4EE :ji(TvVM9?6X 0G;8FMB@ Oz]MVRh&/%/v=|q8''hU]DEt9e4T~?ZEQA3K5+0yOHp~wYod`Rrqv_{hbx|e"p3-$9|7zW\}rHu zfe"_I9)gAvB#b/JT;m0D0:)/FP{9JvrY2k 62 =v ?%o~c,</~<R#*Fpj`cAdB7 U_ry% .G%;TOtHASBh/++2c.40NkXW&0LT` sJ&-\@7-OG!w rlK'2 &v`^A6!NY@SQ2r:J.26}RH %"!Q: >r`?M19'0 yuc@:9AX)dSG_{4|iinsHN.a&E,Z- B6*osYAjj%]{\8Q=d{/$N0_(CyKcxG>2|ZeUHp+eH6|p"8ebJ,] *l<bpEB""Wr}qu~yg%*U`CJEF.p/%8#<A*/Qr$[kZuz.mac=qi]\Z>Gq-y]${Pq$N->OR3xRF- !QpgS)hx\MTBUGvP}u`7&F}?-t>\6i\`s(m 8*@BO@ Mh%jv {r/fK0i ^+-2p[ysW+. 0{f oZyC't!u1I:W'NvTnEPi60h>w@5a$/1%A xxU{D\]|q&S@H\~H$\F[/wPM ^^"9ng 8 7J 8R,tncSV} W"Nla+M*%2Q~00H^TfX & 098I\p8j =)(xGevR43ZYIU^`r|D U Yl:/}|sn0#M^ CgyTc2<^[WSrvokXDrX%3Mn\b1N^ -]P `|$5(HS_w{a)C:*cjbH).0:70+/4 c{mtVVp4Vd e =]l BP"9L2UQ! <; dv0%ts~M"J?nqYX7On4(8G[|ea_z[moma!3v$60>J.wn|fngtww>Y{'B%mffjaQ-aa\z90+CB8hfIO[IyX{qrkvdccjtvrX7n Y@ToqOo,t?lxn;b^o QaVGM1_h9z@6O)GxhlO.azyyQ i;=v{z6 1*  <u##*(;6/.I? FE,vh"V7/%+We0 *)@6;0FHW@8%< CFa]a`QcA$DQ[OInbqvMM\F4i{eW:Zvw_n\Y`b\zfezco~m^l_ffsPER6vd0/!94WHaZC6Q6BO?$8Plk7A9+A53 /&6$A z !-6 #*B)RW12UX4 "3qqP_>KtMVqcIE@=?WfN#Or[seHQ<Nt]w`^ofuy|zpxcPBZuzH=So~  !   B@:C$DT.=:)-flg4!?WN[]I-)E3(LW<%.LRCM33:5^<,5 'TKz{QG2"'#*2NZ#(8  ChcQ8'9 #--   +&%% " qkR\s\YfSmocZTDO7BTN\YId{c>$0)MDA; ?0% #.#*6,u~w~qruoWzjyedoZ[RUtC*PcgrOGH;__SGFU<;dWEN:.%) ,]P5;+".  .B45Z= %*%&)"4;9;9E:BWPVLu~jgn`\}]|osW~tr}|~Z^w_?O>:RfR2Q?,B\+$9Q /  yqx}hXI)3>g_ZKXB8#G D9 !5-?i\afEPV+S<-/9%.+B-%CJrwbz}oree~YyUxdjyn % ; "3CI8OAFND[hdYJE8D]AHt`o_Ak|x^xTvovhk0bvZ'181-ekOsq^@KaLDBD:1MYhrnosxjmYhs+Y<'02&`vlvsCV]U-.nL6*;%<.1# ; ?'G3",63H)$7?0b/MZRbYDJZDo<_{jd[BC{juzzKzvmUXCu[ts]Lk7,^T=]gQdv|r*?- ,  .(Ng9Mi:=2*?pocketsphinx-5prealpha/test/data/cards/004.wav0000664000175000017500000014115412504317077016421 00000000000000RIFFdWAVEfmt >}data@+ =08[+Ni"(-H47$ K8HlFf[Cl|]|fWuP2)Y&>!) &+I8 4et_ikT685# rwRPSNI!%&  p+0%43 :0*tpsP&aWl\l|]o{*}qw+-9j_<'C8>[%#,5 /&/-% AU^).-2*"?,'3<&'!Ysx/+' o :O]#J sIOV (#<% zB/5l;37+ i: =$%GR7}w]uIZ,}q8vJtZS3zj6go\tQ]M(pW+_3/&0S2ox!N 7^DlwcgK3\I7U}PiDyt4)?1T)JR%>N,A1:;TAkpM { }_ a9( ;"Mg| 6)5) TX%{}3H&G *2!H16#!'_ #2 #!9',) "8vQp\Nczv[]2RdZzNUci{GpeklnVp_NhfVm=iT?}nbkic`4[pioUu[b_p+?Z75tb`j8lSBF[gI3UKZI9z2TjLMR7sq^e{xaNJTVo;oXSegMV-a:) e Gmp~h8WfD4DFR,xHN]\'_{8<_P.S6e*0Zv\vvs,?#($[E0D+5'FA $C> ED [|"PbShD`xAavkTOm{6S}0e{{<6}gG\HhD{V||x]4be! 'Lpu   (R-I(e/z<?}E"vU9(-T=9._ASz7/n!Yc~>oDJez $maQ''TKv$i7*$=%-j5V hH< Yxmw)fSh ]?V)Ej#Hf16Xw8kO2J F<}l*E>//^K XU3n 9Tnpc+@#Go3Ss0 .(c /J]b>o&73v4m. w^njwZc@F?DKb"D_gPi6kKyI[lLe[`XpNW@$S,E)BV-}=uSDOqQ YFr9~;>RFm%D[bXy?.Uctk(xV|hbqPnb1q.[4#(3E%~S#^v2 fH#g[; "p'(L<Jr#V^ Np AGAxT GUR)O+Hkjds{|.W 8 E=>DfcU$EsdQnn_*qYrS?:_2f OqK{V@z+ AI `y4|=,A|88U"D"wR5f5fQ$^5v^(u> CMjHexrWw|sUQ6bAR!"fNN-{)Z BRx$}[ >[u =P o~^p t>D8Gm,=i`^ub}KnfX|1W-(3|Nk:IJe!W [O=UpD YJ1heaEue:GQt}c4@ \aN$GUnF^0?l>H*rr Q. q%o 5 ~g- :fto P4(T% y)=F %>i AjO$ 'e-h>YBlKb3`})x$-6qw3Sa c~O >WiL1j #,|Hrjg ]Wh^NId|Z}Dl4Gl[qA)&/8"zJ@[ } c   GS1   Q8 R%]^ sK : W P4$ ) a l d_ 'l'`=}n8I<(} Xo/C $T1H+u+ j H}N= U $  6"A'%^+5/407974{ Hڔ¶tpbܺF~ 7 W ;0F%mVB < H 9Mi Ak,OQ_;_q V06N3"S_QEKR%g % + v  5 P ^H !%(*.26]93<>BFITk\ Q1XŁ|І3jw)AMRQM%B(~a2X:$d"-&) 5=O sI<2jDHtrjIiߋS߼QUM?^"VUTvrNo\' pk  V7Rv. n5n vS!g#$'R),-479}@sF\JPPfLQXJo w0ȂƁq^̲$Y}~nG]NJj}~ʅͶI&FvJh'=M V-S@%- jݳóDd ] 3 k*= 6Yyԥ NM pne3;Δ=wL [Be?  WUy ($3i;AIQnW:Z?W=OD3퓒9ƄXZ)#>LXu~~?`RF4!τ8GrEիk7`Pb3GVD_XIF10 hv 8 /w+2A/("$5VN g3Ra֓^ *4~72'<rٳ6>:٣Ofn,T/Bs V ! 05!%$- "!H!$+u0U36E:82&p5py<1GQ4er}|mT^ ܇θ˱*@Cz. CqJqMI8!-Ƭgqos#-241( a& O9@׽q(M1'4/&mT@v;s$1Yu[)bRI[1wp y  >,#'06;$BD?%:7/~0t뷋X:W fss@@Ʒ\a#iL+c)CQ3VQBr.2,3ڧ~Տ> *52 3,0%~ tF.B`[j}E ,67^2(Ba|_Pְڋ'5[T n Z^Cחa; w &z k^!r)R-q5?BA!@PWSA+M%?P q*b/-&Ry \=Z9Zt&q29;7-i 6 ځ grXuz+%ƍ  @7`\nt _  k9&2/78<;$62.-0.%TŃ2;C8luw3r9 ̃TQ>}޲2(7=4PZX(FK+ ̇vf"w,E/+$UL, #_hΑɗ̿ձ^"{069:4@('6܏ݶ4 {QiKʷoƌʬڈ95 |BR"ߡ pzk"&,}.0554e5455,ʒr7/iYwmrpG mE/7vu@`;9_2FlTH[WD $+F z H! LXĨ̃ۙCT,4F4q-#GR l (S,?JikR%ʷ_iq%TK.lnJ E7Tw& #+226w;==<<|7U- 'w)z+iz{Ljba+Bl8ߤa{Q3DCҀ%% FZ]_YM@5v,V ^4) , +0~0,&Kkr9ݺT=4 %'#f L_9\*$O i^^1ɘg{qa)kPb &qzf%F"#'.73>A@u@*?A<4@'L^up"Y-lRxaWaW=|3LJ/ 0TXeQ`PB=#$!9ցp_ܳ/p,_>E@4" }()Ί"l > o$#GEFL-Z[Y9\QTA SU%5 s+ R|J 7 B7#x)-"0147Z:@EDAM<60$ց@98,pqRDD3RjjYjŁc'՟;V,_S?3* bj{ TTU@)9C4C9*"k|: *11*K=4V|$fXW; )b4ä;edwS ?, -~|9g'm/ ` m)xvK" -*f aeQ!r&o,156R9u8L2.3;BD#9+&E"_oU $o0?NFSW"`J[Թ=̂ٓ[܂GU2$`=SHC5'>p-c[l(}@B!G# #]qۄl߈p2Wdq^qMT9٠կ  ا@sQ.z75DP y  ) vQQ P  )/49<*=:8&N>;/5+K$!3A" d$"Q5/-=?H1=@$ "'7z֜xS   '//(#" .(٠܀! ftPQziۨ@H6ɌނRߪMynSnwEf Y  p  A / b #{R -&z)v+-,(,118=<:>6+#"%)0Y=ZGobi݇|% WC<^NRE i!1',1m53642#1136601&{ ;ҴXDӴͱ(6{-0'("U,09O3M8^BÝ?ۑmI0Y v?<C d?^Q[C f%18d4Bӂ!XnM 1 K_Lr{ XB &+-/2/3y2+48q<=;;4)$M&'!+˾W#ƶMַymr  v($8 O)76t&Y< =H;qZo5"z! pH!%! O OT#H(4l6t+%nasDB<}0OJ%aw i 'bW.#%b%&'9)#,l.034 5^3./+(&'t!8K xhӫ[`,e'k.5 N1(*<  `9"rq+;6YZ;0_L-0]0Yj% L$$NLP)D~)9zI:&#xG^k T Z\0)O "s###c%%$%(k+c+("%"!!t 6qB z'ژJH Fz(rDD x]nUed)[b6 ? ! X 6 I # uzlNb{,Uj]5]1LaL l3 _/xUpgk4j{+ pRJ*T934 'L>4*]aS9oFJZA9<bD-#a,)Xe#EB3eff00V3!%QM?(CO5)O}va@6y,@eW7 3S5._ 4 nO eWFm2c_S0@ (<WZz cK>Gy`{k9[ewRG,#a~{1Fz a70(!6Pn}*9>rJOzS g"y1c ;/;/dJBDhw8mB /il\idA7M,gJ-$0~D"ZSL]dvG+nmMz h\ G 9Xq B$f0cC hS8SpxB6T}0x!cRBX1X<@[61Q;MZyYu^eyg[4`Q!BG& X}` )s ,"O&5^>|-yZj^l%1BM4`6o#X8Kx YiyGTUkrp_dw n<0 XiS~<<)x !HoMH/< wyix_YLOxU@?e^l`k1$QrJOI=*x8 oD=q5 B4[L$kPz z+wwS>rD8OhkvA.9Z5p MCXUxZD/8Cp b:^pPO#J@o /,z.nKt~r#EPW8grug0!g\]r&{md jBCEk*F:Y@(8yLU=\N aRF6\deb G[_5B^6 P_oZbH=0%tJhAp/Ba=[OY+0lDg}Ps)9x^s}(K; 7G5?s69T'5 F)nQr>n5v0A hx`[ ,dFI^Hq\yA(i5B'~w VxC5j`S/!4I|~H8j69z`f[gS<82)1mq| nM_|Q?7?K~/|c1?Z!&<3 V6?> s8g.[9"e{`qd]^$6/~yafHOfGKdXPhJ{b=4Vb4$pV> Bq|#.h3FO9.X83dCp{;( )`SN"=-b*VXP5 :&n/crbg\ 7fb+!7X1 ~z]F+UYW \}SH5,j^l69'h^&7 GX`4^^Yq:D)%!PbMv> +6OI*4/rTndu1C!7D"X. '< R`qP/ID(7[~yz* MAHolr@$.FQ2b,&-T\\PA3pj @HJ3tZ"Ar~bA'j~|?]U(!R^;@EDL  yrw/J}y 1 b?gsu^=E 0, <!n`EQH.}&TE<$;9l;A t~6-!lpHTkdWI{}=6'TnN{x97haC]dEBpG]:Bh0 RZg}qo=-5PvZL_\M. IQ(WKRV@C6qGStzggtm!xKw -o^SGhSm ~;.]rj^rGMV)5.`KA9 %/ ! Fm`nrGdpg{wvv4K( sqLHx(Tqa586R6FFd4C|!/ tPVW"._?TCdMh Fyj~}-i!4r!4ItDI|kXur ~S Z' b9\v ou p2"2rY1Qj'>II?EJT "]tXw<X<'4,CrM;u!d|~'PO8L\CW1X6bW/Ss~fv#Sy9'!\BOj9X  o|z~ E~R"?8xRB4WH GX9@PaK( 4Mn(]L !7+lF=k$B`#Qs:h #eH[M8 N&g3V#-z^%DUudM>coDU'5 1Lv`MX]VgfpJlx!iYEd ;&nRYut| #7"g?_8,#WXv@`d E"uuWz$/X*mLkCpr\R4X c \A[<L wlC\-70-5=3l2b 0EzO HTe&'>}d];X]r<oPYIpF^AL14O\Pi$n=zv6q+7Sitou{+s,%O5B1)B%6N0M R6mJMzLn<K\ a !@jZpH{bY^Y@,3o^gThg j3iED9o9&wI4fu:kPWj 1?D"+-6[a;[uJQC8e`[l&Z[ qTpL' _XO)v21?-lw|+7YslWq!ga: WZ@%}yY1> Md"*Z@&Fk}+7_)0(s$1ZOgiUwW.>49u*QhO<PcZVNq .9Ghh6'z4<}6mlYQuzyCS?Rl9mG{p-*%R*GCx wX]5Uf\j'}aq|=+~d,b78~^dR0v^%G}K,R9 e'pH*9QbWt" cfNsj4,B.}1Rgm3dD T1z2<AGYFyLvk!EJ:o_ Z J>  2| ASCTw.~)M+&fV_j@dSB1W\%6(n!+lp}F%%m</1R1k0CLt*`0+b0O?E[2#BfM7yHSZvOVArL({'! ,,/vGU$Y < W7fp<h1)uLc*gYlSsY,0096JsK2^|z!`#~gn yz,G%"^ XN- +:ILpD^I\0) (,juHf{e|dnpV\$vgoa%q[y Da,y@_ a`G^d4I=}dg0,v@f/O~B',c\=[AWT,9$C9%\5ycXwGtmETyP]znac _t*Ox:d& m"&$`1 x|;|+8TbLH8"w:).Qc9# J ;+$")&P(#,ʼФڇK0B  g:BEmDd$7;WB&-({k6Ec@=XV7xDwy2JAWXOۡؾ\2 SE/0Rr~g k 9~N}]: "k',0p4.7885q.(;^t/00<.532(nS ^ bC/ Z/,މ֓*2t =&9,.-m(Q%F' ( d 0H0z6+slKE-=[YqMNt SvGH  <.r"G&6'i&'+-,A+5,K+&L" -}>l-;mp;aSI>(>8M#b\K%s!O|xjۭbjȍЌ z);zJQKl7W nfE$?P; B).(+ d ~ߟZ-M}ee k Nr=$(t>ߺww  FQJoͧ~ptAR4^z_ 88P Y #3*-/-(& (\((U*-@1K2+-;" ъ7޷i(+]hWUcP. ")l(ʲՠj:mHfPU$UHD#p'xŻM62pA "r)1 7I6)*Nɼ߅Tw0r h6MzuG Ha@9L~qȤ0-م{.I Nih-W~Ϧ :C7 tVTEr&*x,r+(p$""#%&) /r44u-]#T4n  <]gcF#=E4?% z rJȰь9:SUsI?44cuFwG!$7?91'X=GAդ=coFY9 n Tz !!V ^PoC*4:U#   8 z <_fƻ,r.ߌRA ' 3>Ld4=k :.fn $%# t #b',278)4-s'zC {ېˎ [ VdE+Y02B   8Mަ|5ӸW4?NM;,'"Qc\#bՇ8v} ,:<=0XjN,G$(&V;;5y;R%QB:l -= B{Qy5c @  dYlJa  -"G$#"z" &t$n /!@#]%B))%! ,eT`ֶ,WQ*By^e `a{0.5 (1~? NtКJoYt! p N *Na0vޡw߶" : oMy 1r>j  .Jo{?vͿph4 81FAnm?~\ 7 +,+Bo= QnF"%'d#!! 6$o*>(K%(*)T' ˙6ݳ8 !D= K ?'m10! e`:ݵH.;c X ]#V8o'N)&u S\C9vF: j9&53 Ip ( pkF !k)Ibo L Q H3̗+"zbd(q2BLp gf8lyoi qY!9'+'$"u"%' '7&'(&E0AB"&+ l$+2A#@*OQN;N+-+&\ j8FC "):A  I; a | V  ^?~;js"Nt}{[='&A`DJhL9%;YycW$ 7 ) 5 "V3 z"v&|*+E)'a)@*(s#7J+׶w/8HV(W2?iA/2tMܭzO&6.F I*P ;` EU^3l]:Q   A[Iiy/#A Q + X:5)T :oa8%s7B>hA8)m_F{Y)d2|ov&a\fTT &lZ~' %"qF"%%""$#'$u%%:Lj Y$8'0/  \ PhT  1v!o!0 ` m 3PW{@?1&kR=/ :_=P))l6}xO+ z e3n_T3H@durH8Cmn`kQw/P q'E irj "'b(#2 G"'#*%Wdݍͫ.# "/"[d_w~- rC*H p8yt=f?j$j+3 b s (lSpr)`kQ>s! : v 2Ke3qg*=/R$Jj#Hr-bz"F!Ey O+ T|3Sw !I""#% (s)&E诽-ܳ . q}7t 3.&/&u _LsqP97#d* Uej   @ ##Cfa48=KFz > N L  `Py36dt0B  42\G[Z!>No &AwEsWN8^]E o Q 8 *)~[P[.)J ""!#i$!Uti<ؾT& 7vNeUa (UVQ{_  M8c!'CZ:$>VR#Q_^Amc~6W)Z;#z(9~FL2.d_"~ !o(6  } s8 t"`! c T1<8B\ 2x yy-\ 9_]oV| uNeP f `i 3  z`eXN[IvAc'+57w>^f%%RcR Ay[Z/` o)m"qu N  w , yvSl6j!( G PEND_\q3ok  ;} dhs_RhpndfGl__T-rs)?t.urI q.@Zkm3ysC.)qg#=.10]e  S  S nUc. :!l>BJM8C ( 6j r < D@V}Wv jx(r?{ 2tq{);WOsnH@{UpH4*;4k,t?>Sl[H5XWBhLJwOmaL-(]%pq$Uvc e 1 j  _ [ g N }WJ$1E?YMdC V;vqa KXo;iyY"_A*;t$J'L%V3]5sN ZJLc|~kg?10LVd'CP1pu0k Z>WiL_mF2MG2G.ec7\ff ?DD8VIq}25jocY/T #F-=>_SQRl(E\1uAw}K#s#p3s0=#MB|U4qF7:'VYG9|uMgbh=&Bf b;@4cm~opQ1o K&d<_d&xcp]A*_Kg{/8h5.'at1zL$qDk/)89J 8Z.zM84^G%DH=<B3-U ''YGl~)8  +64Y a)+GTn-/ ~AUsSO*,l Hnm+gWq p~7VXY<k,-=*zh LO? ,4`bJ+^CBIp$ bt1`g  !Zn@7Rvg uc`wx2&owOE+9{L_0RV^sn;9]R=C ,rjw>RLO2O[`.Yri'!DgsorWvPg4FQ3B}FU%3Mxs9s_6VE$l<!OZmf AP '^~ /5R5*DIrZ8dn3U /r~g}#CZ4'IPK10;l#\ txylOcOaS";9M4o?: [?aSQ7La%G>{{[Jv&x{\^[(A {1QFTsO}-;,G%VNAYyp|:`W`ak9*&0Mt`U}Q mgMk,J s2r,U?(I45D*hxGg .LC1Dt1f2/G2Lkv"2]lIbr3`bNZQAnRx#7& ]_oL|\m57SMLDWC" ?+''/QvR"?EHR@Gs4dU>[h|J\>4UPQ#AC FvZ;l=='v3jsj7~(p#?3lfg=>&r']7s6Pp<5 roB]a0K;]Hc<}kCY8E95 v5]dcB4!2 ) EXk2m{X+0 RIlee<u4HzhG+XHGOqSJ#b\g[ s_sJ6~P>KmrW"l 3i"c}YGod3#APV\It> i*f|=tZB/'J J^M9 $*T3B &zHZ^7yZKd_H6|% crCp2(YU<HM{%UM_klNUcI^E3Y%^&|$A?!l8CjDjY:gNf9<!Ipu!d|?@mcEb%?CdE!?$D# D)<DGxlwQCHWDA [M"&Ey0u-= Wd{!#wB, 0Gkp+C *tStp^4T. `k)x4p~woQX6 Kb^?$@c"8#e]SC}F~ceqC[@S+QYuuh=0i@I g^z{ _I3^5!\i#>,!7]1~u\ask)\ADhD7OA*Nfczd\vjdfk|0mcT,cSd]a;@*%%=b[jidOwJ\Pd5n,ztNIK/ceu]@9 4 <P3s-O= I$C.ukz`x3F.sUQbI?0R=-OZs@m4=%/(<1f'Ns"Ie2Ts9VEX{iNC)`{}E)O;778)vE$PYyX a DN3 rmM47kR02}Mue w_t|uX&db9E##%  E*FPNs4+I.0$Smqrz}nm|im[% $8$15..2?=<21 ),/5%'D8*(.01 ! 1 7D(3* "1 !61' *5;+Kll_?XJ5P9RpI\\NnD:ZXO@3&++'"=7HHR[MVTZwquzolstXP<<R!  )*-Zibz}f]URlVVn_NK>-7PSNR<1Vor{jXvavmo|[[_elclkl~tie|l~scw|dvxqxdz{\Pwqgutzpzn~t{Ng^mem[}yj}zqsj}~~el6@[_Pm`Bl?>{RY[N^gotvczt~ywrw]gtqtw~_mqjx|{u]t{}r}mybw~mowolsgu}h{lW33 9-1,1,-ESbUM_~GM* %+('NKJFeqrhV ( 76W`iusktw|YYk20D6%/P?3D;6@QFBVQI\C8A\RGQXbbNVHIB:=#6"+< $!!KXNYBJdQD19DCWGHX^PAOX;.3 1 ! 4)" !!.9 $+,"I@A+2-5M/28&YCcjs{m]YL3iu(MsypZAD8+AERLC8)<2;8)! *4/4$ #tqrg =Dd|{^hcWW=H _BS1"H?=VbK[K6,,1  xV`ht~pgz  O_Z>?LCJ_AVgV0klrzguU3(gnH/+&Pir A^,'9u !$ }uX]4'532.R=O{-<{dV:v`8(694Dj%7=.RgQfR-mvekilmp}v  *%&(#~scXQLZl'_x}C=IqCIdTxt/LVu|ujJ ) @OJ[I=#'(PSF`e\V:!}}rZRM9U^5UoxtqcL7xnEGPKbl!"P{zZF:yT(&>4^kes ?St[xXw5u rkb)b\F_ !0KF?fwfeV&pcr!h}dW)wlm|8\i:TM7%)_k*_E("lL ~{Ps*XW2I=&Be`K]=@;% Hs{- p|uvnb5@s?=)sO<>Z$0es]LJak`2[zg#~hK6%/0b/)*Qczoa&|x 1IcYMI&zA :p-`iP&{tx]e"JhVHN001j9+AQHbjh%,ipT^}t_QWt~ }ytem\1( pocketsphinx-5prealpha/test/data/cards/cards.gram0000664000175000017500000000067412504317077017344 00000000000000#JSGF v1.0; grammar cards; public = | | | | ; = ; = ; = ; = ; = [ of ] ; = clubs | hearts | diamonds | spades; = ace | two | three | four | five | six | seven | eight | nine | ten | jack | queen | king | lady; pocketsphinx-5prealpha/test/data/cards/cards.transcription0000664000175000017500000000027012504317077021305 00000000000000 ten of clubs (001) four queen of clubs (002) seven of clubs (003) five five (004) eight of spades four of clubs seven of hearts (005) pocketsphinx-5prealpha/test/data/cards/cards.hyp0000664000175000017500000000025012504317077017204 00000000000000ten of clubs (001 -8533) four queen of clubs (002 -16018) seven of clubs (003 -11241) five five (004 -11504) eight of spades four of clubs seven of hearts (005 -33568) pocketsphinx-5prealpha/test/data/cards/005.wav0000664000175000017500000033277412504317077016434 00000000000000RIFFWAVEfmt >}dataеtm|}x~Wdt|kthjd^l~ttw^jxYgfP]vyNSpPmohS>_^hmdtpcxrbnV`nfskfgkynXno\^kvipnmxigxou|afZQVW|dGY_lb}k{UoPKzgP@?N^XX[ZbN[VNh06[7C_ZIV4GgToTrqRiBOiNYO.4I9)C-8L<96EQT<B9"6?:7?%'@/6Ql/>,#6 &E9 * (@-814%!:/   y   0+  +'$ #  !!# 6,21  .%" )0)* )&!''  "' +((&# /;,$ 2** ."$(,;IB*4-,H!7;78<J 720 >4'29!71EZLK.)%'1$# '- ! 0!%+;%4,"39F,#<ZCEHEc2.&!OFM=-?LbgTJ2".D_E?`CD^21.*1KQPXTLFP<3C&<;ED!2"&I%?[*DN3-(?5$.!4D=<YK8@2I."TI3@F4:3          )  ')$1!) , ,".   /!      &8! %5 )3   4    ( "#"-%;:ZM7:!*6*4.2%-65:6EVC5%)0%8:"1:5 '(*CAFI=E:$4D-0.()/1L[;:O0&'$))%6A*22+@:WhJPB'87*?8>R==D"DD)>3<SUP--?1IV6MD2:*8WEMIMRGW1IW[kjiUtbLsltVSNIOeI\[T|@6ZHW[=ZcpiOaQ3CE?M:$2<56CB'6=BCC29+COKM75P?8>(/16XR:LaNBNB'2-4</! %#($ +6(.2;+*)$"&*&;$1C'%$!  )+% !0 ##- *-4O>9=3#(<3? /&  &=%;6+O4*$ )+<H5. 6.,;6   #!   -$     " "   %!$,?<@A3 ,A:"+2!"8&,4&DE4=:1/P>>UAGG+.PRQU?AIIcv^imXnuch\DK>Inng|t|]j\b`^[WUDUY:.2?J?HN8ACQeJA8<#3O.U?*KC=A+ElZdVI]E9N?37KD@71EA(>>;c=/Y3DMFE7?!.8*"+91$)$5"52?I<363!6N@*C>.4,;=&%"&B!.'+3  !    # 7         #4 & ( 4 4,!+7( >!<. )%&  2 3) 1C&,1.> 3#0@:XCHiF9PUY@&KL+@?01+) %: %%3. 01(6B$5>53##$ "  *o{zrxzy r  y_l\KM=&* $ *U!TM`@^$ԨHH#q{Onassf c F' <.+JK-t VU! 'xȗKӮ&N zs!(!V"+ ^ oJ ߩ_8:@_    bz R4FN.wl#N4 (D A 8߅=ggea#/6p!ztdGE.I_ h ;H0'##!R%#}*/%!z%U&*' ]ƯTEQipcJ+b"AZ(<[ 5&<'33 [B s)̼+bʂѡ(D V~)&,  c gM)_\8!{ p$  T 1֡@՘͸M N$8y2VU@Dsw ` | b#$<* +',133.,03S9:4d/kl% /.(ė HZ5I 2PO4 a)4 ҍ8Q98orfAy5Y "_)q`($"r%+}y[ oVس1YQC jqO VI֓F#>h"3Au߈u?R0< ^I #V1 %!HU_4AU#*[109+-11E23.x9֜Wt/Yk ?WPj^7e9Ac/A ")(,w1,=5]hws [ݾ*A {4%IK%% @dV//m<5X9j?l Y:K*W#XػiZ97 Br=cW#Q=0 Z#()_*,+m)) . 32i%=۶[iuOƖ u6ѥ֤ 20Ј:38E&<B13+ V $:A@<)~۬S8_N  E1 J@'<&:;v M~'b{zZG r3=2Mm,-lA0RyJku~? k  & Y "+D$,1~0*&+683/0//<}M9wVE9F2 q߱򗙴 ߹'B ).j +B:-"rY 1\m,^ hϯ7H TP  xkW  `X_k߉c Ϥ pPIj,6XI\D)u /)0-*-21P3d:;k30 #,{Eҷ%]չb0 9 !!`"p/-/d!7E28  _ Nc!-a6>B' +k9 "9 6 \)ӿ՛|wԁϭٮG&yl5L 3A  ? yxbZ L9#! #^(,.y02s20l/7BGLm v(W )Db&Z̎ 4"KFi#n2$No; Q%- M iرs3yfx$:F A  t z H  F *-C͗ܫʴ\G|&ۦG%  al AoZ G }GR{#" p#%N(->/*m'=c;l")}Of T-ϓ )]O:! d%k& R'+o C~4`IEWX   w T  { ( F U47܄(٪z,ٮl_g [=h O Ta;\76 %0(b&# \%*,)szQ /Y]38d֝ε! NN{ h_ i!qFK!)u5; qHL;fZ(1  T IoD sF]UV,nݡ||Rddpl Y8 ' %-GcW3[ #%$ u #'!{ 7,EGE!8۾  m/.b[p. , @j?s |!;< . Lev+ay)(]k  G<ytoPb?Bsf&gmd + GV$b:XLGo!;: -|+Ӟ xYux*. >B ^  = `*g w+=@<j@_[LY% Dq xyfOK$7k$ fi| g34rml:wh*A[]Zr}i |5@nNK;LTn"Ob=hak-DrF(GeO`y9 0w_,Nnvfabe{?AV^ wI:v_BcZ>Wl^2j^+k@>:T!|@xUbk5G9,\Hp*"V?3dw]l\G=Ekqx(p|@w:qs)zPJaBX-ACI{fZyH+|_9  mX,\+w(Gbs0KE/Sc_`6= + !xHbZJrNyCJSmqi\*JH,koapL]F-yo_T93<j`}D`Ym)F,7n.iyUti@C1i\V(gJrN{mzZ_ft?m J]+5yp)O, -|%{U7x@Hl& P6!&CDs&U5~*\v3UOI#X *j;OR gYR 1!u5mN%v |bl, ND={,5v &IgcsTo:ya*4(d1Le  @ T ?j z #{ * Z `6] L f <_9 [W |QU~ 4q&) ` I E1X8Q#x 'Ka-PWV% QdN1p-(* L  bpWb&)07o  FrB&KJ p ] C T @  IkB6BjP93(y,:^J:D[i2 A vGmM+Fek-  dqF s !!@ 6Qjv5[c M K <j T Z6*Pn[&+=(u \( I  & UySTD,fQ<%WVCtpil ro 4 3% } gwHqRlZ$  ?_ 1=>' w,D( I?X >?ltyu_5,Pf&r,85'$?p$) ^`N9r] [ x } 0xcIjZK`yEHnv:7{D{IZW/ 3Kcgi`<4PKRZ,fPAm(7:pyZP9VIiCyo (@ne_ G FaW|Yax p} kxYbNW&w}.[QJAa8bLC @+cJ^mn`XtmF@J  ]d 1#^Dm{ly]`G@uG[ R2yp>l!{r\fe]&#dZ,sIBXw{qr > iw&54%W-|56[C^ xhrOfnzw;>^n]_ LE-ihI1pIgO5iAR{eQ"F21Gcwj"?<r<Cp}YYCilkdl%2NMz9vCL1VkL>qi:( ;i]ekai;,b<tq75vgh~i^[}IoH^8>A?VN[Ywx_#X57}kK  2rv\W_6a% P6w<2qsa6 eWFBXN&vft ).lO*3$j%.Qbl>\@6i= Ia, 4vR0nS%Aeo&dgV6}:ST8 %zx%}w F4iV! }aJr_b#&Mz# k<hDjO{Y~xo#.@ZpUi_uZhc 9j sk Dz yQ. 83   q:P ]"p 26 %l ~ <\# }1b4S @=F=r " {:#lqua1x :3gb ZA3* Jh, ?A E( 3" Eay&tgC@ <u h O)9 I3n )%kN z E fn tkMkw `%HA @bz "ad`v k\  i7 '|&]  T_<{ lKY  mk=\P   (T\ vc . { #2(2E ?OB :o xJ ew(=h^1 HO f 3;_ T)Mz LAl" ={O )3C]z9pw1 5N :_f)WSM&GC2S$Yxd-$[] "[c)uf|0bE#sf-C3O=e{q{LP$:?H,c+C;B"/,$XLy\<#uAB 7sO1y$3 }d W2&ZL:A8x-|6L+T2,&vRu8]G>< o%Rmf5[Ub`gGSudq =\dV4/x9FS2uX5 oRb!K^3AWiY&&,/ VY'fPu:N!c"] K3%/I)[-BRZcR|Puk<5tDuig )` 2C02RWl&' CEBfK;939iDp.{~Fi60 ' M[WNWaX'BK4H($K;@?z="t.hIZ/2XlyU|q0}e[{ }-k:rs">hw(*'_"o^*/"x41Y^Au $i[E6{PTb#f3_TSP-O\:IAdA0iQ8C1O#X4'>7-V}i-Y\H*;&sX;6Q0D?CAE9t-CyYJ/Z d%W2MI7j.G/ZN2]=9W59S!d1/$@"7 `"32w{ }d~}IUymyttlzw{M ^sk`LVw;Ts<Qd\@rKa7FQvUK+dTxyAVNcICt,PXLu8`O .bS->M.=QmFLR".&.IQ^wA$-M# 6?2  +&)<E 3 ' 4Y ]&1) S!LH ! 3O4;5(>A6]$;=7&4K+A52\A<K87C>L,@16u9 PQHXJI,;mi+B1 SefvNlAp> 3 -  4 t62a, p  v f f /(r  u =*Y; h s e Z |     5\A77n # "o""#$n%%%N%%&w''(b*+++. 0A( `O:mF5 + % nx { v9%}~.߯BT7 X:3[Hk .f=<C!9Qe[۟dgu1kB65xE#@ /!w"{$'c$o>/ף5A̍G H'I!_<$(H w|Rx)} l9ϖ[ ` PmV vێ޻@`~r p tIn#>w޽ oR2YYD\pn IUGtD':p ez!=&))v*( WwQeb1%m\ݞDC Au5@2C ?5n^%qQPHY ' w  > # 8 {1 m@ Yu> ^r4 &djJ#[.Iwt?F$I-}~=J&/VPO L f>\>B$,,((m(}(,/4//- 툨I 0ՄPO Q  k1HDw$3Ozo.)>g !1x(( B r3 -_ :K =F\  eLu7B0Anj4T/0ATg[ { Sl!'+`-*(-`33~0-n+(F=#8jpexo^6  [14Ac3o*%{C/taw{ ZH#$ .!^U( r;r$Dbu OD Haoœo]Z 8(/. u ="4&1 Lc/A׵C%' - @kvAy  ak 1|tHױU&ԥӲdr'"ir}]j|9 /7F c$B+02/-,-..ƽO4# ϊ!YpxЙ)9Vk w#U)/3'L <uݞXjzb@ _SUJR^ =(Td+V{  .F\ָ=,8C)a.uF_k_@ o n k+j%v(n&&)+..-$p85IJմg3bƒ͋sfm @%  Hy R  ܄)FnWD.2 8 " 9 dsQ:PKG^ Rc$gc3Bhi sW+8/  C7}UI" %$#%M(+T,*'ܑ6ZC缌، qҹ/qG{ULC/ 7gG Hfy  $ t$xl? jPlg>t B ,  ;rc3 :{Q 7%29@U~B"K//&sX$SC&R>[&a |T &G*(&'(t(5'C #ػ 5dXtn35$h 2I hS; 'psVa|  v b =PC~fUJ6l|c7 \ V$ 5 |  -9+V o#XrM*>mQoU ^krow jh;Y  #  -VFkR!I"#o$f%%&'%&!kbS/Yp԰ /YWp  Sݜ je djC L|2h#x_P[T/:Z1` I vZ"l % ] Y`jy}NJn4vU*jdg&PI$ m$v?8) ~ b6F."!"#$S%e&5))G(6ۭX-Q (  S4 W < {+[h2li 1wI`}/ #2 r 0 E c yazj0%s$ :rJ(>+A:_M7WJ1I g I6c o-$'('%%wH9ZPG3'Vޡ LjI"}ԉ n' OF ZC aK , )XR(&V@  Z   ,W c Y2 4 AF{d0 Ot&L+D[j6"""g"$&'YZM(5ɿtty<+*sOg  .@&r }N%?UdEoCDYIj{%tl (  !  D7+Z7@l mhg\16sA@im Uj4=G#$$Hn A:@ʘ$HF =W5Ӫs CjS> Fy T~+@+|fAo:J { ?  S I ,zU=J3C0t,\D-W Rk5O!N}w M W q@ V (nhy6V k,> 34k.5)ADؽ Ld\]0 L V 0 o ZyzW :O\aPuurg<1s=\  \Ug5ngTa}L% v'y8V 0  |  T @Z .ZTG6yATp;jqG].m;T  }6 p:6 n6< SwBZ};fFO/FDn~k#Y9'h !Pz+sDQ94x =  4 ^ U u_Fej4nKqP6 o"&m}M^'9dwf"F m39 K k % f i{(K_iQnfOnQz\YaA#vZ=fgW}>3Y cj7 E ` E ^ @  Y P {~A=_n `y1YH m*eI&?_J:nL[fR3m1'/3G-ZWfH,Th7 >(1NgW3S"A_O9 ']HtP]j<`vqQNDG%ZRsp[Jlcw7C,Zwk.xzs$V\jkC8[ L9|qZ Fx$60P9%" <3@)8Bmdmnz&dSwkT $(/|[q|E'Qaw?T_|0.@i;k|ml2?\;"l4Za]W5 no{\7/!6C-D_#Ci\s;X_!_v|z x 67X(mn3 LE9Oaf^ tv_q D!>"uNX3&;jJ55.1LpU5Jn_HUYTg\@fz *31|ti=-n;20$D]klY[swQ9XY7y^5XC!!?=! iO[Ngqvv{^G|VSE2PM<*]j4V<-*;T.Z/o>\EjC D.org<*EQD3Y8G'? M 8G3 #.2t]G 7 ;9F(M-$1_mLm/\>nw60:.a^p)ujhiDu| sYjckL377ho_vvu2~eB VD#O%Jn}0 C9#{e-l h7HjL=i 6u ~l cZJDM,/lYF%:nY5Zd&4oM@6.ar($} )*x g 6m< #&\ t3+q,d]Kg9C f!i0^AzYI."Ix\=k?PUXFn9 Av.?ixRSq6EL"vci]2, nUt MQ8 K@V 1 ^ j{Vu5HH _|c%{ 8#UF_   SWERg&  ) a8cT oHy Z^OA M, ]U.^-ef Q4 V' _* \0  .MC V/0  _R o=|>o( \| M  P]/ xONhC 7-"<cj fV]C-`UA;Nj: Y3 o{N0rI GBn )G{. + b.:Jk %,7N+ C ?( ~VjhRmn?Ye   /}S=>tD' YN _ Bu' ,R:* z : ,  (|^g8Ph |t 4\ Yi w  AD^Q' @KB9^8 tPL\C[" T~ iDPMJ t 4SB'_u j;\pUXqPr ^]eqr){;@2f 9  cE)dMHtHfI$S @2k 8U!K%+A(Wu**`]r S/8], i25 & XFM!\KX - $D ]v^M?S7#  gaTPD_ -g)'Te`"?y|BQI7, s}*?F\W>P%lwZECK) d>zoQi K];31VUn!, LM ~ \*  7~z pzo.X ~XVisQqwJKp. 2 `{V% ^~KzjxM#K$Xf|qwJ-YG-;m }P:mRy)7 1 %E"HMk%;7*jqc eqH  m@/qU~rx wXc)U(#  " Fu\r:^Iox]ixe.A ^ N"eOkG|a;IJ^Q'p@R`r9y q]/NGtAF Dpjh8 o{eNk!C-s6>C=+< 6),56ES/6<,2 I%)hI']z 4V9@U&F  'K/3"B=k" T[=SZyT8f HLDN(K9TWJUC*IWPG?zu$-b+Pj'o?]yG])P ~VT|HprBfQ_d_wlSi>QDk4vsiC.rvX[RKBc1pz}u ^]Bq?P5GfWa#sb@~s^As.dgV` {dZ\nlhMo}=\b|'~i|';2$wTcZjnOwY[N.+ESJpF/C%'DA<Z(6O1*DrdqnhJ5]J=3A{5cJuj~pwcMl: 3/'  ;^s:hyoysXz^^~U]].!@hd0br(i.CkA .eM7@EE8 gBXJlscY%+gZ*[:DFk o:{\_AGHzil|{YdX Xc 2cU*D%F9Oz8:G] vZ;hVyl%p7 &!^fOq>C`n64aICGl1Zg>j;'&AqdCLGB?NF@C&8 bB?g_#X=4>:/:jOdC!f>X`}M/ xfp!0MLO%3Lmq>JdW)L$a}2l4fh ]gtH` 8{K<3;i:tXX$ 9% aw3hd?y*2!v11W ?'M(WR.(o.1^g)CX!uvPEZmf.+*TD@{;aJkZYD6f [^ &.T8EK8o}HVCE9' c+]qelT>nn>prV33Y  &jgE#B)U1N2f_(Z|25;w SNzy2s V&Q@p\nPY XUh)BSFM$Va"gQm~8M\ sQBlCMP1xM`U+M'#fPU0'}q;U;8V {Up pMs=P5kx--r5 afI%]58%b"%rwQc_yV& |$O  Tl7lRSPLt,f-6A{8GA+t$ N yagFE>ppgR.RG7SI)C*b'y7yVL$ 3(z5=HXa^uN'7yN?I []CYvYs(.gCRgM:3^i9}zh?0 Jl04*P4XxoTy_&z+F"=| tMJ+9Ewj+?A S-O[+kK S$kM0XK%)Vq>IuXo qGw%@)i8rZW\} *OAlDEIb[L +TmUpi{SpxVw x$m6 @ |+g!4`yTs h|hbZA_3:wR4{|:E3t _7g( 9OMT{q1nUNJ8H^H$7ySV.t-OcPs 7PR\`oEiZ7i9^+3&_8$]S+EB=g lW yqp n M ?#6P}g&/gD+C"+8`rB}%(%QZ,\ J~'EKUy1eo#mINM>CCF#>F:UR(hT0$F8&~m]WTA!3 2rPLFsH7rG\f455Un8 ihgUG!>$kdMC"JMYFd!TLNiG"s8P,[c9OSb@+X](@lg6Wh BjZ??&%M=8=i l+[40[acbwr &PRSO1A6#zHc5D }8DqPA[cPn ++ F8dBk+%#]'B q v@{s l\k C8/O/o5q;*C]ZxWR?\Vk*5hU@A$Sf/M >ttGK<`y7oPdV0WIDTyEXS;3X]sZAq"4$6k#p!uY!56_`T5m4d '!2W =JIG7kv Od^=wm-&ry!d JP"(c Lwk[hn|FTQ6/;"e `V>df$%|$f8@S j%jU@yi8rq%D(Pe_ 5Rh$j7eUO8KG?0rck`*/3 /3w>(_2:eB3Ap@01R H --0"K8S 1TCU(u=:z|lSc2 kGdhb#78{mvv'=J4tLcJllzkpdiAh N9D4$rbY6J,%?`c 6)_ nLN.q;FtFF 4y^ i3&.GXe5Mzym.|h|g%S;V U/3Mg ^A{ O 2O;OpJ MMITs~j4m&)deV`) 1~}tiNdDEiG  f ^ 8E# `C?Qb9y-_S(@ qcIkv>d/:z4h("5z& 0my 1yDa) 1 m :hTaTb5l;SLغ۳2T% " b 4a\cN5 TRSruOV   M Lb6bk&P Twyap31nU]:N &u u !###5 \ Hݕ]ϯ/ؽޛQ.|4#} YN eXY(mFyo l3Z H SGySMrX82$FU9;Qk%SYlp }f$;, i!y"N##W# 6 ( ۂ҉͔̔Ӯ݊DGD !9 3 7  RzjBZ5] ;V_ l)DD0_|m8n ~ ,~-IHHZ Swzi{*^>[!N#$%B%-#DJpsiٓ>gO>E3+H  j ny<$۶Fߖ9": ~Z k^z5LPFP.f5q,k)]uknV` ` D !/|KY`s" !""  Vя=J݆\Du NiE Cs.m dl)o JGx /  o  8x2RW >  !)>LpTE# x(4KOM'nb W X-ZO"=%&'"&/"hS FАPkK*[ 6E$gk # }. vN HQ7ot Ib k m ! ~h4   5f /Xc;wZMO'C U xEKD{>-68zYtA^an8v0 o X7a=/z{T#&$)\*)h'" AbWڱ7ɎnיuH  (  g z f!" !`QK0ޛL+4o<LH l K1q% P`eQ_;wSRdx+ sZ~Q 32 26 5Sco !]"""b###!&=ؿOx_(5 U ?8 }ߎޘ_{b< R 3{ ]ICoh'gG:efQKqzGVTN^t!-j dq )  @ f31 "## sjf#Mӵ5o'wPv ?j*TL/A!]<s" Rw iWrN>{Q! ~ ~Hp^;i$V_E_>%#M  @ y | f (f!! "#$$"p/Ϟ2t^ + !/d R).F{\G f' 1+0!%Oh54  ZcCp}Aq$|o@K B4u2j+O<&5V T x g D 9 U~ !W! e - t W+_1.Cy;d2@b}B 29 O'lC aj$7V?!$ ;6E\  ;ybP1 S   c"}J!Q1mXf-"C$/  _0( [V O !u"V#$%l%# gC:SܑzpL w Bi "X#")  R) zYM3 wF7W>: B9\R*8J   mxB%6d>mzuU)sKy gDq.!!o#N$%c%%&&;% :tw ֝vr[+T p"c$;%#RUl"hEVqe JI}E-gYP|.f'L1o ' . :Y,NH^|30*o3O9B &< e"$$$L$#"H"B"!T[!x(*_FiH j  Lvh#0&% k $Yq hJlz@Rv .w %P>^<XAFG 7 x  {)Of X~Z tQozE ? V hb  R"(#e N_?޶a}  %} F"&$ K=[# b|w Y Dru EO+SyVl ? |a`7L~V9fxh@V"q T ip/ m ! $&=(#`Cܸ) OAo L 9 | M/b `;<G>Pg2 W p^$sX0d 9nC(6-T5 {f5@/R"P3T6En0 ) CXO2hRPm "$K% AlWzۈONHV \k LR !m"y)jJ.B ? ? bTz:DV \,?PZn\(QFdG011h7ygGhhF| b { d ]mW!{,;J UH :n0b<  ^ `tz4%tF}(RaG&XXb@^tNi`2>_[c,r+9HJ=Pf\pYD$0s\\Jd35X4, Z=G8YBW_y} PL^uX:keA/]a8&SD.p*a2s{Hx]';nPK P'x\nc_D^Lj` LUvdVAF{h-92 )Y1 \0JfKOjl+kQ=ymFDGk/C)Y,?nO]9>=6 }:7aWVU}}0KV5`_c,XjIDWm8swC7tiE.'h 6h6#4sa>Yk A6R_vaay[w^qPD}'W-F<yK$[Q >PdlZ|B0ektcTD wl.BY/@9z7vN@Ms!s=@e /KD0 @`y!zp} ?b~$-sg{d2`ADF%V?S}6O{tGBz'4rkk.hD]z1m8dm.]`1 XWRIP0 &:T# A'+h//$;eoO0% )*&$U1 -@FLDYgia;kaDcvYK'0:Usjt{})89'(10B59zrSiy_hTFs9EaMYmtiafCQZboe~{o~Nqvz~_}g (   ,( &#,505G!:K9 :-!?7') 0M?=F;DDKTAUR5=)?P(#FMOCAXcnusjdkeD]Q[\VnpK[sh}rwyyioQVC_hMM0o4b\{1 -Z:os9jj63&~G.&1)[/al0.TLFdW& 9P{pD:$4(4mrq\iA+=8mWR\7/4%l:?8( #!zgiG8%;o*b_C f\|pLH=JIajQ""}w&6Xfp`N\FRi|e\BUsm{gXaGd~i~pvXK\c~dtz`)6`Q\h9bxpztbj~pny`gcnv`Y:\3XL+-DOyF kT`-|3\&>z| $^vA$FnWK,"}.Wpu7 eQ <5>?3^7HB}@8dyxe\Ca6^Ii!*c1"#:ubfAua1d0r1{K3F[%ESs OG^.d{oq5!y5y iNHNye~ xBclXnOs7Y(ca C8`H|7(mTb(D- .O=,[D&CS vK3')b;\}tkm=6i%3D  u<_#pE2SyYGDj"TRF yVvpkw>LrB@?h [z3apJea$jmdNJbw>mtqez"(9|dX$y(;WHt4qX!aPTYO:Y&Gz]qDo}Lt(N/VJ?d` X%8x |JHUo7- Y'S&wZ4w 'cDNzV/|_OWGQIYNb1aK2PB ;mL?ONP+jzFL!/AE' LRbTr_By]o Y Z7gCnF:xP[go|@4 n%'!f`g+$R0*I1y1hzADB[.9uvno}C?Z]5)h\VOVf_pIKs?W[; U1V\1Z0a'BPWjIo^NCO]7wDa&A^eHL{A,VV(b~9 ZmXY*]d7oq=?7'QB TK 3 F S; )O]1=\m|qsEH%r 2 M9I"GFV+4C/eb% 'P%`f5P: zRS~F}K#vq:}V1?[ e W % ; e 9zPZag 4)6Q Wd|!-$>n ^ f x oL4)zVx /p\+?_m`2Y[f}Ph4Xagc|*\X$"1KKK ~ U #b> o`fe 6D]q3Q(@GFe~| A k , G ~ YR;b -C[SHm.pZ D |cZFY>!f jRSDE-dR*$)3 { W u # -\'! rTچv,0 L  D _ +aB 3$*~*FkPN 0- y Ow(`5;)7!p J#p$5W].V[(0:D, V v  A+okP2+K3!!7 Q5vل) nE r7K~  Aa y `)G3{zXl'P|m . T|'vR^aQYMJ+|mg^|+HM` *%2t|n<O?9 " v D ' JD+^~z $&| űkR< ( `C J N B^DvBF!#  .E(tD3:P'iC~ KWq9<9GLAjW%R%xM=V 5 9 e d  *  $@0"2$% = '|í/L u  k." wl zuZTBC.J LV l f?<<G0WSKa*Dxne]H24Zy@_uq:D;6e J 0  ,BI*f_]Z"#U(sކ+ 4o8 2N? yMO "BHTb:?] 834 ! u3jMX+dREi.,5!k.*{__R++SI$3"|$2/ @ Pt[WID "$d 9 7_÷L~N 5 n a~ C-7,!*$4e*2Fc5 h~iI&ahOrml89bGfa)QR6^R +l   ; U"n,L;"e$$;c4ź$ݡR:' ]# Yv8 g 6 )_hc 9mXqJv J %At$ lLG-e!"  c&o9Q?)[*UGkr_o1,u\J x0 8 7p%_DKJj Y"!S8Ѽߛq c  j sE@ g#n*;iT ^_KG Z_=WJ'x=vkr9G43 (%[?7iT . H E e (=yZ1oOq O A^I ai| uDS_Ht/%:;c J|{d L xW2bt3$Gy|5)6]Il i  K F M haMaZP>rzX"N$%tRwdn.3FoBb wS *  " P"f]w!=>_"WY\~jcSBfTBCZUWxVYkrLI4 * | n g o R p  a m6XGeY/,r.U^w~ % 2f;LX].:`f)p8d2vmqgi37js<!;?. F?O 1FN{ jEu , Y 1    5   Tz cG6TIt+v:]L{IG;U1ODn|;*Ba>GE4`p> `mTYxT+m12.S3 {Q$iPF-u4A6TFl5ODz)O2kvWfBp_ <QlOC ZQlfQuG9 F163O_bn#A|?z_Ny+{WL s><+n1bd `\>"? -@%gz U}i.>;D6V ,b@7 fS_etps fP-<SJr(%f qZxH5964gfxtbVqW )=s}?R5tpQZE_qoS w &BZ ;_oXp=0yhE- ]&`Bv{ 5PfF 0Q H 1fc<?5'h M^ ] x*!VWp4 R*ho/!2"xW &T4-dmYDE Q DCU C 8XPsmG rPlW <j&r =j(ov D&ErsZ P)JN~ >6z MxWRQcQ  ih C s oZN!3&Cc Z|& q pi#E!3js5d Ws .~/g   + ^S YbHT#%P*8 m Q=b:^ bUw]9cRpyn&(7 9 &7 VENmNa7 !  fPh/ * FIW]t - +-~ w(;75 7A<Du4Vs} Vo4TT bL! &fE{5a(sP+ 3D5 mf@vaCcT(%ttTphNJ:;m 2zg{L0 GZ)c_ `4I<p[& lAR : 9,y 5#29'*.K#v Bo6'zp | o'c*X9VK-*,E@%aK-\ABv0izWI. 18zA7}I.P}B^S ! ~Dj\[r}'tRA,SB^zCJcGcL>QYss).Mi#*mcbVAE2xLK}{KC$uj:tINo$IBsjHu,Tu8Wp"7dRt6htkT')e 9v6:,:U8 [;#oqe\d};Q5$EWJ.}{=7 bwNp ,MTU k -<+  E^wo E/c/\ (?ze9??>SC>&p!=oBtu*~.;JCXZj_Fh K\1J$0q%w,{qh lHq..|#A`g1Rdrao lG 3okNP9c%;p'u;_G'>vTeHa/h5ED%RSjJ bf{eM;bL\R1WRpF[E:bGn/gX!v/,5)+(D Cv]W:_-,.1\%K/u& ^-Kp{zXve<>1C$,,9-[JpnVF1\(90/aim)6'E= o5N)%*S*;pvJqf4STgimpcleT7^o nukqnHVGImD2PL~j8at:*KFIXYDSUVaD0COQ0Rtid=6A; M9 If;ge3XaPWRjm\0ZCpugh`4~A5Q;@A|c qbEO2*=&D,) \ $ G 5 $!& "CX!.3& bvS{Ff %2! 7$jqgwU\e /&@%+ ,  b^prG ?cGZU@Wc,4koQ=Aive_}wnL'wI[8&>BE026M&3n'e J91_EMW`}MG`LR[nfoyx{uu<?EW~N`h4&!7L(Jd2I^\~\pzki" }osuO^i'Zq>f[DLA812OmC|wgYYkqmdCLE),_[Ej]PQ0'$  #%#1!PE&.X/<2Z]|lan|SHWRs@,NC90MW*+JP>0"=Q18 "tn\]kz}qVGro3\sqm]rYHeZ6/ 1 !E"B ;Iz`IkiJ.84%B#1%"3-G>-E$IF.RwTcgKJSc&iXxSQg81[M?A#1&_;7wT#1>&MT B?\u%$2 " .I48uG**@cHZ:,N9)"NM"]Z2L0CG=K?YOHA2INAAI H|E:V;{y%26gH ./]^KVXZu3[m \hKV]k/0d,E1)_gN"xh`UiX%^;ro<qiN&Scb24 cBX:%?xZ:wJh$P<@a%X~@C,`KFEwO$h _zpF ,'//at^b2RBZ;G! P QT #2p@K+/ru.N q4_?/?vX`mmqi @/M1g^ye1<ei FvzEUt)gc Y FJI ~E Q jbaw< Bj 0c~pxRxJVv/'b . kL;  OD!%K A cz /g f\3_ 8" /]"[ zq|W q ] 7YJE32 v# F U Q -6PnL $VH ^`GBz$*]&- m 6|TUFkbY+r& ^>; LB { 8 + 7,  b iG> p]o(qsB  oiaz? =0| uo 4 ` Q $ 4 KFIkd }}}TeV'm 03sve ] D 1{4"? %OX FG=yan%f S .e '\ gr V -# Eo}u^=9X jz0= Z Ec O"5` %~g&3zbxT7od*g`G eG< 5 ?irD ~eo rz P kJ26' #i " 5\@)j O@(t1fp' M" W01K2H!N&rtmJ"vsu9v&)An :| 9{_" ?Ytf&{-iJ\Q /l P,-r "qjGwEe y`H$U= .HGu}QI 0 j$R;xJr ( ! bC)ed *  OR]N<@ mHf]}u6- M\ WpCyM - PK SY% * \t1NzOz`% |LH92O7K82B`0!  "B t]H,'U2G4yp G=PD& " ~1eiD)vh''6Y. }Z a; Y*3Q ikmu # %+;dF+8M> 2\+ ( tz _-hZ Lu  5 P M%NQRD$rm!Rm 6 gW { R@ f5 id hN dhz_Rm Q $:^. 5$    Ar +r2m IqqrQ"I  ! ',\ m;m "X TTai+7g> !b2p,~ofWXZ d6d 7y$:cA ( ;XefV5$#ME7 8UZtLdTEcRVvPrW.Z*I7"{*WFRr L*Z8+E`Brg}8bU\WE  I s -a,!m$%C'g(&U%.Zkm3Z C>[  D }  ftaV_J&"ksfpon"0LFA_;   HY"W%F(-3^:"9.Z gűZ? edM q*V f3,S7ux8VTNmO= uo7i FG)k[M$9{#>aG37~ x )5$50r|L\eanCnS mQt&J'['MfZ"M&Q%'-15j6]42B/{"RY!־ږW}4t*U$ '+O,' kOe݌ie L ~ P4+;,PpVpR.[ 6 Rx G#'#6ߡ +|= y{2 UO!&8*+|+%+^,0:43h1r0(F*(QDA^ {+p3!}O*"  hs `;e1eb)R 9 N+.FUO-KtJt n 80 [ )AFqN7a?BEo5@X{B**MTDxmX , x S!$%7'{'h*,-+..2 4S3p,ݰ#ǵKmК٢ Kf ,)'$M#WF  `Li_*X9azD M pV_y GFA3M}#l$ E[ls)5 lNq & w ]  MvUMG!z!i#$&i(%*,<-*ؚziKh:~ K xLw\5bwBE8}t yj3OCsg [pBwcxrr)fp/c 7y9nj}Xt |Y|BU^V;7* ~ x X vlyqe "#QdTD@aLZm L )<L]p2 h-xvhCpm+l22V`I3x3 H/F6^\<0Ox~>K_8v!QmEgmY%ghH  = 9 wQ -f8B,N[*Y+lfy7im[ti!PT9aM~ 4+h0 Y4R1THT3&Hhh,Mv6|=q1GNHGJg4jZDT m  :fg\ 'U&{l rEDl:]C~WCqNX{'wW{?t #L Pr2Z,J F0Yr!HsnPqj>Rwni/H%  17E   m /$JQJ@ F#L@\Lhal> OiuN[l]v`T[T-MG5&Nu!F%Ak~ 3,9Psdvp*.F:; MvipT-^D B . ]VD3 6 @CVwc bzBJrQx`%ix^J04]l\SW]1wS[BAg#g6uk<'C042j<"Mp-vn 3 k  q ' i'uK P D;0_zAO  JB=9Rst_0rX[gPPkfg &!! [|";V ~ _"o4 "$"&6dy؀!`gF+ZJ) ]Y{=z,L"[`s  f|T?Kh * k]SrVfwvp8b;=9+)~VfX=y 9 lPk< EF!#&f)*) B^AQ\+0o_  k #,!/@ MAu ,zEdQ i jZyiMpA_1$>&:5  1Q`e$^);C9& = [R|3^XR V#%&'&{#ެY$bd- Q   |. fnQ)xg G  {0K?N:@l.4t= E5UgG`"D5'fPJk}/3%$l<&o 3 p\nq=!%r( )%&G!zJ}Iެa< m ; :l &6OaW`QQ D$V"NZTDek] G@MGI{,5U lK&o|;Qo$T<#&?UhO z ` : w n Y|VcZZvK R1ms{gNpy<#/Ea8AreDoL/IXAk@%dgtd~PYbjM,A en,W$k Q#D   *t  74gELR{^#U<m>[bW"'a e}&+#!VjRSra!eR\!PQ8 f<:tc_<l% t 1  : 8 hv*_ h.:2bKQ_>>m_v-uY@x %&Gfzj)uxGWv}.MO (?he4O>\z S) ,{NCe-\$g_WlMi ;AUm8\d@'rx"] b l  e " u{<< TosDSlM%udyxI )q(4{$auO3\@6NrawJBL6V@IM_%pRuZ .yrtW 7 |). d/ .G] |%]C= #?CKz0'`L6 e7X3#[z  oR0D^:Nbcd[) vM&P(h)S  ;v V +MJh0K|!"*#!ٯs< |-` }  (VyY&/ .3Q ua -W3D TSXuT 6r. $dWHh{c6.z W%X  pwg(S  nN3DOC^l!>$"QU`E5 w dZB #WYz*!fDm|(sl 4 D%_TOZP&="qshO[!@!oiN?1,1g- zfgkP|sx!P#VC*^W 7\ f] oq Vvl| 4|N>B&CS3iO,G>U;+D3g IIb/ yw>~l&{~2[_ .K1cj+U6u*" 4 k ] sVRQ<vg, ""6Yz c$ Q v MA Qp y^_37 I]?J|2:X(.%r!O;XlnF7 MDRx4 ) j ,  9  ] J<@N%?uK  zaa[.Z/%A@5B> )op~>` Is}nh`*DK*48Fc zsq#:5 &45B0LMAEFuN"4P$ b Y * ?2  -32" Y1;zasC[I KiOGOUyW|= 5P p{|bIB:U.z8 a*9, 7JKZ{E".guVhmz>/{p3G`oI{:GyY}mB _l@@'#yv6bS6TJe00|U4,NV?IcK,}/%V+OK$xZsSs0ZsHpzq@c?f z }+Z =S8 iVv$ p6r48 ?.jAcWp*6$pdka fQQ&6tVxve=/UJ $hC>j\O|.s(XeCKRIC!>W6<@ )l;<Um +9`umV3'Y :;%qC&B}n5?Wc=B:-OAI?\bINBQTlA=RQnQ6M?qOE n+ wFCp(v|LVLk{Ji,L`f;aoYca^YI'/+37 y $L)C-A[cDHEmf_ t d($I!%K /9PM4sp>"#.W9%u5_H'wU?!cv[ :5ZU"VH6^U A#xD rCW;5~L{{h6e}*z86#?n: F+eF9(*<|`'e^U)ar`QN{Vs,S; 4PS]#kX0 mpq [?.e2F[DLz o;_ P!<yevl:9): n[U>K+mn uW*;<wPL[s 9BMs%B?!y2+aB QI=V>e6JF;Mc~5mV$"+ <.EDzcuZO)WkM`T&8S:0a4`6T:KCsYWfm]8k_ 5!t+7[a/t!9ZmV I$z19dV^Ic vuu5g`Rg2HB  {65B:!:1]B\I oNBj4nfDl  &*~*' 2,u0fs,OQ Pa 28 02hqbY,tshCRPOL5c cfF{=@Lx`5Jwzv -H'&%>:X*+>xD{<4Z}O3gy$FBEs2h. Qf1RJ.:loK5Y w)e(NBBO]~_f ( =hX{, C$[|OP ~ h WLdCWz.L3CLMmyyAe"X94o.2bR(\pT aqe7E'=jo H  d )I<U!~##!Y ܡՖLՅ_!{ 1{a )G&( q A 3qR^d]= Q]UoxB>#-i(gQ2BzIk0cK}k7jxhnPYY(:28 _v\Y hN  N 5@>sf u#H#6^9Uܢu|ؕݲ C&aR gC N~5d^~  LXmyc YA99 : TZ]uHLex\aoDy Y-w$=2isGT.K56d TY: b.N" X @ r  J u{Ns!.# {(ڇf^N޶)IK  y   x9?P+ wF 5p|C`V`:q.& |  i (V84Oz ~; ]E_#'mh3J]gh+B*xip2TTzdZC? 8 B  @G k MH!8 { e 4NN+ /f54T؀l5 k4 #(C f  W,M^~ f _ |A6&gzd5Wa-K%_/?4?"ag tqPgjX)kKG2[r /{f2N`Hu!Ifu- q y O3 2&]gD8 7H+j*mR~B Ox2 Gvcl OH)J9FRe9 # i gZMl=#lAj l|:_Ousgv+k 1d b J2q W3(XDHXtq08+  r s s%|Tr? o2 _n d! 'Iq]A r hyT ic#/8Oa xB-ZJS?";0|rI8!3tXbI!]pa?ssi*vKQN4r"w^[C9 }R{SV~8B( Q b i , B3jPEA;@L 6 4~)VyCxJkBKo.=]S$97w i/d'a:`v?_{Q:t mqM,TR~kCU@*^?v  M ! 5   jP w(vf" `DVXCD GlVT '7X!Y/E eOPeX'i@$L b | ? 6 = 8   ; C :V l68HpC+P*7,(%+q*. 9U-`iZKYq8EnG'7>5tRP.m+Q+Dj'v F8}e'ZySpx4S}8u>  $ $pt+37-"Wtx{w 1#0p2BGzb"~d,]G D 4AT2 1_7+\OUva6U74(5@,e@z%GWXBp>C)D**xrI=YcrsecQr):~Ew|s[{}vQc.JyC *$ R56KJw+ 7B`{rdeM9:&0|u^`IEM31/HOSmq |l}|mzxvtebhrr}wdlyv}qn{qzzll}fnaovesxm{sszqy}]\Z[h]fwla]Kfwv{go~zypvhtoszjolhjmetcBqnr{zcwmz~trxs_F5y~tncM`a]RDEKI=3 .C`]@I$    (+&%.345EPMVBAQB<HEPgwny $}xsyk~oSv`NU3*/ 7  ugdapavS3 %$')%"'&45=*J?Lj^eUWUUbmp}|o )(IRaKKcMpxnq^|Ziassxe42{+[qUVG%LP::2!2 #-!2>));R6(ET.PMGa(1G553A88JRC!Ld`t^unsdg[IPehl[m}blu`eth{kUzir^mnnkf}kgw{a_a_ofzuom[ZebYOd^i_EZ]kZPbMA?*,(;7D?3)  J9,-;\f!wmqv{cCG;W0Gzp}}~ruo[efgfZkzpuz]`sKWTbs}lo~LXz{wtoyvf_bqovuX_`j~irohept`mwtbog_rOY^QU3g TK$ < :RyY2@-D]j!>/::qu  g,"a^GgMV,[A[rNU3-C- v =ut %eUACaQ NLZ ;a$cR  &]|qXRSNe~G,;D_P \?i:_gV2Y4{*)]5#wjy FOKd$|3$VN )`s[s>SNOx,&-Ey#AR`Qiz q].7jyTqRNuPk5Vs'?9CU/6/rg;?\yfbB5 SO!O]!.V-Ta)Ce IY]@h[Op2-R<P_N2"+?*&D":&.0L\F<$/*.KH.&b)HhQ0|^g6"H+mqTOM[Tqdyb/_$B{3Fybfqq4(HY 1>6,Ml]ZS=, >[*zy +uT` RaX]KH`&!8dv!`PFR2K< Uf3D'lJHx^ $Qw;al!pwx=Jf} K{ajyKr(z7(d?v8E/k[\*R0UbE)o|VI^i0Z y0?j3 bH:@0C)NAg( htT<JGtzb&|~P<G[}*{&S +8q*>(d-HD) `9"*)|EDQqx/DrhyCaZetvn*A=KsY@kBGR*FMK})KV1n!/hO& gO5m`!KT@roZ 2(THr|j@ 5h =:pc=G[x?B[a`zI/*>PrB>,rK\N** 2 N92} i6 UsIHhmYa$`Z1%! I)m;)Tf[KA4 bSAYsS "+'5H>~fG<;wDIhB\;PhZgRg;]3:hrc[br5|oT EtF>pLD\@>*p!Taq W[)c PD"D"]Gg 6'dx5]= P-@ wgXoYlOig;!wCh0uI>8b5|HS7%H& v`}tH& `*.$gZh=RPm")h-Imj}LB"zB@QP{ :EH<,#@EgHCcccYW\F**0KJKUE,QUZqjcTK=3=80#M(]E><2UL5;1AicJSFOH0/),)V# W!#8KA>: B7=- 72*?40/GA;7 "H 4(: .)3$*<=-%@"3,)5"9*.N<'/ /3#, %:J>?-%>%!  ,,&7"'$$    / 0  !   '-1  !      1'#(,"$*& ))" ;?7K 8)71?GMC.=#3M% 7C6323:5cK=]53&,6:93EM"8c*F>( ";=-820-  5 %  *  .  $69& '!-& G36:0>00.  &6 @ 6-)#(-&:'%6+((%&CI/A(7<*>@4)6bPW]Tleh^C\WGnfdcLuURtm_ITQ0!08*@R=G:M]OLTXdkuxsyYqvodnjqwzku}zxn~d\uvgluj[dvo|yf~kGXj`YT`yununzu~r~}}~~ukagns}vz{yuq`j~7KC7H,JB@LIQOQSFPx^ImDQf=9\fGGJy^NZ@TZI/30-86D51./,BGJb@HP_c?^frY=L$DbNH39\ZSiVcuZbU.oU)P)N5A#,>=2QY8"-WL$RE%W:42+%'C343:4,Q3)C:)#*N.-41^D<@WR&5:2.&%K=9<+H<P=.T<jJ>e2AC 3A+.Q4qjUQ5oXCP1RPBR7VB,M+44.NWUi;L^Ha3?/#U+1;!(/>T>;S;7;NfKMXgd`aX~OSmQyM2^NuMSYhuM90+:14c[[}IWwJ]jcKJ_XpZL_UcTtynkdY^TNj0IbSaNLQ;@M?@X%5NE_4Nj=ND>:OJWX06""-"<+@]=?22(#! #-C*#6 L( E<# $0#" &&$ *% $ p|}|gruQltkwmm}zadhZt{rqaO[a\ipd^ihigVgaRw}fuZywiYQ=_uynbNV_grk^`bU`_rukS|tm^dt{Thnosl|axpb{xpc{qnu~pi}vfqf^T\smwdWN^^~ce~dpg|xZxd;caedrkpidEOqx|Wsvxjw}y}jxqf}}t{~~}   !-7!!())0-<H#7'>:/./66D4+5/./4<E0>T7AEJR:IP5IU6??LSFcD@G?J:4C;29&/T,CV*@H=::ISMMXKRxcTNKi^g}ffhl{`aq~p_YUrWSaXqv~_kjguly}jP|qlSsonk|p~|~evxkmpocketsphinx-5prealpha/test/data/cards/001.wav0000664000175000017500000010443012504317077016412 00000000000000RIFFWAVEfmt >}datanhetv|k: P< -* Z3qwlMM7_6$:JTy#A$?[3NJ@cyv|f.mP|'1;Pgkm^)% 4I4* :  $ :A& ; $(., * q z^v[veRYvS[m}mPt||{zax`kl! {~F]z\_S=URWz]ErkdrQvra8^kXyXum,B3A2"S8/Ea>* 3 dkk6|k;svFpNqWSzqCLa\m8RAT+/7Q"dz.D <=|Nqu~SET PM @E$o:@$(xo~2eM ;V+4|\CW5Z:D&R}'d`Q:\OQZcW*>]cR/yjcNK]2IXA cGOsyH`bx*rr`)?l`ozfqbvuk~1C} %#U&3 [P'- -1X> 0 /c& C]E3-!LBZ<_Y&V~^aoLc"TlT=;wQ-{)Aw+Aqh5bz2~pURUvlKt]*Jw%^Be$G`YG? dl n+H@=PVqb5>] \{0~(R 5?UgDk4$ C{[UYz!sXX ~>UZn j8P StA}>"VE<6.<E~&rX(qWW`W~'j%(Ls H:'u0&Blj\*P51`oor b#8^A bDEovX*p:  +$>G)2./6W]BBE3(, +;+, *t[C;7M[A^@*D8.&J.F<AFJ5/9),,P'; :< |sp=!%,9#5 0%&&7 " %  + "%.ox}zdxTu}o}tUpUx@izmhPTwjfE[uVQeh}WfbO`o`iLVA4KJENN0Oj[Jx=X`Ln[Qpozqjd} **.## 1C6&">94(3 @-C);b5FK!BQ27 ?"$%B$LD5#+>"#M84" Ho1."=8T4M)*1pC%# '+>5(0;3/F,6!1&" & 337*3@ 6A-1+)39F &FH! )* Gd5 5:(oT1y}K/,BS_m(.gl@U]TVHabALNB`YzPTRtX\BBU)tsvkzgyd*yrZp9Oc^v`ehud`vvflmxvtwIfHQBvKI/xoNj }wxqNe\_cly{sh}JUu8nTscc\^fKVqni|{YV`woJ>&]D2\;OvGLUZ'.`D6Eqc$59Hiq7FW+:,Kj!= \!'&0YI'$<L 7v(E. @s? khr2 tc&'s5k$%l:oS^iZGL$"[z]`v %0V? S">Ct1 -J%Z Ի1" IVD o9P= !vxT+X j8]lyS_`\iSA !.T&z & \ LB }@PNn>(~kC W % /}c p b O7#@Z %&! ( z   0:F [4Wx^ ' 0$K =I O& z,q""_ k!'!*p"g%C&!! /I0hc'j6u`/6!|t #x zV/ m P i" 6 G0 FtB|@>[P  ,  8n ~   sS*9* n Q6 5 -POp. "N9ap~ 5 : a `+ 7 KuQOtm*9gSf'R7SNp/ &v(KiMt sDH %  ? / ,"*"0.W1 513/*% o!# qaR .BtUucak5+P/J0M M&Oe aכt#ڒZ֭6DAޜtݽ!ZyS{Ml.? % ?#`#}%#!*58U;4)I+32-=JH`3bm :fA"ڋPoB [ %&ߐSe}#X6U`uc34jZ~;Um*q_\7,J؝ܖKx4Z ;6_rU)|Y6xr M X%( *),2>58;A E<44A1I%'靼~˵Eq.p5+:  f+tL?+S"g*Ua}=QWQ[X-N A9[ טe^3ޔK"'4(2c ݵeJf}g qJf yP!&-2d46 ;<:=9BiII FqDs@;=>+٠qh4 <! \.BE :SH Q ہ١9dé' B` T l{=#o 2; }I(iNqst݁|ܦ`:r-_4wm[Fb N r!$&.9?>? "od[,EDkC.OW Z  )56d{&,G1 l] + 9Q@Bg< (;;PnV|xN>p~uj!KL}/q*RhO5 B H_@ ^c: x G iWv^=e$vEV8\21DE7hj.NH|u}s~#su=j@O)nVf-}ZvL3S]dG^,   6c@iGJ>6  : spHBaKMB,!R[ Y UvfL4`1URL^@6/Xhr \*A(MZs`D I (kfRCmZP _k*pHK`6 T~vmS7_P563xkysU-W@\k4F[ k ^ T c_+u4`  X 5+hnVAv\/c:+EmdX'>O<"#& |l~#-X'=+dixm+q / {y#(*+h--,*+,d+***( ]-ybE &(mSn?:M   , LTT<:ލTSi7nnxlUr x@!8a"`'X+G/3h66953&312Q662-03ݾN7j',b <+&rcV zU@ <Z M Zei< v e4;'/v)hWߣFtZ~ >(l-- & pmum)"(f.247::#;881~.C3;?;778#:zR  uj"7(2*v (IiL߹׿Q UIS{ O&`# JS": k  j~K/Y/NPrbEai֏~Wn-}+j-5lJy7 ; S  h"4"C!!!_$(.49L==:6Y5V651--24K!򿓿i?6f g$:< 8 #%f ""q\V_ 9}c_= 3-D  0 >bUT*SAc>7t~ =9 gb[E ~  FP(w !"&*~,,,--8,,V--.`,((+-'8 4Tב2({}YL3u~ n: R V vA N-Uz/||t4pi]BhDBcR R6z7D=1W& f Q {,r07|!c"#~#n#z#$%z! a Ibj((:Kw,?|6 G &!=^~ 2 ZKQwcJ FI&}OgakFI<N3\ R)  KJ6wt2  F g q <S4 W= #3)pS`6+ \yo2wu>g"=x-k-`Fa! qOYEdJMU,kV%"%fK_e-[Lb5m 8SKvC,7#v vj<([3;8|^e}+TI aI]LW"S u[[n<6C =')#k*D74%n Z=qPEYGVdnaj,bk%6[&Z<n< O- #j = (D&T2[K >%2Z~  % (DX."yvV,u%XG '7 B & J / # C  ZC *] k \mwr 1  $= Y T I  E F 0 }o ^ G qEX^ vE O h YQ  f m S$ aG 06 /  n   Q 0 q    V; ?T R zh   > kiy ' k { b  j #; C}vRLAjO{]5tHZqj63 g f  sxP?gn ^N Y8]P5 O *p.LN?D[:Ai@0K@#- . k!MZA`>Z 7*!R7'$Ap,>x@oN-ru96 i6>]9L 2f 0&?P:@9Pu/K%g5OI b (rBN]I=j5,U`}MXa9\ iM1\r4 \* C)Nj&fS%y wo4;6?|b0#t&8D?X&t|hx^[BeK1XY<+91tLE_eZ3z:]Yh zX7  Iv8OWT&YXip0#*Fd,B Je=Qra2:n,D"}$O_/ N/; ?Xl?36'4") -J&^/&>.G[Ah8h+A#2Ev}}9^Vz,',Sq) + y 7;wA%wK\Y\3{r `N[n _v{b"ow]n!  OBg/9} ] VtsH~s`;o" _  ! 57d _   A m[J#v w b f ^ L   f    ]>  T1 ~sT @  J }  $  2 X V y @ @ @  : n 0^ x%}5 >3 e I}vvq-J Q '& & 2 $lI  S+/   !  c h K . c(gG 8z;va WzNK Es?#,n^=(g~   #U;g5/*]B yLG\4~+C;}!0JA7:YG bW:IGOMK"VODgIQIsq(Cc?vIc c>8^6W F3Siqs\lpGnpBA z:gbcd?) ֿtߙ+. p 3 4?d YKpNގމ+^TY1 a q2Gw NSOT| .|YG$ "&)+)./2K44"63630-( $F-8ŅDԛޙb, pV$ t.$'#2= B=& nj\Z߱_0_ g#Q=o ( %i:+' %RԷZϧ?׊ߛ08P9@B>'=mBCVB U'W&"$i& ())(()t*'"!6%% 0kDDz!LmK0 3&7$ ! i  .Sprq`vh =H\  _`bדVg\a /fiV$ v+G*16ۈ0>[uil:n =.j s  _ a[_a^7!~$'()'[),,)&IW5K16d8ۭm UwD"2:!5=E  ' B 2  t6"%(l+^* '#(q+( !7 tZOÏqr""$9,W K?@cW ܽqR h!=l H9|G31 _ rs r (1<<C'Rz:y|Wwx)- =7{i V/ kSdWC.#&'&$e#"g#e!{A;7U޵Tfb $d:T: )ޕ ڹ1Cr' 8:3)%36=0 mVd w `  Y# w?I#&~:XjKm@p}dG \ E  t t]*c] U!D"!b!!!u@g(?q"8a-VtKs I H7_ S gg Wv4'8+:! t  C 6~ar D:=d+GNto,%0YD]Re3} ` [B%i9gKjP- T= !(UHqVB! BH\*s "? 0e@W* P & ,7i!5O! 1 G=?lUJ9FnB}MPibA| k ^IrQ| . c N ,i ?} (=,*/4 jca%9E;hM ' U4J/TIcnz7jK!rgy~.wcf9!evS?y?en,o%t8 {\[vP6"_{nhrY<3Gv  a  k @C~>-[{f2300tQp8 Z#PlcHm$Gnv & U|\py*^IPctL>V#Ed,{UbDfRpL Sv?NF J|@V&Y4VE1|! N3k= /IJVQ,3Z"lq<#;Mi5uT c6hq'ljKrWK~,Mj:2%H* vM1@<K~c0Sb[xX@W\nhd$><t7Xw ,-rMK'II^8!$R:5_N|{dln|rIG(0MG<wzIxrULLurf~^MnaG[0ZP:1WT3AdjF6v@f}0 C1Dlof7CjpZo\L8SWQ,A/c` -yMO.'g+5Z F1\W>(;KO5@M\z`v0C{a am .eGg.W&NX(qU%*swRPnSDHc4 d{w -g+Hts#k6{Kz+&HJu_ZG.Mlv4,d -z3v[!}X313GK8-hv-Z1|G0Kb1 p!@FToB-E4 lMj5;qgR0>,oxy0#*='{7`2ej|5!of8{s p`{),ZAp(2Y% a)0tq~&-z8 !v 87,yI $s8  l 3= u O~F>ul T;# jssMqm JxVg{+ s/ 1Iy 3 1'a pno#Mcx K .1UY23ktr9f+ZG{ # F3F wO  ]w T<Xe@RP4 )R 'eRN;* U[u"1 vi v JS |u|rF5 xsWS'wU rnr9 < AMnkX?rqgSx U} n!Yah9 (G?  3 ! E36#j` s WV\l gm!^3 Xa=Fe p Ztfeb0o~d "  5iHz]}D 3 BH C( f N l-j < & o 3W0 5-L= 0x*hg|# /AoLG8afAE u `` vM6 M%}f wi+YX .dP ^ra p"1 X,.w C8(Gnc Av` ( _= 7 }@d- vI cMtZ{axvj$% ]L $}%:e{N MQ3  V >" qp p $H d 4vO36 v &031S  n1]1Cw)  `< nI  TW.  sq'$6c xuz= K 4 xW2 06j%B9i< &e6R cn ~5VpN] ybh R\k5,!J<@ [ It:reazM) diB5I ($Z:muZ t2P/2TdS \ JkM,c #pur F  wO PEG|!s Ja7W p4<y w0 )L=kaߟl {w>N7C iQ urgIHQDI9n.7]}  6rH  Y k ] <)3[ x~`zuYt  Asl28Ng/ } )D D E1AEEev  3HZ oP|:SL @n3V^M k[ @)  c * +'|? V  1l fe&ds {/qI Alz0\Z%   Z| ^ i  7!9?`FQJINa{+(}}[ YS AC D G Iv @\Fm} s;E  Ny . !l ;WS2^%Se&) >V5p/ ]bba 1E:F<2y J{GZH Vj1 @n Cs  kIQB1$ i%=(*G ~N=<~TYmS q LL(  &bfM  AqVx4( Cwq3^x Fk C| 4 jWs#B* dRJ5R]%@N t Z PYR aw `- { /=:TtA#!b b 4 /Y ?BNtr5f7> ;*  d_=Tn8 C7EJg_ ~E;Y{d]bh; S H"hX%PVH {  gwA+)Q'd]SD$N9QH~%})NTJ5w)_3=+d\jtk{/F}t'KcL5G[u x^CNTsSYN\G$Bc }gy6KjuHPKK{B>c 5ezTaw #9RgU!n>j8b/.4#X hWz~'(1X[i;2r|+N| Y$r,[3.eG[J?[d]E0$<`I _rY<TJr?J6>(($u4M"GpRKBa1)T/wrm~Zvp4]I ><5ub3V@tQ-cF(- f<_i^')_ o )k?4>9no}79B#7~fVE!<#pRQ`U97(aLU&Qf](3\,eGYgtYi}|pPIl*y>J[& WyOO!7m]yVsn[qrhN >c 3,Ra OH]jzWtTO8#Rfi-M"-M-I W ;>rqOGZH0kEKTmkQeIt \%ht7g$/*)_+3# O{Y=eR|q8gZj.LU,w#Cxh=R5E^ A]2jZ\^y6p!l_<~IF&,LV,AXY<=!!0 - |DJ&)9X@CB/7|9MUiBUk)^sxf0KP9?1ivq{MoW4M$ORE[;Z=GVkTsG_RC8DOT+sEk\F9PIqm576  U0*8%* S!c{JQ=&^Ztw`eyX=v\PO6g@9!f1<r{bYWJl5KG?SC|`T|xCXlTm}o8=B0]oPKALmSGy~vQR}C2.@1M !5[ R:-=BqO)71qJc.EVbVJ2784NechCV*;z&SJ*^Z*}^-jirz0^}(XN=$|*[8%,A"F(D2 |  k(I$,(- / 9@<p=*K~VhvTvTzlU^ZLfm`L\S70;^l}u_7 T)eEW-\HNg/*`1_-DV@ G! veG<,G  "Ex $ roQTnbSf> GHSr,`[ \b)%;F:}fQD:UsNbec/OH?UohzqsZju/B#H).(0)3?!',LX8aO+F.S _(/ 8  !,@=Q/BTJZ\R>"$0!8E: 13 V,N&?9 JX : %9.3`, f7> 7!2Z+HT/Jk|,aD3-41BNu5H<2WR`T7C:WONtsxyj[[Q}q~  |vzlquj^L}m6>pD%U{U>_REKOI?v~d_ix5e|$?Py *X2H2_MK#$>GKXj,!+&TYB#79/ZOT@4|[2pb~>^XDRG7+M^3/;bE+zINmND`Lh &2)Ep78_RMG7bM5B8>9TVXlX6R|o;vaOeslp}fVrz|!F`sOy}*mf{{~g^horp} +?   oIoMc^LI0\{JV]%>DH@>)ybspocketsphinx-5prealpha/test/data/defective.dic0000664000175000017500000000023212504317077016711 00000000000000go g ow forward f ao r W ER D ten t EH n degrees d ih G R iy z years Y IH r z pocketsphinx-5prealpha/test/data/defective.gram0000664000175000017500000000010712504317077017101 00000000000000#JSGF V1.0; grammar defective; public = really_bad_word; pocketsphinx-5prealpha/test/data/something.raw0000664000175000017500000027332612504317077017022 00000000000000?edUIC3Vh}[9.719X'[D)*Mwe5+& AJUwleij9-FIW=VbABhT/JgQOOF)5+Bbm`nR0:1#1=9A<'$4LxmzL< a?5rvhfameQnikyYpsi\ZJ+<`sYOE?;m1  + iwMHb|kNWj64";/Nxz{gEtr}uhljvz.$ 8a6yxC;q_ZrY^`/NE7L[ml|g6CVepo{{X}l,=9cp4!TJ   #$" "brwz[fpz]P`:.5%)E ,zwsXqxmYj^DCL}qMJargEPtTokA;QPTQbqe'@>PAHbf7:`6/OH9baensjkxb  %  nvo\hplEOex[w7C[$)K*+Qyx|\E;CIGGUn~ht~XMDRi| &ax  $GV%,)5khFOO9&9;BEJYPPda$NXikj<7\Kj\.9YLNxxgosJJikqmwzamfiOCJTkchZ:B8L/67IVJABbjpjD\b}xXCwU[BFEJ`9,%+;7TL9N6V{hUd`:E|q@H;NH?pN2cYXjh|oemep{_5::T}FEV1)#, !)F.  CJJ ?=>Y!IdLIF?]xpIW;G{cxpPegei{uo||ZQ}UHJPLv`}{]@78^a8:(<!0M>0DB(-NCQrJRPZIB]Dmj|_]ihkY'DyZOMFurzQofhYe-:^R@!0+*2C5=fah:3X(3>/RH%9L+ZfiYPC5L^nuteMGMZKnjZDQyrB06 >NDXM07W=9]IMbbYkpXebM=R?PT&!BIDDF+H= 4_`\QPm,*<B2):@B57EL9#$?71" .5,hjNRqe>fcMjM@*DW1$ (-DB3,)+U\ ".8&A1PYKQRVyuDKW( 'L@+$!2&Dq[7VVLP7_sw`X>0rCB_ @ii]ao`IPw}xmxt   16Hgd: " !)! E5+  3*>$A$#"At_>KeZ.&'N,./3( |!0(LF_jGB8: '3$$-(&%9!,<205K %2+ %6TXCB3/]8?%!<HiE$J`\HS!%5&I.# &NJQ7-r2 xwQ 2 NFJrw{iGKlztr~pk~}kac}]5E  -  +%/ ,  4N;""FEIVQ< ..8*9M/}Xgw~[G|ru|T:g 1"&$(3  &,-*"' DI8AE%5#7" 1+9,(  3>!   3&- `s7CndUf{]q}O{P/ebD,$!=SqHdGH]H^qeiacjUJC3&:UN%0-LS@EYF=D*FBCLXwvdor`nzzcmsuj]\C43QJS;1`vt-+57@?:CFU??mRM<<R4@ )" 7T((.NI4& ,,0: )6*#''1::+O_HYF;_cx]XqnxLz|zdINIGW3HceXNSFPK<Ic6&`e]`q]Xmo?`jRi_}zQ')*!*$ @67C-->?-'/;,[)  8"&7(8G `yd8d~YOwTs{]xrX`P\YbOMd~zty~twa{ xpsHu:%U83M<#;CZ7 715D7>KB<40F)<LGUSd_HHctqAE\nf<D6 #"#L>45&69!IS99hiLtWmvoVmmTI</6/+;E<:MJ&10Ab[c7C*VQ( 2+.$@ttweE>_luL=xd@>+?S,$4CMb_GR_I "- %1  1D@T;U[)35=;'  :]`4<6-: '"# BE"  (=/9 7CJ'C' 4T.#,&{vVaFVKI|xtxj]bJOcmVk7<8>?Q?&! (@/ '8%.7.8%A2A6M0=W[o{vZa{xD88*?On]DB=:^``o7"@1+4+;(EV7P616&+6(B[HOYD.20"36-?$ v}z  !   "*4 %z 7 pu$!$)3(54. Td@bmQ^Nf|sO:.CLSgxoty~dnSWmOLch8,M^nPmysyYkrg~sl~mryZichqOkrhnvJ_cK~qeX}bYp_=powm~oujS`~n}fKWy`>H5! 22d{ta[CPsgzt%@B:0BncyPHLYCM`1!J7;xjb^}x;Nm~||~ot^h/*QG.5]SmUA^PP_v^o{vxQMkjumoY^~Zej@PjR9\vT>1SpKM7?_R2);<T[zdy}O]oqqFE^TJ[F5Q%CB+aMM\HWjWGIQZ7N3-{aEHa6)FUwsfYo\+.<;<J (aZWECJLU]c5*A' ..!6L9:4&,  ?SttD*&0528jqbbH%B8!/#@)3?H>1?>&/N? 7hxlaVMhebI95(14) D#& L ,0$}x[`pr{>1B$QhgS~rsvkxhgCOPGZ;CQj|iT`Y_oWO>&.F<$;H#,5Min`E2HTLu`qjO]ueW) %/$D/ )'ELHhFu^J`t^cr|popsxz~&) }v {\j{eqw{s<f7'/8<(,TeWR'  ET+-CLZwp|O\UA((3AG6'I2%/3YwgHb@, xxtx_jZ\jp~p  &3&.G17AicgiJSXgludRmVieRXC\{k\yr}vDUavwalc`N;V7! (+0?&)Ea`XA  %Okf7" SvzZds[se`ABO!2 oqX[gL46ReU=F/=acWCCdhk\tgp|$egk+5/ 6& 06?'Donb>tXhw^@gqxhn~gcR^asrJl;L[Kkc__[F]<1% _  (.:$?(#0K66@5_mVNF.JTWa30ADe`tkMC$ 0KN[E 2<JncEO4W_WkWyRl||ws\U]hrk[9K_et`{aNyvrXwF<A[upabWM64_VGH\OGsmC6RC(1-A]T`oL ,7$-$,*3/CNG<P8 #KML1  ,4DIiL-::.@baY[]@1& ST'0=40 !&*Wq;A2;;EjU.4QGG.,8_P6K_C#. 1>$2M('(+2AA))7\U%#48?RVAVS#' +!4 )1?`k. -" 2$fgX\QS3/S5 *?=O8-(*rzat?&&;@&:12"3&KV0GG7;FH;QgPR]^druj\\~oqdq]a[`wotQZllyq{~ff`If|m|rwrYZ36eOk{~}fj~uYeyt|pkiSG14PmlP~zv`pr  <EeNCI42hI@Kh[  %,?LN:7SB9rb$0:uAZ"U@qMlu0C+8A&_8V;}%X$fUN:pK]d!wcci&/|y(?9+>B%/[PsSl 3t #9]jG@?5zJvDJvWW8LNRlv6`s=sW~^De|>5&xS$k/ Ef^WQD~X47 upK\:P1|FM~K|4 DK ~  Lo% ;JF^LY3)rJi %6;?IqT]LB^1Mj:yWqj< 2I\F`([Z/ ` ^2un8Vg  >I"t'M# gbNe H '= S\X+#\jI] W7}w0 I~"#<,C$_?5z7T8 Kp [tE H, * DdXMMuFV} q  *- | 3 biQu40dK wuP^ov 2f %$  (@{aW>sbfv } * BMIPiMFKIgF   Q %ZHw9[ 6Uzx+a2Huh\5XmqAES;!U [$`'#s  yE'G~S]wX`Ml^e* ^Zh j+ euR \I8*u1&^u\n> P&&#{fCD T 5r#, QjOOw% V ^ [0VV})ug%.?{<"u1 V#FSl s' $&" w@ Y?qsdN}V/h! T ( qp \wxI0  ! H /)l u z-fR!|3$9B$<_Wf7i P(sP$z%! J Kd{@.C/ 8W\*k h 177A@" +   D  s  \|0nRm"52Q,3ti1z"GN9YS5Or jC ^2f\T  P6 xP>A}\k)[/  t0 .y/N lhC` m$;4%$23 N;)Kt ")#_wH }C!(+ ,))R \  }xYJHD7+i+ $  9 9  >sAYa"biTCB>`HHFLN2wz,jxxh"kd"yYP#) mt|u>c*:{g Jn9m,o;NN 484]% <la*>;r+;`CuJ"  t]_mVA:;]H xudp n #E g;T( mTKO i( ?-s < 6 h e R6{PCRR "gT?I   o/S df?~%4 T3hKdv rK .J:QdiL$T5:J8j w_ pi k4 4- TAh=kmS * $ul  7tt-ZK) m Ph PP"Yjb Fi  wsr;(z fB}'  E@CzP <5bqmE_ gR 0[ 0 |:m} !A  FT f  [Wa1FZ_+~kO 0 !g<'o#'xW ; _wc"-#j"*y- aJY:o[ 9)Y"(nIQ^A&$'!W)3:W,h6Cyj O R@%Dcp%~2 >% I?l!q'?J FZ!x3.nq `Gnz nQ $; 2V " ~s 0<4/@& k!J(XՈ YJ49Q(#v  t'2*=) O  uG. %&"bEW@J ك%k #$=>T<% <wnj tF1 O +Nr*B"(Md  L[p"mC V P5jxI87p.?Lv I1!& f lq   [ \r `"b%ROf"a|| 0zY Vn0r x?l M, BAWC s(y&U~.J/yn 4Tv( _]IK Pa Mp Gj,8p !ha T"]eY X(7J$!ݞ 5 qu2 @[ dI#;f1\C&]"aC *NY8E\'BH=q )Vmny?jSO,C Ht O s 5 jݐZo ,_ ! \ C(@|puc [tA0t 72+a?^6_CY| 21*k )W 3N " # :V ; ~DA+kZ OI1CVGX2 r`*  :3 *3 KPM), t f pJqX W " S$5@/$ |?=~.1:()Gx> T.^<#  O/LL+"$ {P R7;d: |sPg{W^ rsf /F# >Xjn ;^;myI@8>}_T0EL[ynExc3 < '  u 2~^  #iTsmV +r0 h$I i  %'+8~h C? EJ hp9-#F :3k{][5N4 :u 7=H LT @ lO ``1   PyZ$k  LQhd M\V*?dM4 zzffn $S~KAq2^AT-h m!!z!(Du'nd2Dt "_#@0@Zu^RQq $d<: b%|1[v%yt$7gL '8}O8JdB*w[Jry:-K.0r?N=gi@tAZ$5s~.xp x   =T654T"!?HR$(:j{ 5G=-#7$120Y)1 pycU6E@ B w !e6r N"E! f v$4 Q `L#V3=uk.882(( wS;C&^ dB/  /o#GzQ~7F  u S ~}l ^[/3_1.Ar1B&$yw vL +(6&:6, /4"A#.#Ub*V_ kK[A] 1Q+n ^l.FE\ 9 ^9:;qJuSIH-m:Pw PJe$-14{, gx hdgt!"Y!8: .nug <d V KaD ?B^ + Q ?`cLz 4Mq ()1m4v0 (&K<~:3@VK!$" G75`Iq0NG ~(?@Ikg!Iy W: J' $,nta5y,6:[5+S1?#'6F}BE> 2L;"##+ Wy1X ~&|t2b^60*  } vEmn=, 0qE[HFn{ ;"0660'ds <6i b $ $c rwhP   n! { PyA:F < ]; :;riD!K9o^G,K [%b)(!% 7Y0/#V    #rCyyV8=(P.: |XQv\ ^>Pe++Lb]-x;{v $m|bhioByt l$#!( i%$ ?)JteOI8 sHMn iT>M&r9b2 !i3KsvPjI.G uQ TX u1r\}S +(Lzx":P<1Wt  ( N @  ) C *)'lPEm"$:/ GgLf^+1N RkA#lh,D s}OYc #PZN&8MjoI5O[z  d U a Q4Go{45nB.Bd3)Y7J~RY{TS . D   Z va%z&C"mF?c]3b  NW\{X&"ga.?5!6<R  P}U~j  h0{%mX:C=O[PE3R O s D  # 1 U L y  Xx3EXQ lU'/.u  ;9A{=o < ) z1)c$(\{'s+CSwos< J  G " C K E \AXY&3j\tg3Ukn^+U H v 9%8SBF r < n .~ZK {e+.y$xfo   f  V+jIjL+OK+Na18zKNr2Rn+'27j%H 3  ud *$f } , )8@c pdH32^[8iH!' : p C J 3 ~y/0/EV~$.I 4 HvB]fQXSH 8# H,v6$c.o8gK + 2 ,  m (  TB+4+ il7"9l'p#}hO3;j v |?%9vd <  - ] #o8Fi6*`>"O1' 4 ^ j   W ,];,=K }Jf[>zelf!9' x ;6s E 7  X @ sLwLV}xXD%+>1Nii I < 7  , &=/Z<WzAlxuI%$-_3tg b     ].5@JE,cv.4T32 U]),   r : cwD  KEjpMiK6bm#>g;a[! k G A@d N  a  F6E'rXHNFoin[p=A- W # 1 U O Q r}I^[HY nxI9u8tkgK Q xj>-2, ] C$hVrC6Xr9H^)r9XSFLgV|szq ? 7 t <j\&)wc?(AI`b>O)scj { xmXb L  VB)tu.z,5 YIJ> : 6 ! w5yNZL21GA2w[|Ksm!uLwm m$ * 5k+l' NTa1zPw.t.N;=RKZ D d-`kr 2Jd|  )N :jB3 F 4PMnk8B41[(;V~I '2 _}' D_Z%^Q rv< f. h0[C=Lm+"^ WHdOP4itjt`aIda3AZCU  OQ,5~ v}TV0v4ZQ7o?D  ] l U*f l=T$(\ m ^ * 6 R0D%>:XMW  q[Y| kU_kvW8 q`Nf js%) @[kHCgC+.n w+ in% 9 -G;~Xa%!H \U\/k|&GQVWl8]z=ipU=LJaNLD<[Q=D9uH:; !O > Wg1{~O:<@5,.`A#   C xUYG|,I lZ1 7 ln -mt:w,[.b|XJV( q=;ejubito-sPay  F9s.*`+D_;'+(AuwkH+xIZ4&rkL5BP_ T'Zd7^ {8,{D,P!w?%  7vDt vMM X  `BEs$@9/ k6 s/Q &Zb{ ,wU.I1j5~mYh?1km${adI\{9 da e sc` |t? x j\Rhmi)~kS (6 sL ?(2 T,c_/l~k1F~.}e2[}F9qK&6ET5  BO y 7  a_ s 721d1Cy  $ l<}}+=D>wbB#7 -: l },sjUnj/n>`fZn`2*yQbm;  &e 2=9 VWR Q~|t+1n -W !FFYrW 4?`);T_ $o)-P Z  =;?JC3d%Ix3r[,4!^#-;TN7/B sKW, Unz9iw'$@)mQT B+,W>Cv. ),qL}7o0 Y l 6f ,NzDXByFV'mij )"_{QD l?GgR6/PSBCt NDlGh=!P*a z{Bp  p8sPMN:&zeQYZ_iEj*^{4T 2 _108U[?xjAo!m%\s@|xkC}g#d5{-jw:tD96) ;<i^ e^ i W:L6j'o 9m ) F&M'gs'xM]bB|t7 E A t]>lU _  @ ,vDo$ ?A0~C>dB3\[_ 1 O w 1>j:/%% `58)@yRD;0$WO9+G8;m|H0 K 7DY W7oK  SCjE[_w WxG:uryJw)Tq 2= #-e :C#I&/JZy^ +F,]c>%`k\/MVz9f ]h, ^W*%\tdceN-q&Y2A E(o"9 2H A& -@ ns*9L.U0q $!]8 O/?8vg&) y!;lVX{~9 h_ AHpi9lelBtl "o=u} n?Bp \1`  f Q ? ,jRSN6BMSeMA;)zq*2(|Xb^?Gm? X- WX\1U4 byX7>e T y 3~}. QyTQ H\b . {  6.$=x]q55+e-{eR;"Lka%rQ}!@DeDu[{6 }( 5Q*Wi>)U$tz<5f::twvCm\C,Y^_vW+mRa e < :j70E? U`@< 1J2pX_*O%35y258 i )}4[g>?sj}/f6x&,L0~x/?W2,p h jj}`9ZDxX H 4j[T S$a8m0-}w4gN  ` _uB,wFX{7Gj Nu>51thJLB?i:#~;$  @jrBg9 9  iO#Z[6 ( V0&rOj{|U (|uonpi?8;2 Y  I5WO;GQW,a`D.xVnT!;*]J~Yb<b]4'J =wRqe.4|1 / 8bbs m*-4hznTf'fry6cvr5H} {    )F` eCt Lg%)2YTLWz]p^ 0'UFsjel |J{  T5,a007Q\ _ = Q<e9'3  l,A}'1 SRq9?  \)K{ at )f Y_T!`Mj=K4kgWl}&/w&d5e.kNS&\ AL } Lpq  c+p#tG( At["T[,G,bh  X jJ)|NE8Y})7 GZ {PkOb\ kYT_ dKX dz-5j'v X 4b0@ q9 Y P _WG],!q7^oRB0 HQ5YD+ll/w m#U|-} iE21vP6EN13 I V\i] cI \Z fbjg~5b1Ey}2(3oAFtK-"HXCfB L owB^?jW:\z^R8OX/mAiOlE*QA @WH 3JrIp,)4D#uaKjs= K $_AJNXY^/AJr? @ %EC7I^H5E0VFap-E_UE}P3@]&P(tA6d#R msm ~ ^s_Mk%Ubrg&`l&15KZ;"I*$p~XsU_H Z Cn)$*L1aT uM;DsU`",{4SNB N U G+<(ia [b`w*QY8OQyIkH:lEpJedq.%;ej ug fRb=1F:"G(#L]{1>\ L19qXv 6~QZx ? Q v s -(YhowH?: yrCz= T!yg+p={f&_7U'3xn~J^TZy=~K(p{I,0CX,TumE`)* #l- 9 #  X  x 4gMR"&*0r5(A~^`rxZAcWSKANqy\(j|CuM%[^x9WXp1DX*ABV  P   ^ M =bIbYt:Q[kN|WTwSUYH'v 6v/^iaS`gW!V.c #jD3Jf+bq?~""*_Q}Y4j g&H;fGR1WnyUet cVi5]IHg{ae99!"BYCf<7vIEL &1+2- 6"bW _ v 9  4 USXiw4{LhXW"kQy<"4x jj r""_\14'XY5l''.0 knZaS P<#HMG {W5~ g3 ;R T!/3g gpv=~kGk2K  iDPaRxADU} x-FY01$@8]hv@KGV^%-INdz^jADme3_}S; a?'!s.Zf{oz1Y0&\+x0{DvxW&+4~/k/)-<F/GxCt%=)k9SiD(p(=B6=&|< lU<, 4f_l;L[Z(>FMsn, T`Ls1z2hR}m' @"C>5kT +k5w,mj(PWQq sdmynCE5>MH  /Jbzzl<G/:/%&k8x`A2$jr8&<7S%ECm[n,yZCPH.~r(ng9`*VrvoheG{V6i{)H:[qRDS+7G9/ 07m~fumQ/Fnj}as/$vTFDLd^xi94".]66,Itdjpx{kj%~!{8o]nAY&Y^>'qNp*}\=p#r> D, B+7 OG;wfp:NdfIzu !@H'${9{,h=MGU *[,l   ^(U 7 k  gZPv[7$T?5o .{d1wQnP}1[ f U d RJ g se PX|qu]] D@:a($s.L)t"/gs!bAS[ M o@ z9L?  z OT#/g  0`;v5 > [ 4u p Bm;bB 2^n[5+Cj^OJuj]hj7XGiFj G  + +*I> y  3V$2@&mc6OoA>047QKr  y~ - u lmu2/>L87[k&@ZT}8<`;C|-yq  bg  TZ  |mXb}q;4 Cqsf'4KP0 _ &  2 NN=yUFxJi MrSj=2+ !6 Mlu) =O5y+ VW 0   } 5Vs/+_mER$}% >+ { U { ,pj,u%q|?t0ai@J\J ;K"ShB/yDSp2  e B, Fer#hfF MVv"`|; n 2 (2s $ gtY X u.]~+`[YDPA7 m@Q  J0-"~ h w # {%j  j CC5{l~ws|d  jW =~ + s <SCw3"UQ]{17|QFQyb)$?ew 1! ? < {  \   ,KPfZ\)sjr9#D V  M 9<  R,*W6kFc\J;e_7`i ,(@c@V fEm=` #$ F & H /5 h >KxQDK8 FQy.  ^z 3SS, O ZB#g]_&,HSCFqDs~ywN'xp\ Z Z [ C ){ [rpt3y{5@c9@e3D}Z+ @ I -D7 7 c1 .9Ng3h,@`9uBG filA j@7R)  r a @ [ h` M|&*{fl=#|9C=@! }?" N H2igt~WcC|@HOGbG@nOr0y}:7 bvC A  b $ ^ gy5/]8O+Ui/S9q:A+;%U%Jm>Q'r*~:!Fb+mr$TRm@}X}/gX QxLBJI; &#u+#I%8*HSPJ:& h79Vt'CR.RNxrn hhB*7UF,p>wm  ix y+P ^Hzy 7-[j^ P,#I (* W{Aw l0 [% 81 l  RavA#X+ o> fCQEܬl435[XhJH "^F $m - F& ]Y R? gjVQ \l,fhdXZX\;e12L " mmw D l#'t TCP^Vq ?;$1dD  ua e qe[f9,Zgv ZFs  cpA_   8Zx<Z2c~ ^m): ch A D$ `hB8P- 7} x If7 al!% ]6r ] &>z%f EQ o #]+] .tex & ;~ MDVRB| (w# pY.W0 kx  CNe FH ng;)nUA+j 1R0CV u4vp yU:{ }; 2 TBj K+/N<'*l } nU. R9,pzq  zs.Pev5n 1s]5r IT wf h. ox [@>5\ ^ p.i`  T M ^VZE( M $@  ] ymT U g` %  T` [cr KI/Q.w 7v*Uy%xrJ  k h j#;7! nC[SVRx hK=$=25,C n d FJzd}))Z~ z_(gD^Y^?B|mJD y(W gMIU+ U7 UY  { WT y wS"$jO3H/(Hng0 m 0P,@/ ^uhr q? >db!jZJ pN) iG   Sr6 bV/  {3x1+1F7< d x` .^"A . ?Z| _./2@$ &faZ% yO0M   9jHq keY !8 r&d PVf : m2 D QJ wmk  7E; T?_DolmIJ @=XV 9d OthHf- U 7 ( UG K 4 /a yxZov: S.Bl O]`k \ E6 YZb a*0p}j)"y I )c<3/SlX FNw[9JNcPPr. RIH+] 7Fn[3QWRI+ l0 uV)\u, 9bY"QuY4 w  h F:,n`(3Sh 1OArE1KVQuCPjp?2*}HGl0]*jK&(E.5sM !93Pc]}m0&]1UOL/(>"\1Y]LX0lA?JU)cz4|)/j$%*x5Ii+:IJL>;^=4 S|CzBK"Ps7   ZRFnV-Df .Rr<#+D%/,g*\K  5cANESScQ  % $GW 6H7.C'R%^5}YXyN[ w@ #c_'}GTlgT {u&%}G_6  L42   $'$Q Wh,OBfAin %/Qx z)}au4L|&r : ;%FYGv8  B*[ tV2})R! \  : bkP(';XRz OekOea*/*!<rBPdyRtb OFv{b]G  F _3sAmN= d Z YNj ieC# @;*ox~*pgM@,15BE sI# i!l 2n*i#[s X   ]J:eDOV S k  q 3YR3E` &  =g*RBZ2((#e/w=a=OLynr Fqz+*[Na-1 h 23^ j[nX vs'?_=*3vNCH E_B'39MR[O  Q l&t %wu7 /!/@2 F/Pc=(tS4PRv "g > U_Z_  .yXzB>&F | ^wJ0y(qS (R/  H ::9s 0 *oZ2!{f"Do|[aP)2j3%K[ ?8   >PZ5a  a T  ^eGNF Ab@ rn:A~P)XqG2=Gh&iWS4[#E gh)TLk1vcg-oQ)ca4Rto wM'D 5E/mjr?]E?cdC86 {6z  a5DuH4/Cj 3 yCRgD|tq?lhovTy!'h J  wgY 9?M~DApoxcxSw_2%<dx*sE@^U 7wZAqTnW~xjxa@+HlyC@"| ]W E 9 +  i _ @  _n>D`FYCEp >DZl9v?KO%j;D ,/nN ^G>5$#(%0kTtiS3@Tho7j= H M D R / ZZ!hq5U; sEy{X~lAVs8OY jqk"}<;hS@]O(3YP'"HzR~'?*]K~Ai".%SKw<]JgjMJ@pK2_wOZu+=;k(s~}"{_=ts0"\`oD;kjyg>Xet;+QvXK| ?g|sU| /M=LsxzOOsXA;=*1:H/>N]N,3SH[.KT@BbeN.%FZ: Utr,o>G<"@}o^U LYZ8 %2Z.6u $AXi ^aP=YQNgy ,902wz5y gjqw$FutsdjhXf~Vnw @W[opjFbd4#!/(5FS^ =2Q~^qH%2*eCXI&19m''(>:;UZIfsM&vmGx3 |*s:$RiE D`CV F/#CU,l |0O 5sVRG~EHNC@?gCLU6G'`,IMS0]e8pNo#'r9<_qzWn"br|tvVDiVb|QGSd 3n.(|m7r|op~2N2#O,#0-Bm)POg@GKMzh%Rq((SxzS0q aV\Vun[2>bx7|F73<:z-H,L#ySIp%~rpMwE)"a[Q\+y&b&$UY` ((V4Y oL(t0ID goI#1-DX*topv1IJ HHi/Z5_f?5,)w+X Nk1(u&Axbt2THf7(&vm$}e$,H!:wLotaysq\ :A**|;-Pb?RP5c=wK DWw{*q MOns47IgS0n=~5zz I|ID1_.|89+;h,<Wn-4,/0X  lTTA}MzP:diXhn9'k=}C^?2@:`&sIRW(:< ] +RF&% Saa2a^eG[y^!\zGpUF;8mg"xz|k]f[ }Vi0mi(zR[X^"SYy<]]#1&FeL|G3Es&uV{k*9BD^Eg/DhtInL&&)inu2=UjH4b@+~GN1U?|*A%vVO5jmW^F)aN C7l /+?]z(aC9"|A9a<}K[bvEc Mq'= + # 9[Ea[j ]x%8 (k T_`nHo 8uaWM.{jMp>(R \Hm1{x "  -K6pd ?$y$]qA~lrrzWz 9yb=%DWZ |zlI,O Vd,_'@nJTh=`/e r1 RW85z !jN-AX X_$$}D QS _ c5 Q{++ G *8XfzIruy?;*/|iyb) dA-h  PqRcF6=HkbPVM+c'W]+f5e cA7m?jw*Vdv hmD\r:4o , * ~'wKn@c xZ  * +j3z<mIROT^FK<u9Z`GTVxI^EV\yOw%A[ `cEgr9GbcL: Dc+7 d' Fld&VImC l[  Z?g/F$3b MWdsGG~bd\3iPas+?HNwn3 s#g#1x]__^ P6;[04g?R'Ao,:S*N2yH-U7gP- bL MD-5 [!)?hpoOi/axhyj'%eCvKGG-}#p$Cv\ N<,9sd@ M3w}YYV]8SDk#L7.4Jg=Z 3k p n7-Q Z ^ NX1jt#y6KWo?R|PO2nk2#0\pnQ"f"k,-=C68m/C BnN"Nk8S] }Tt^S>8Hk`FGFX_&d 2 '+  R)Z2p,Kg^~Q3Ed8OYzDsbpNa|}~iZ ,jBZnhvu;xR6CH]^Sq iQI@N  G &W3`W ~F~X]3xt4 TB~pLMDpE! mjB3>\S}g*/5P/H 4pr52F~]s**2NSs:ri`l^N|MRGT _vgW?//L&5 tKRRU`pJ^v2`b(4#H iL|bw%wH-G~Z l#rXDZx,)$8=SsBjt,NR/js }A@?`-"!>'opCr}-k#.udw[s2& HpeJ>$!;;d/_7[Jn_"F^7"x(!#XxJX{ _#9~:xxE{7097Hn^gv)C'*!g<&w}g ;j'O~ 0Y%C>'ti]C?8q_[k9Jp6m'} Y89P@FH2/ZF P3%, hah<P)BY7ye0,3b=qWD _UivUJ$2fU,ifQFv4Nl"}5%!JlgX"T9}Q04iHVvM$L&\PgPzb:@kp4o=$kxW5V}i=n 'ZpQjs;(LSnqPB!e\( Zo)gnIw2L7K3']!*zgf11 ta74 r7ax:gf<)oZI(<6 58!Rrr IJi]Ye-03Vp*D'VQotok\dlA`gF,OiW&FmT,VLDDTDZplxg7?M\x5tUBI] BUJWF8Z=#:$Bv>sNG5'[D=$D? `bZxI/:W&kBfe[sw=.1 B^FAO\wwCGH\X5. 5/-W*E0! #-"(JKGH1.k|DLYA@'8#dIAI*DP[DQV;$&;w~(:ESufy2*^vtE, 5IReXQ^mC#GY$BF69) )mlbywbt9paz8&D38 |gk#Dtwz`MS9`6 LuuE!#92VBDc=c ~ ?*-1+:I'*C]fTC|sR|v^saPEeg!\zY\_Y;-3y& 0l$ @VVg3}sA%$  r'Pg:XFo1?(;9l. {6*~MEX7ja99/fn+@wr& [ mgYT:dWY^&dFNq`3?M0dr~iL{m]z"jbRB|< X1\zZ7"F h-.5gl)j/+,>& !u+oT8PI'r'./K$7/ zujF8oc2'nUqJ6YX+[1:Rrl,I84'1sH [ @0'nT&>'81$B!#7%Boa?BliYv.WIrV:6kX5fg[t 1<:;CfJ\UbDAR*8*<b\GqH,RPoJA#\PcLt][@*4&>B%D4HTIL|bd[=cf6emi}ypdY7P<__I 1NClO Vl_ 7CEGL\Au`$E)3 J6 !v>.Vtgpu2F[QjH:'7 1!9Kvl#L_Mp7ruEzNXtbgy;1nLC  2F# z]vrY UW()3!h7fxt~}tkdx_k :C7#(83 >:!>sZf0MbVweJ[<;l`J9&6=OWywze=/1J\qr6!phTTQ2 -9& B,'L3=F =[RUytYDXWLhZ}k^uxmo*vjCUfdr:- 6,<)  8$tx{cnft{ON;Skr{AZX0FcY?kZblvyrIt_EbeQace\'SL7@Ds\$\h#:oN6}_.+#??'=W; "!3*Uhd9/ !&DUKD  2= +.!'.2!F'1KNLHUEBF4\u]ge SjxL[m`7>5~|  Sz& qFM}\//Q&bW7.-VpRG<E>IHUqbdrf]rb^GH' ,@/8- 7_yn~h83&?J+ #  ]Y)1DF2+ -TmY`l|h~zhbwebog~}qoRQXURDhzkLps^c]cQEL%Mc-EFz|\IEqPV4!7&":%ADGX96\hH? 3=OT#:k[;BSH+3JP:M> $&&6+" #/>4AUiSSrA$@ M,*6  BV$,L&  %  Q^FJhpQAc^Kr~j[PHHSLPN?F^cC8YC  -QP#+(1^W::/M`L?@2~A _vtz|saJ/Wq4Su ># $+=ELS>3GXak\arhrcqjwvry]RwrX|{s|~R_OEY=H+8>AMGdg;!#%21C-? w   0 ,( : :P4Uqs^eT"'&& '#OuG<Wzqaf}|kZfsYa|yoqmtc~`ZcKJV&)& }kW-+'PdfVTfG$"5% $ != MR:4 0: "67 1 !7GD,B8>$  'BA ( $'. #&^:--RdOn\2ID:#\sReu .HZdW453/(B7!A4BKWhkz}\Pm,J`b[zqaq{{dh||YnbNeabYPOpwlZWLKmx~m3 cMO>YbVV? E*5|  %.DD3;Z?id@L7J[OcdO;!3IgD@n-=J/:ZC-8bc{~yoUVgsq|z[u}uwX{i{s~cHuOA>EKUb]UCbQTeF$08>@<7$2 rVhE`mA\s\6  .C,1YALM,7@+TQ*>EH@=+Hf>b|X}jbaDA)5E7/ %2JRlu_hgn}s|vhRSh\Xlv|`tqlY4jqjnhulD2(-\LVdH\ $%%81#.31,]qngF;B7*QjF4;CXPJ5O9!,N@! " #wkocx|Y_t &%,% 2nvzzT@G,.PP]kuWzS  s~bOkGA_|jpYbzdV\hcfYL`2 ) $   %"%)p}mm~ONP~|^p~$%>6 =5 $'NM/ !   0> *;7 #._||{uq{cyHxkPioWQYimz_owk{\qnb6KC/.8>(1#$ &>\X7!:JFPZ=$ 8Nbu< }  &=_kJ(!$"& |' S<'Hyh~vsYxfnxwd{n 1b LY^YM%% " x`~vyhZs|ky}~Kiy[f<>XHqaRz[qvVsWBYaA*Smtq>>_ :Y=8TL2< 460NFC'4  %4#;* " :bL6lKL%)7+FK<A$I^0E>4hJ+6Nnli38YQG>bPC. ;1B ''',%&#)1.'=&1{w3.+>_ORC+* M/ ",&J]R.6bll8%JN^_hZdr[[ZsdKnqt<aDEaiurR7.&\gh9)&)67%GeGWn9>FXi~`uuqtio[:q{^@8Mip@<+.#Hs`CmK>MO?&%= "/?34)!-2 %%!/ AF*!5! OI5.$>8&C*7[>;L^~OP./(33ojGK+/$ *2"#A,<Sjp:SjDE<.=<@OgYV~\TbTL]a`^Zoc~r\{`yp\x}jg=Xz&7C,]pn{bobFOabmfIP|ywwY^yva^ohhqqF?6!*: 56BeUieqyM.\SrrYG56Dg>A]<zy{sxo_Tvlzwn}[xo{vzpeXFE'7J %(CGJ^D/EG>+ !&(mwQl_4eT(K %43$' 8&;#>C'[ro~mE9. 4 "90AGVngw8,  $*90""[T6=x{~z}tJ:KLsrjx}#& y n{x^wwdqgr}|cVf~ydtb}&Pwnsk`zsbp}y ~szZapG_WdutPzsTks  E509/#/!9O7C2H2<1<K*"$.$ /I/2:",:VvqoXM)9S  $D1 -"$- %}~OBCJ8  6@>EAazd_lP7A*4"4A>K1!& ::%2EP_L @=01)=#TW5'F5(%"!}u`20PE?RUevv{iFAVPBQ'3D9WN8AWs}y}zGP]HM>B4H5'/ .& :\gL)IFYS$=\((74?DOHF5!J]Nj^}qhN7.55>C#9E%+9K:3[O=$0 $(H<1(@+3D%&%$ <F161<D)/ 8R0RnmpbaDJSg^XX_t;226<)/4CX@** $)CFQ_VK*?F+.2hSQY(%JJ<*'">986d|}w{[Suolurz{wS#C*1L? lWne\tSD3 BQgd4 #'  279"/DE+-J57ZSJrkme[JkvdydH031FA,7-.Kqay> >: %2.*J"-G@[P^pp}nntNAV:68L?,0-39KPN#  ~Tn~lbvs]t{DXcs|x GNL+%3 &-#$ &',!,.D=WQ'/."/P%5MYR>Gjc<MdND]@10(0PQ!F<'IBnpfjqz]{erub~uvfY/1' noah]ndJZLl? M`jtOw|dKmYHgJ2?cO9UcU[xiZB:Ppha( @7K@K\E-(QEKZDJ[_bRS^:MT/)EtYH~d^vhj_Lsvgf|rvwhF7>LO8 !B% ^Z/),>/)^\MrU5$ "$&9(32393/()  hOVAS_WR2."EGYv^NK>fSIumnI.Sukuwz'<C+AC*O>9#$;/% $JT:$?BB0^tKb~m}zl6MG&, )B&8/J{M`j`Ra}WpaNM0*gw~ '.#0 )bzq*~lyhlm|ooks,.M8GRD_3& !J(/FFotvteI``4E24cgugfvt ,% { (#"xsW=exW{~## pRo{k`I^}VOlc{T13 4--FO?$4ACC*2 @$ "*<A/^`O:. "  % amxcyq 4rOM>;i?_su~rviKqj@Yxuh~  . ER3/Qkcussr`rywzVd}ul'33(<J!,*E=))",=G66 o`~HuedtzY;U6 Pn@,#  $ fl{ &! !JM;-4/G,&& 3V0,HPDAddgMZ47BY)!O=600()OJSc@Q\d' _lXCixXtdaP283;,"Ck\8AMDHM5" :m5>8 ,O/<F;3;eW^x0;?RaOy[:9:">m@!.#>(-V509BK75%"2/#E;%1 x)5$1" "' 1L+Iogpitp~q]dx9"Jf- 21fmzbywyiYrgqc;?U;1$##Uz`qtnn_qztmZ]h_QPbWcn 6# ",AI[WVEI/?S ":5'%6[(&#;4@(ECSP/Za6, w\bmxq}uYAewir}xcA4:LX11Fq}z(;CNFLXQF8SmuzWb~bmwxP|r[ltmLhcXNTgliZOgw}|~adMIWnhlZ}tgfvOEdr puV[mWrXKd46E1JD%?  + $2Ub]@ALSsys_L-4<VW6NA=  @NFGEZB<E3P]^eH?8#1%&"Q>:4:c]T:,6# 5WhDHT 2RDXP-. #"#;E* )W,?BTmK=D&L7 %TEPF ?I\Hq|_QH6.$!8<$$ *  /0F(;QXK4PQA/7 K<Mdp_\fwsohOpmy6,:##  #{~zpH,"->NPIP:^qJCr{W|p{`|uub\PI" !  4$!cyx ((")(3>QFCmxva;&65DKcbZM<g^KOiX;<O43R@=+L&<6,5@(&G# EC9D95NA943AFZG /7PM:* 6F! )#-'  )#)x z}  z ~pweq^p{l{x );YiQiyTqtWf@M=?+)B::gihpn||ear{pB6IBbW34WaL[iq|[Yn6*4(_]9E<NL Ib[~v`PzeQ #DS@'..%2 +(957$- 3+(:RMK? 4  &9,(#;R *I2" ,B('S9:_gVyxi;T69;.'>~!K2Dj$J1yz$; O\KI;7~CD$U#7e12C1%L/".y# SYL(,] /(dAm\Pojz_{# 3-GgF/)DZ8@_JQQ3hph`TYcS[c`ezosnu] -($ ? cMs[azrUS{[em]oddwjqt?i]KM57$D28RLg&%I-)V7LB ;YBWaP7?A=)&H'4, /18EE_`KrughcFB4O[RTGR9Xka\cchI0SD2<EVLOK,VAI2%I< Sh; 'npm|hmd|~G;B5VT;k|Mu~`h{F~lI 9- cOmxg_oP;M+7J* +I1 1VJ;GO''=exokb\|qtdibWjuwZsiM^L8KaoS73ZiIXxy}pW:kyz`yQoqqi%Q_Wl=z|^apj\ht`^]~~|to ~MVUgkVXebBZX,Y;H82Qg7dcIC+dOlrRfdYP010FOZ2    *F:L=:b4JJE4E/0Yfb|ox) 'yukrei~]ncjg^vy:\h6a@LSK\PV)"p'Q2JEaVVS D}x~(>}CqP#<D R. f2 sUne=ZI "CNp:?'<dee`S61>:0<E-_H:*.2xo\Kpocketsphinx-5prealpha/test/data/goforward.gram0000664000175000017500000000044712504317076017143 00000000000000#JSGF V1.0; /** * JSGF Grammar for Turtle example */ grammar goforward; public = go forward ten meters; public = go [meter | meters]; = forward | backward; = one | two | three | four | five | six | seven | eight | nine | ten; pocketsphinx-5prealpha/test/compare_table.pl0000775000175000017500000000635612504317076016532 00000000000000#!/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 (tolerance)\n" unless (($#ARGV == 1) or ($#ARGV == 2)); my $fn1 = $ARGV[0]; my $fn2 = $ARGV[1]; my $tolerance = 0.002; $tolerance = $ARGV[2] if ($#ARGV == 2); my $comparison = 0; my $line1 = ""; my $line2 = ""; if ((open (FN1, "<$fn1")) and (open (FN2, "<$fn2"))) { $comparison = 1; while (($line1 = ) . ($line2 = )) { 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; } for (my $i = 0; $i <= $#field1; $i++) { 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; } } elsif (abs($field1[$i] - $field2[$i]) > $tolerance) { # If the tokens are both numbers, check if they match within # a 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"; } pocketsphinx-5prealpha/test/Makefile.am0000664000175000017500000000564512546074702015433 00000000000000SUBDIRS = unit regression EXTRA_DIST = \ compare_table.pl \ testfuncs_cygwin.sh \ word_align.pl \ data/an4_ci_cont/feat.params \ data/an4_ci_cont/mdef \ data/an4_ci_cont/means \ data/an4_ci_cont/mixture_weights \ data/an4_ci_cont/noisedict \ data/an4_ci_cont/transition_matrices \ data/an4_ci_cont/variances \ data/cards/001.wav \ data/cards/002.wav \ data/cards/003.wav \ data/cards/004.wav \ data/cards/005.wav \ data/cards/cards.fileids \ data/cards/cards.gram \ data/cards/cards.hyp \ data/cards/cards.transcription \ data/defective.gram \ data/defective.dic \ data/goforward.fsg \ data/goforward.gram \ data/goforward.raw \ data/goforward.mfc \ data/mllr_matrices \ data/numbers.raw \ data/something.raw \ data/test.lmctl \ data/tidigits/dhd.2934z.raw \ data/tidigits/man.ah.111a.mfc \ data/tidigits/man.ah.1b.mfc \ data/tidigits/man.ah.2934za.mfc \ data/tidigits/man.ah.35oa.mfc \ data/tidigits/man.ah.3oa.mfc \ data/tidigits/man.ah.4625a.mfc \ data/tidigits/man.ah.588zza.mfc \ data/tidigits/man.ah.63a.mfc \ data/tidigits/man.ah.6o838a.mfc \ data/tidigits/man.ah.75913a.mfc \ data/tidigits/man.ah.844o1a.mfc \ data/tidigits/man.ah.8b.mfc \ data/tidigits/man.ah.9b.mfc \ data/tidigits/man.ah.o789a.mfc \ data/tidigits/man.ah.z4548a.mfc \ data/tidigits/man.ah.zb.mfc \ data/tidigits/test-tidigits-fsg.match \ data/tidigits/test-tidigits-simple.match \ data/tidigits/tidigits.ctl \ data/tidigits/tidigits.lsn \ data/tidigits/woman.ak.1b.mfc \ data/tidigits/woman.ak.276317oa.mfc \ data/tidigits/woman.ak.334a.mfc \ data/tidigits/woman.ak.3z3z9a.mfc \ data/tidigits/woman.ak.48z66zza.mfc \ data/tidigits/woman.ak.532a.mfc \ data/tidigits/woman.ak.5z874a.mfc \ data/tidigits/woman.ak.6728za.mfc \ data/tidigits/woman.ak.75a.mfc \ data/tidigits/woman.ak.84983a.mfc \ data/tidigits/woman.ak.8a.mfc \ data/tidigits/woman.ak.99731a.mfc \ data/tidigits/woman.ak.o69a.mfc \ data/tidigits/woman.ak.ooa.mfc \ data/tidigits/woman.ak.za.mfc \ data/tidigits/hmm/feat.params \ data/tidigits/hmm/variances \ data/tidigits/hmm/transition_matrices \ data/tidigits/hmm/sendump \ data/tidigits/hmm/mdef \ data/tidigits/hmm/means \ data/tidigits/lm/tidigits.dic \ data/tidigits/lm/tidigits.lm.bin \ data/tidigits/lm/tidigits.fsg \ data/turtle.dic \ data/turtle.lm.bin \ data/unreachable.lat \ data/wsj/440c0201.mfc \ data/wsj/441c0201.mfc \ data/wsj/442c0201.mfc \ data/wsj/443c0201.mfc \ data/wsj/444c0201.mfc \ data/wsj/446c0201.mfc \ data/wsj/447c0201.mfc \ data/wsj/n800_440c0201.wav \ data/wsj/n800_440c0202.wav \ data/wsj/n800_440c0203.wav \ data/wsj/n800_440c0204.wav \ data/wsj/n800_440c0205.wav \ data/wsj/n800_440c0206.wav \ data/wsj/n800_440c0207.wav \ data/wsj/s1.mllr \ data/wsj/test-hub4-n800-fwdtree.match \ data/wsj/test-hub4-simple-pl.match \ data/wsj/test-hub4-simple.match \ data/wsj/test5k.n800.ctl \ data/wsj/test5k.n800.lsn \ data/wsj/test5k.s1.ctl \ data/wsj/test5k.s1.lsn pocketsphinx-5prealpha/test/regression/0000775000175000017500000000000012560377662015634 500000000000000pocketsphinx-5prealpha/test/regression/Makefile.am0000664000175000017500000000042012504317076017573 00000000000000TESTS = \ test-hub4-cards.sh \ test-tidigits-fsg.sh \ test-tidigits-simple.sh # Need 16khz data for tests # test-hub4-n800-fwdtree.sh # test-hub4-simple-pl.sh # test-hub4-simple.sh TESTDATA = EXTRA_DIST = $(TESTS) $(TESTDATA) CLEANFILES = *.match *.log pocketsphinx-5prealpha/test/regression/test-hub4-cards.sh0000775000175000017500000000123412504317076021013 00000000000000#!/bin/sh . ../testfuncs.sh bn=`basename $0 .sh` echo "Test: $bn" run_program pocketsphinx_batch \ -hmm $model/en-us/en-us \ -jsgf $data/cards/cards.gram \ -dict $model/en-us/cmudict-en-us.dict\ -ctl $data/cards/cards.fileids \ -adcin yes \ -cepdir $data/cards \ -cepext .wav \ -hyp $bn.match \ -backtrace yes \ > $bn.log 2>&1 # Test whether it actually completed if [ $? = 0 ]; then pass "run" else fail "run" fi # Check the decoding results grep AVERAGE $bn.log $tests/word_align.pl -i $data/cards/cards.transcription $bn.match | grep 'TOTAL Percent' compare_table "match" $data/cards/cards.hyp $bn.match 1000000 pocketsphinx-5prealpha/test/regression/test-tidigits-simple.sh0000775000175000017500000000115712546074702022174 00000000000000#!/bin/sh . ../testfuncs.sh bn=`basename $0 .sh` echo "Test: $bn" run_program pocketsphinx_batch \ -hmm $data/tidigits/hmm \ -lm $data/tidigits/lm/tidigits.lm.bin \ -dict $data/tidigits/lm/tidigits.dic \ -ctl $data/tidigits/tidigits.ctl \ -cepdir $data/tidigits \ -hyp $bn.match \ > $bn.log 2>&1 # Test whether it actually completed if [ $? = 0 ]; then pass "run" else fail "run" fi # Check the decoding results grep AVERAGE $bn.log $tests/word_align.pl -i $data/tidigits/tidigits.lsn $bn.match | grep 'TOTAL Percent' compare_table "match" $data/tidigits/$bn.match $bn.match 100000 pocketsphinx-5prealpha/test/regression/test-tidigits-fsg.sh0000775000175000017500000000120012504317076021445 00000000000000#!/bin/sh . ../testfuncs.sh bn=`basename $0 .sh` echo "Test: $bn" run_program pocketsphinx_batch \ -hmm $data/tidigits/hmm \ -fsg $data/tidigits/lm/tidigits.fsg \ -dict $data/tidigits/lm/tidigits.dic \ -ctl $data/tidigits/tidigits.ctl \ -cepdir $data/tidigits \ -hyp $bn.match \ -wbeam 1e-48 \ > $bn.log 2>&1 # Test whether it actually completed if [ $? = 0 ]; then pass "run" else fail "run" fi # Check the decoding results grep AVERAGE $bn.log $tests/word_align.pl -i $data/tidigits/tidigits.lsn $bn.match | grep 'TOTAL Percent' compare_table "match" $data/tidigits/$bn.match $bn.match 100000 pocketsphinx-5prealpha/test/regression/Makefile.in0000664000175000017500000006541612525147724017630 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@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.in $(srcdir)/Makefile.am \ $(top_srcdir)/test-driver ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \ $(top_srcdir)/m4/ax_python_devel.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.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } 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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ 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@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GST_CFLAGS = @GST_CFLAGS@ GST_LIBS = @GST_LIBS@ GST_MAJORMINOR = @GST_MAJORMINOR@ GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@ GStreamer_CFLAGS = @GStreamer_CFLAGS@ GStreamer_LIBS = @GStreamer_LIBS@ 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@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ 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_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SPHINXBASE_CFLAGS = @SPHINXBASE_CFLAGS@ SPHINXBASE_LIBS = @SPHINXBASE_LIBS@ SPHINXBASE_SWIG = @SPHINXBASE_SWIG@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ plugindir = @plugindir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ 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 = \ test-hub4-cards.sh \ test-tidigits-fsg.sh \ test-tidigits-simple.sh # Need 16khz data for tests # test-hub4-n800-fwdtree.sh # test-hub4-simple-pl.sh # test-hub4-simple.sh TESTDATA = EXTRA_DIST = $(TESTS) $(TESTDATA) CLEANFILES = *.match *.log all: all-am .SUFFIXES: .SUFFIXES: .log .test .test$(EXEEXT) .trs $(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) --foreign test/regression/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign 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 $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ else \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test-hub4-cards.sh.log: test-hub4-cards.sh @p='test-hub4-cards.sh'; \ b='test-hub4-cards.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-tidigits-fsg.sh.log: test-tidigits-fsg.sh @p='test-tidigits-fsg.sh'; \ b='test-tidigits-fsg.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test-tidigits-simple.sh.log: test-tidigits-simple.sh @p='test-tidigits-simple.sh'; \ b='test-tidigits-simple.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) 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 "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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 html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am 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: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ clean-libtool cscopelist-am ctags-am 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 recheck tags-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: pocketsphinx-5prealpha/test/word_align.pl0000775000175000017500000002272212504317076016055 00000000000000#!/usr/bin/perl -w # word_align.pl - Calculate word error and accuracy for a recognition # hypothesis file vs. a reference transcription # # Written by David Huggins-Daines for Speech # Recognition and Understanding 11-751, Carnegie Mellon University, # October 2004. use strict; use Getopt::Long; use Pod::Usage; use vars qw($Verbose $CER $IgnoreUttID); use encoding 'utf8'; my ($help,%hyphash); GetOptions( 'help|?' => \$help, 'verbose|v' => \$Verbose, 'cer|c' => \$CER, 'ignore-uttid|i' => \$IgnoreUttID, ) or pod2usage(1); pod2usage(1) if $help; pod2usage(2) unless @ARGV == 2; my ($ref, $hyp) = @ARGV; open HYP, "<$hyp" or die "Failed to open $hyp: $!"; while (defined(my $hyp_utt=)){ my $hyp_uttid; ($hyp_utt, $hyp_uttid) = s3_magic_norm($hyp_utt); $hyphash{$hyp_uttid} = "$hyp_utt ($hyp_uttid)"; } close HYP; open REF, "<$ref" or die "Failed to open $ref: $!"; open HYP, "<$hyp" or die "Failed to open $hyp: $!"; use constant INS => 1; use constant DEL => 2; use constant MATCH => 3; use constant SUBST => 4; use constant BIG_NUMBER => 1e50; my ($total_words, $total_match, $total_cost, $total_hyp); my ($total_ins, $total_del, $total_subst); while (defined(my $ref_utt = )) { my $hyp_utt; my $ref_uttid; my $hyp_uttid; last unless defined $ref_utt; ($ref_utt,$ref_uttid)=s3_magic_norm($ref_utt); if(defined $IgnoreUttID){ $hyp_utt = ; die "UttID is ignored but file size mismatch between $ref and $hyp" unless defined($hyp_utt); }else{ $hyp_utt=$hyphash{$ref_uttid}; die "UttID is not ignored but it could not found in any entries of the hypothesis file on line3 $. UTTID: $ref_uttid\n" unless defined($hyp_utt); } ($hyp_utt,$hyp_uttid)=s3_magic_norm($hyp_utt); if(! defined $IgnoreUttID){ die "Utterance ID mismatch on line $.: $ref_uttid != $hyp_uttid" unless $ref_uttid eq $hyp_uttid; } # Split the text into an array of words my @ref_words = split ' ', $ref_utt; my @hyp_words = split ' ', $hyp_utt; if ($CER) { # Split the text into an array of characters @ref_words = map { split "" } @ref_words; @hyp_words = map { split "" } @hyp_words; } my (@align_matrix, @backtrace_matrix); # Initialize the alignment and backtrace matrices initialize(\@ref_words, \@hyp_words, \@align_matrix, \@backtrace_matrix); # Do DP alignment maintaining backtrace pointers my $cost = align(\@ref_words, \@hyp_words, \@align_matrix, \@backtrace_matrix); # Find the backtrace my ($alignment, $ins, $del, $subst, $match) = backtrace(\@ref_words, \@hyp_words, \@align_matrix, \@backtrace_matrix); # Format the alignment nicely my ($ref_align, $hyp_align) = ("", ""); foreach (@$alignment) { my ($ref, $hyp) = @$_; my $width = 0; if (defined($ref) and defined($hyp)) { if ($CER or ($ref =~ /\p{InCJKUnifiedIdeographs}/ or $ref =~ /\p{Han}/ or $hyp =~ /\p{Han}/)) { # Assume this is Chinese, no capitalization so put ** around errors if ($ref ne $hyp) { $ref = "*$ref*"; $hyp = "*$hyp*"; } } elsif ($ref eq $hyp) { # Capitalize errors (they already are...), lowercase matches $ref = lc $ref; $hyp = lc $hyp; } } # Replace deletions with *** foreach ($ref, $hyp) { $_ = "***" unless defined $_ }; # Find the width of this column foreach ($ref, $hyp) { $width = length if length > $width }; $width = 3 if $width < 3; # Make it long enough for *** # Space out the words and concatenate them to the output $ref_align .= sprintf("%-*s ", $width, $ref); $hyp_align .= sprintf("%-*s ", $width, $hyp); } $ref_uttid = "" unless defined $ref_uttid; # avoid warnings print "$ref_align ($ref_uttid)\n$hyp_align ($hyp_uttid)\n"; # Print out the word error and accuracy rates my $error = @ref_words == 0 ? 1 : $cost/@ref_words; my $acc = @ref_words == 0 ? 0 : $match/@ref_words; printf("Words: %d Correct: %d Errors: %d Percent correct = %.2f%% Error = %.2f%% Accuracy = %.2f%%\n", scalar(@ref_words), $match, $cost, $acc*100, $error*100, 100-$error*100); print "Insertions: $ins Deletions: $del Substitutions: $subst\n"; $total_cost += $cost; $total_match += $match; $total_words += @ref_words; $total_hyp += @hyp_words; $total_ins += $ins; $total_del += $del; $total_subst += $subst; } # Print out the total word error and accuracy rates my ($error, $acc); if ($total_words == 0) { $error = $total_cost/$total_hyp; $acc = $total_match/$total_hyp; } else { $error = $total_cost/$total_words; $acc = $total_match/$total_words; } printf("TOTAL Words: %d Correct: %d Errors: %d\nTOTAL Percent correct = %.2f%% Error = %.2f%% Accuracy = %.2f%%\n", $total_words, $total_match, $total_cost, $acc*100, $error*100, 100-$error*100); print "TOTAL Insertions: $total_ins Deletions: $total_del Substitutions: $total_subst\n"; # This function normalizes a line of a match file. sub s3_magic_norm{ my ($word)=@_; my $uttid; # Remove line endings $word =~ s/[\n\r]+$//; # the agnostic way... # This computes the uttid and remove it from a line. $word =~ s/\(([^) ]+)[^)]*\)$// ; $uttid = $1; # Normalize case $word = uc $word; # Remove filler words and context cues $word =~ s/<[^>]+>//g; $word =~ s/\+\+[^+]+\+\+//g; $word =~ s/\+[^+]+\+//g; # Remove alternative pronunciations $word =~ s/\([1-9]\)//g; # Remove class tags $word =~ s/:\S+//g; # Split apart compound words and acronyms $word =~ tr/-_./ /; return ($word,$uttid); } sub initialize { my ($ref_words, $hyp_words, $align_matrix, $backtrace_matrix) = @_; # All initial costs along the j axis are insertions for (my $j = 0; $j <= @$hyp_words; ++$j) { $$align_matrix[0][$j] = $j; } for (my $j = 0; $j <= @$hyp_words; ++$j) { $$backtrace_matrix[0][$j] = INS; } # All initial costs along the i axis are deletions for (my $i = 0; $i <= @$ref_words; ++$i) { $$align_matrix[$i][0] = $i; } for (my $i = 0; $i <= @$ref_words; ++$i) { $$backtrace_matrix[$i][0] = DEL; } } sub align { my ($ref_words, $hyp_words, $align_matrix, $backtrace_matrix) = @_; for (my $i = 1; $i <= @$ref_words; ++$i) { for (my $j = 1; $j <= @$hyp_words; ++$j) { # Find insertion, deletion, substitution scores my ($ins, $del, $subst); # Cost of a substitution (0 if they are equal) my $cost = $$ref_words[$i-1] ne $$hyp_words[$j-1]; # Find insertion, deletion, substitution costs $ins = $$align_matrix[$i][$j-1] + 1; $del = $$align_matrix[$i-1][$j] + 1; $subst = $$align_matrix[$i-1][$j-1] + $cost; print "Costs at $i $j: INS $ins DEL $del SUBST $subst\n" if $Verbose; # Get the minimum one my $min = BIG_NUMBER; foreach ($ins, $del, $subst) { if ($_ < $min) { $min = $_; } } $$align_matrix[$i][$j] = $min; # If the costs are equal, prefer match or substitution # (keep the path diagonal). if ($min == $subst) { print(($cost ? "SUBSTITUTION" : "MATCH"), "($$ref_words[$i-1] <=> $$hyp_words[$j-1])\n") if $Verbose; $$backtrace_matrix[$i][$j] = MATCH+$cost; } elsif ($min == $ins) { print "INSERTION (0 => $$hyp_words[$j-1])\n" if $Verbose; $$backtrace_matrix[$i][$j] = INS; } elsif ($min == $del) { print "DELETION ($$ref_words[$i-1] => 0)\n" if $Verbose; $$backtrace_matrix[$i][$j] = DEL; } } } return $$align_matrix[@$ref_words][@$hyp_words]; } sub backtrace { my ($ref_words, $hyp_words, $align_matrix, $backtrace_matrix) = @_; # Backtrace to find number of ins/del/subst my @alignment; my $i = @$ref_words; my $j = @$hyp_words; my ($inspen, $delpen, $substpen, $match) = (0,0,0,0); while (!($i == 0 and $j == 0)) { my $pointer = $$backtrace_matrix[$i][$j]; print "Cost at $i $j: $$align_matrix[$i][$j]\n" if $Verbose; if ($pointer == INS) { print "INSERTION (0 => $$hyp_words[$j-1])" if $Verbose; # Append the pair 0:hyp[j] to the front of the alignment unshift @alignment, [undef, $$hyp_words[$j-1]]; ++$inspen; --$j; print " - moving to $i $j\n" if $Verbose; } elsif ($pointer == DEL) { print "DELETION ($$ref_words[$i-1] => 0)" if $Verbose; # Append the pair ref[i]:0 to the front of the alignment unshift @alignment, [$$ref_words[$i-1], undef]; ++$delpen; --$i; print " - moving to $i $j\n" if $Verbose; } elsif ($pointer == MATCH) { print "MATCH ($$ref_words[$i-1] <=> $$hyp_words[$j-1])" if $Verbose; # Append the pair ref[i]:hyp[j] to the front of the alignment unshift @alignment, [$$ref_words[$i-1], $$hyp_words[$j-1]]; ++$match; --$j; --$i; print " - moving to $i $j\n" if $Verbose; } elsif ($pointer == SUBST) { print "SUBSTITUTION ($$ref_words[$i-1] <=> $$hyp_words[$j-1])" if $Verbose; # Append the pair ref[i]:hyp[j] to the front of the alignment unshift @alignment, [$$ref_words[$i-1], $$hyp_words[$j-1]]; ++$substpen; --$j; --$i; print " - moving to $i $j\n" if $Verbose; } else { last; } } return (\@alignment, $inspen, $delpen, $substpen, $match); } __END__ =head1 NAME calculate_wer - Calculate Word Error Rate from a reference and hypothesis file =head1 SYNOPSIS calculate_wer [options] reference_file hypothesis_file =head1 OPTIONS =over 8 =item B<--help>, B<-?> Print a brief help message and exit. =item B<--verbose>, B<-v> Print out messages tracing the alignment algorithm. =cut pocketsphinx-5prealpha/test/Makefile.in0000664000175000017500000005321712546075642015446 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@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.in $(srcdir)/Makefile.am \ $(srcdir)/testfuncs.sh.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \ $(top_srcdir)/m4/ax_python_devel.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.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = testfuncs.sh CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-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 \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ 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@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GST_CFLAGS = @GST_CFLAGS@ GST_LIBS = @GST_LIBS@ GST_MAJORMINOR = @GST_MAJORMINOR@ GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@ GStreamer_CFLAGS = @GStreamer_CFLAGS@ GStreamer_LIBS = @GStreamer_LIBS@ 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@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ 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_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SPHINXBASE_CFLAGS = @SPHINXBASE_CFLAGS@ SPHINXBASE_LIBS = @SPHINXBASE_LIBS@ SPHINXBASE_SWIG = @SPHINXBASE_SWIG@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ plugindir = @plugindir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ 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 \ testfuncs_cygwin.sh \ word_align.pl \ data/an4_ci_cont/feat.params \ data/an4_ci_cont/mdef \ data/an4_ci_cont/means \ data/an4_ci_cont/mixture_weights \ data/an4_ci_cont/noisedict \ data/an4_ci_cont/transition_matrices \ data/an4_ci_cont/variances \ data/cards/001.wav \ data/cards/002.wav \ data/cards/003.wav \ data/cards/004.wav \ data/cards/005.wav \ data/cards/cards.fileids \ data/cards/cards.gram \ data/cards/cards.hyp \ data/cards/cards.transcription \ data/defective.gram \ data/defective.dic \ data/goforward.fsg \ data/goforward.gram \ data/goforward.raw \ data/goforward.mfc \ data/mllr_matrices \ data/numbers.raw \ data/something.raw \ data/test.lmctl \ data/tidigits/dhd.2934z.raw \ data/tidigits/man.ah.111a.mfc \ data/tidigits/man.ah.1b.mfc \ data/tidigits/man.ah.2934za.mfc \ data/tidigits/man.ah.35oa.mfc \ data/tidigits/man.ah.3oa.mfc \ data/tidigits/man.ah.4625a.mfc \ data/tidigits/man.ah.588zza.mfc \ data/tidigits/man.ah.63a.mfc \ data/tidigits/man.ah.6o838a.mfc \ data/tidigits/man.ah.75913a.mfc \ data/tidigits/man.ah.844o1a.mfc \ data/tidigits/man.ah.8b.mfc \ data/tidigits/man.ah.9b.mfc \ data/tidigits/man.ah.o789a.mfc \ data/tidigits/man.ah.z4548a.mfc \ data/tidigits/man.ah.zb.mfc \ data/tidigits/test-tidigits-fsg.match \ data/tidigits/test-tidigits-simple.match \ data/tidigits/tidigits.ctl \ data/tidigits/tidigits.lsn \ data/tidigits/woman.ak.1b.mfc \ data/tidigits/woman.ak.276317oa.mfc \ data/tidigits/woman.ak.334a.mfc \ data/tidigits/woman.ak.3z3z9a.mfc \ data/tidigits/woman.ak.48z66zza.mfc \ data/tidigits/woman.ak.532a.mfc \ data/tidigits/woman.ak.5z874a.mfc \ data/tidigits/woman.ak.6728za.mfc \ data/tidigits/woman.ak.75a.mfc \ data/tidigits/woman.ak.84983a.mfc \ data/tidigits/woman.ak.8a.mfc \ data/tidigits/woman.ak.99731a.mfc \ data/tidigits/woman.ak.o69a.mfc \ data/tidigits/woman.ak.ooa.mfc \ data/tidigits/woman.ak.za.mfc \ data/tidigits/hmm/feat.params \ data/tidigits/hmm/variances \ data/tidigits/hmm/transition_matrices \ data/tidigits/hmm/sendump \ data/tidigits/hmm/mdef \ data/tidigits/hmm/means \ data/tidigits/lm/tidigits.dic \ data/tidigits/lm/tidigits.lm.bin \ data/tidigits/lm/tidigits.fsg \ data/turtle.dic \ data/turtle.lm.bin \ data/unreachable.lat \ data/wsj/440c0201.mfc \ data/wsj/441c0201.mfc \ data/wsj/442c0201.mfc \ data/wsj/443c0201.mfc \ data/wsj/444c0201.mfc \ data/wsj/446c0201.mfc \ data/wsj/447c0201.mfc \ data/wsj/n800_440c0201.wav \ data/wsj/n800_440c0202.wav \ data/wsj/n800_440c0203.wav \ data/wsj/n800_440c0204.wav \ data/wsj/n800_440c0205.wav \ data/wsj/n800_440c0206.wav \ data/wsj/n800_440c0207.wav \ data/wsj/s1.mllr \ data/wsj/test-hub4-n800-fwdtree.match \ data/wsj/test-hub4-simple-pl.match \ data/wsj/test-hub4-simple.match \ data/wsj/test5k.n800.ctl \ data/wsj/test5k.n800.lsn \ data/wsj/test5k.s1.ctl \ data/wsj/test5k.s1.lsn 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) --foreign test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign 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 $(am__aclocal_m4_deps): 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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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; \ ($(am__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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ 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 || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$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 \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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 html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: 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: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am 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-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: pocketsphinx-5prealpha/test/testfuncs_cygwin.sh0000664000175000017500000000221212504317076017312 00000000000000# Utility functions and parameters for regression tests # Predefined directories you may need : ${CONFIGURATION:=Debug} builddir="../../bin/$CONFIGURATION" sourcedir="../.." tests=$sourcedir/test data=$sourcedir/test/data model=$sourcedir/model cp -f ../../../sphinxbase/bin/$CONFIGURATION/*.dll "$builddir" # 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 } pocketsphinx-5prealpha/test/unit/0000775000175000017500000000000012560377662014433 500000000000000pocketsphinx-5prealpha/test/unit/test_ps_fwdflat_bestpath.c0000664000175000017500000000131212546074702021567 00000000000000#include #include #include #include "pocketsphinx_internal.h" #include "test_macros.h" #include "ps_test.c" int main(int argc, char *argv[]) { cmd_ln_t *config; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-lm", MODELDIR "/en-us/en-us.lm.bin", "-dict", MODELDIR "/en-us/cmudict-en-us.dict", "-fwdtree", "no", "-fwdflat", "yes", "-bestpath", "yes", "-input_endian", "little", "-samprate", "16000", NULL)); return ps_decoder_test(config, "BESTPATH", "go forward ten meters"); } pocketsphinx-5prealpha/test/unit/test_ps_fwdtree.c0000664000175000017500000000131012546074702017704 00000000000000#include #include #include #include "pocketsphinx_internal.h" #include "test_macros.h" #include "ps_test.c" int main(int argc, char *argv[]) { cmd_ln_t *config; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-lm", MODELDIR "/en-us/en-us.lm.bin", "-dict", MODELDIR "/en-us/cmudict-en-us.dict", "-fwdtree", "yes", "-fwdflat", "no", "-bestpath", "no", "-input_endian", "little", "-samprate", "16000", NULL)); return ps_decoder_test(config, "FWDTREE", "go forward ten meters"); } pocketsphinx-5prealpha/test/unit/test_jsgf.c0000664000175000017500000001172612520771215016502 00000000000000#include #include #include #include #include #include #include "pocketsphinx_internal.h" #include "fsg_search_internal.h" #include "test_macros.h" int main(int argc, char *argv[]) { ps_decoder_t *ps; cmd_ln_t *config; acmod_t *acmod; fsg_search_t *fsgs; jsgf_t *jsgf; jsgf_rule_t *rule; fsg_model_t *fsg; ps_seg_t *seg; ps_lattice_t *dag; FILE *rawfh; char const *hyp; int32 score, prob; clock_t c; int i; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-dict", DATADIR "/turtle.dic", "-input_endian", "little", "-samprate", "16000", NULL)); TEST_ASSERT(ps = ps_init(config)); jsgf = jsgf_parse_file(DATADIR "/goforward.gram", NULL); TEST_ASSERT(jsgf); rule = jsgf_get_rule(jsgf, "goforward.move2"); TEST_ASSERT(rule); fsg = jsgf_build_fsg(jsgf, rule, ps->lmath, 7.5); TEST_ASSERT(fsg); fsg_model_write(fsg, stdout); ps_set_fsg(ps, "goforward.move2", fsg); ps_set_search(ps, "goforward.move2"); acmod = ps->acmod; fsgs = (fsg_search_t *) fsg_search_init("fsg", fsg, config, acmod, ps->dict, ps->d2p); setbuf(stdout, NULL); c = clock(); for (i = 0; i < 5; ++i) { int16 buf[2048]; size_t nread; int16 const *bptr; int nfr; int is_final; TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb")); acmod_start_stream(acmod); TEST_EQUAL(0, acmod_start_utt(acmod)); fsg_search_start(ps_search_base(fsgs)); is_final = FALSE; while (!feof(rawfh)) { nread = fread(buf, sizeof(*buf), 2048, rawfh); bptr = buf; while ((nfr = acmod_process_raw(acmod, &bptr, &nread, FALSE)) > 0) { while (acmod->n_feat_frame > 0) { fsg_search_step(ps_search_base(fsgs), acmod->output_frame); acmod_advance(acmod); } } hyp = fsg_search_hyp(ps_search_base(fsgs), &score, &is_final); printf("FSG: %s (%d) frame %d %s\n", hyp, score, acmod->output_frame, is_final ? "FINAL" : ""); TEST_EQUAL (is_final, (acmod->output_frame > 135)); } fsg_search_finish(ps_search_base(fsgs)); hyp = fsg_search_hyp(ps_search_base(fsgs), &score, NULL); printf("FSG: %s (%d)\n", hyp, score); TEST_ASSERT(acmod_end_utt(acmod) >= 0); fclose(rawfh); } TEST_EQUAL(0, strcmp("go forward ten meters", fsg_search_hyp(ps_search_base(fsgs), &score, NULL))); ps->search = (ps_search_t *)fsgs; for (seg = ps_seg_iter(ps, &score); seg; seg = ps_seg_next(seg)) { char const *word; int sf, ef; word = ps_seg_word(seg); ps_seg_frames(seg, &sf, &ef); printf("%s %d %d\n", word, sf, ef); } c = clock() - c; printf("5 * fsg search in %.2f sec\n", (double)c / CLOCKS_PER_SEC); dag = ps_get_lattice(ps); ps_lattice_write(dag, "test_jsgf.lat"); jsgf_grammar_free(jsgf); fsg_search_free(ps_search_base(fsgs)); ps_free(ps); cmd_ln_free_r(config); TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-dict", DATADIR "/turtle.dic", "-jsgf", DATADIR "/goforward.gram", "-input_endian", "little", "-samprate", "16000", NULL)); TEST_ASSERT(ps = ps_init(config)); TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb")); ps_decode_raw(ps, rawfh, -1); hyp = ps_get_hyp(ps, &score); prob = ps_get_prob(ps); printf("%s (%d, %d)\n", hyp, score, prob); TEST_EQUAL(0, strcmp("go forward ten meters", hyp)); ps_free(ps); fclose(rawfh); cmd_ln_free_r(config); TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-dict", DATADIR "/turtle.dic", "-jsgf", DATADIR "/goforward.gram", "-toprule", "goforward.move2", "-input_endian", "little", "-samprate", "16000", NULL)); TEST_ASSERT(ps = ps_init(config)); TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb")); ps_decode_raw(ps, rawfh, -1); hyp = ps_get_hyp(ps, &score); prob = ps_get_prob(ps); printf("%s (%d, %d)\n", hyp, score, prob); TEST_EQUAL(0, strcmp("go forward ten meters", hyp)); ps_free(ps); cmd_ln_free_r(config); fclose(rawfh); TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-dict", DATADIR "/turtle.dic", "-jsgf", DATADIR "/defective.gram", NULL)); TEST_ASSERT(NULL == ps_init(config)); cmd_ln_free_r(config); return 0; } pocketsphinx-5prealpha/test/unit/test_ps_fwdtree_bestpath.c0000664000175000017500000000131212546074702021600 00000000000000#include #include #include #include "pocketsphinx_internal.h" #include "test_macros.h" #include "ps_test.c" int main(int argc, char *argv[]) { cmd_ln_t *config; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-lm", MODELDIR "/en-us/en-us.lm.bin", "-dict", MODELDIR "/en-us/cmudict-en-us.dict", "-fwdtree", "yes", "-fwdflat", "no", "-bestpath", "yes", "-input_endian", "little", "-samprate", "16000", NULL)); return ps_decoder_test(config, "BESTPATH", "go forward ten meters"); } pocketsphinx-5prealpha/test/unit/test_acmod_grow.c0000664000175000017500000001042112546074702017666 00000000000000#include #include #include #include #include "acmod.h" #include "test_macros.h" static const mfcc_t prior[13] = { FLOAT2MFCC(37.03), FLOAT2MFCC(-1.01), FLOAT2MFCC(0.53), FLOAT2MFCC(0.49), FLOAT2MFCC(-0.60), FLOAT2MFCC(0.14), FLOAT2MFCC(-0.05), FLOAT2MFCC(0.25), FLOAT2MFCC(0.37), FLOAT2MFCC(0.58), FLOAT2MFCC(0.13), FLOAT2MFCC(-0.16), FLOAT2MFCC(0.17) }; int main(int argc, char *argv[]) { acmod_t *acmod; logmath_t *lmath; cmd_ln_t *config; FILE *rawfh; int16 *buf; int16 const *bptr; size_t nread, nsamps; int nfr; int frame_counter; int bestsen1[270]; lmath = logmath_init(1.0001, 0, 0); config = cmd_ln_init(NULL, ps_args(), TRUE, "-mdef", MODELDIR "/en-us/en-us/mdef", "-mean", MODELDIR "/en-us/en-us/means", "-var", MODELDIR "/en-us/en-us/variances", "-tmat", MODELDIR "/en-us/en-us/transition_matrices", "-sendump", MODELDIR "/en-us/en-us/sendump", "-compallsen", "true", "-cmn", "prior", "-tmatfloor", "0.0001", "-mixwfloor", "0.001", "-varfloor", "0.0001", "-mmap", "no", "-topn", "4", "-ds", "1", "-input_endian", "little", "-samprate", "16000", NULL); TEST_ASSERT(config); cmd_ln_parse_file_r(config, ps_args(), MODELDIR "/en-us/en-us/feat.params", FALSE); TEST_ASSERT(acmod = acmod_init(config, lmath, NULL, NULL)); cmn_prior_set(acmod->fcb->cmn_struct, prior); nsamps = 2048; frame_counter = 0; buf = ckd_calloc(nsamps, sizeof(*buf)); TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb")); TEST_EQUAL(FALSE, acmod_set_grow(acmod, TRUE)); TEST_EQUAL(0, acmod_start_utt(acmod)); printf("Incremental(2048):\n"); while (!feof(rawfh)) { nread = fread(buf, sizeof(*buf), nsamps, rawfh); bptr = buf; while ((nfr = acmod_process_raw(acmod, &bptr, &nread, FALSE)) > 0 || nread > 0) { int16 best_score; int frame_idx = -1, best_senid; while (acmod->n_feat_frame > 0) { acmod_score(acmod, &frame_idx); acmod_advance(acmod); best_score = acmod_best_score(acmod, &best_senid); printf("Frame %d best senone %d score %d\n", frame_idx, best_senid, best_score); TEST_EQUAL(frame_counter, frame_idx); if (frame_counter < 190) bestsen1[frame_counter] = best_senid; ++frame_counter; frame_idx = -1; } } } TEST_EQUAL(0, acmod_end_utt(acmod)); nread = 0; acmod_process_raw(acmod, NULL, &nread, FALSE); { int16 best_score; int frame_idx = -1, best_senid; while (acmod->n_feat_frame > 0) { acmod_score(acmod, &frame_idx); acmod_advance(acmod); best_score = acmod_best_score(acmod, &best_senid); printf("Frame %d best senone %d score %d\n", frame_idx, best_senid, best_score); if (frame_counter < 190) bestsen1[frame_counter] = best_senid; TEST_EQUAL(frame_counter, frame_idx); ++frame_counter; frame_idx = -1; } } printf("Rewound (MFCC):\n"); TEST_EQUAL(0, acmod_rewind(acmod)); { int16 best_score; int frame_idx = -1, best_senid; frame_counter = 0; while (acmod->n_feat_frame > 0) { acmod_score(acmod, &frame_idx); acmod_advance(acmod); best_score = acmod_best_score(acmod, &best_senid); printf("Frame %d best senone %d score %d\n", frame_idx, best_senid, best_score); if (frame_counter < 190) TEST_EQUAL(best_senid, bestsen1[frame_counter]); TEST_EQUAL(frame_counter, frame_idx); ++frame_counter; frame_idx = -1; } } /* Clean up, go home. */ fclose(rawfh); ckd_free(buf); acmod_free(acmod); logmath_free(lmath); cmd_ln_free_r(config); return 0; } pocketsphinx-5prealpha/test/unit/test_ps_simple.c0000664000175000017500000000142112546074702017540 00000000000000#include #include #include #include "pocketsphinx_internal.h" #include "test_macros.h" #include "ps_test.c" int main(int argc, char *argv[]) { cmd_ln_t *config; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-lm", MODELDIR "/en-us/en-us.lm.bin", "-dict", MODELDIR "/en-us/cmudict-en-us.dict", "-fwdtree", "yes", "-fwdflat", "yes", "-bestpath", "yes", "-mfclogdir", ".", "-rawlogdir", ".", "-input_endian", "little", "-samprate", "16000", NULL)); return ps_decoder_test(config, "BESTPATH", "go forward ten meters"); } pocketsphinx-5prealpha/test/unit/test_ps_set_search.c0000664000175000017500000000762412546074702020402 00000000000000#include #include #include #include "test_macros.h" static cmd_ln_t * default_config() { return cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-dict", MODELDIR "/en-us/cmudict-en-us.dict", NULL); } static void test_no_search() { cmd_ln_t *config = default_config(); ps_decoder_t *ps = ps_init(config); TEST_ASSERT(ps_start_utt(ps) < 0); ps_free(ps); cmd_ln_free_r(config); } static void test_default_fsg() { cmd_ln_t *config = default_config(); cmd_ln_set_str_r(config, "-hmm", DATADIR "/tidigits/hmm"); cmd_ln_set_str_r(config, "-dict", DATADIR "/tidigits/lm/tidigits.dic"); cmd_ln_set_str_r(config, "-fsg", DATADIR "/tidigits/lm/tidigits.fsg"); ps_decoder_t *ps = ps_init(config); TEST_ASSERT(!ps_get_lm(ps, PS_DEFAULT_SEARCH)); TEST_ASSERT(ps_get_fsg(ps, PS_DEFAULT_SEARCH)); ps_free(ps); cmd_ln_free_r(config); } static void test_default_jsgf() { cmd_ln_t *config = default_config(); cmd_ln_set_str_r(config, "-jsgf", DATADIR "/goforward.gram"); ps_decoder_t *ps = ps_init(config); TEST_ASSERT(!ps_get_lm(ps, PS_DEFAULT_SEARCH)); TEST_ASSERT(ps_get_fsg(ps, PS_DEFAULT_SEARCH)); ps_free(ps); cmd_ln_free_r(config); } static void test_default_lm() { cmd_ln_t *config = default_config(); cmd_ln_set_str_r(config, "-lm", MODELDIR "/en-us/en-us.lm.bin"); ps_decoder_t *ps = ps_init(config); TEST_ASSERT(!ps_get_fsg(ps, PS_DEFAULT_SEARCH)); TEST_ASSERT(ps_get_lm(ps, PS_DEFAULT_SEARCH)); ps_free(ps); cmd_ln_free_r(config); } static void test_default_lmctl() { cmd_ln_t *config = default_config(); cmd_ln_set_str_r(config, "-lmctl", DATADIR "/test.lmctl"); cmd_ln_set_str_r(config, "-lmname", "tidigits"); ps_decoder_t *ps = ps_init(config); TEST_ASSERT(ps_get_lm(ps, "tidigits")); TEST_ASSERT(ps_get_lm(ps, "turtle")); TEST_ASSERT(!ps_set_search(ps, "turtle")); TEST_ASSERT(!ps_set_search(ps, "tidigits")); ps_free(ps); cmd_ln_free_r(config); } static void test_set_search() { cmd_ln_t *config = default_config(); ps_decoder_t *ps = ps_init(config); ps_search_iter_t *itor; jsgf_t *jsgf = jsgf_parse_file(DATADIR "/goforward.gram", NULL); fsg_model_t *fsg = jsgf_build_fsg(jsgf, jsgf_get_rule(jsgf, "goforward.move"), ps->lmath, cmd_ln_int32_r(config, "-lw")); TEST_ASSERT(!ps_set_fsg(ps, "goforward", fsg)); fsg_model_free(fsg); jsgf_grammar_free(jsgf); TEST_ASSERT(!ps_set_jsgf_file(ps, "goforward_other", DATADIR "/goforward.gram")); // Second time TEST_ASSERT(!ps_set_jsgf_file(ps, "goforward_other", DATADIR "/goforward.gram")); ngram_model_t *lm = ngram_model_read(config, DATADIR "/tidigits/lm/tidigits.lm.bin", NGRAM_AUTO, ps->lmath); TEST_ASSERT(!ps_set_lm(ps, "tidigits", lm)); ngram_model_free(lm); TEST_ASSERT(!ps_set_search(ps, "tidigits")); TEST_ASSERT(!ps_set_search(ps, "goforward")); itor = ps_search_iter(ps); TEST_EQUAL(0, strcmp("goforward_other", ps_search_iter_val(itor))); itor = ps_search_iter_next(itor); TEST_EQUAL(0, strcmp("tidigits", ps_search_iter_val(itor))); itor = ps_search_iter_next(itor); TEST_EQUAL(0, strcmp("goforward", ps_search_iter_val(itor))); itor = ps_search_iter_next(itor); TEST_EQUAL(0, strcmp("_default_pl", ps_search_iter_val(itor))); itor = ps_search_iter_next(itor); TEST_EQUAL(NULL, itor); TEST_ASSERT(!ps_start_utt(ps)); TEST_ASSERT(!ps_end_utt(ps)); ps_free(ps); cmd_ln_free_r(config); } int main(int argc, char* argv[]) { test_no_search(); test_default_fsg(); test_default_jsgf(); test_default_lm(); test_default_lmctl(); test_set_search(); return 0; } pocketsphinx-5prealpha/test/unit/test_mllr.c0000664000175000017500000000141712546074702016520 00000000000000#include #include #include #include "pocketsphinx_internal.h" #include "test_macros.h" #include "ps_test.c" int main(int argc, char *argv[]) { cmd_ln_t *config; ps_decoder_t *ps; FILE *rawfh; char const *hyp; int32 score; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", DATADIR "/an4_ci_cont", "-lm", DATADIR "/turtle.lm.bin", "-dict", DATADIR "/turtle.dic", "-mllr", DATADIR "/mllr_matrices", "-samprate", "16000", NULL)); TEST_ASSERT(ps = ps_init(config)); TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb")); ps_decode_raw(ps, rawfh, -1); fclose(rawfh); hyp = ps_get_hyp(ps, &score); printf("FWDFLAT: %s (%d)\n", hyp, score); ps_free(ps); cmd_ln_free_r(config); return 0; } pocketsphinx-5prealpha/test/unit/test_acmod.c0000664000175000017500000002077112546074702016641 00000000000000#include #include #include #include #include "acmod.h" #include "test_macros.h" static const mfcc_t prior[13] = { FLOAT2MFCC(37.03), FLOAT2MFCC(-1.01), FLOAT2MFCC(0.53), FLOAT2MFCC(0.49), FLOAT2MFCC(-0.60), FLOAT2MFCC(0.14), FLOAT2MFCC(-0.05), FLOAT2MFCC(0.25), FLOAT2MFCC(0.37), FLOAT2MFCC(0.58), FLOAT2MFCC(0.13), FLOAT2MFCC(-0.16), FLOAT2MFCC(0.17) }; int main(int argc, char *argv[]) { acmod_t *acmod; logmath_t *lmath; cmd_ln_t *config; FILE *rawfh; int16 *buf; int16 const *bptr; mfcc_t **cepbuf, **cptr; size_t nread, nsamps; int nfr; int frame_counter; int bestsen1[270]; lmath = logmath_init(1.0001, 0, 0); config = cmd_ln_init(NULL, ps_args(), TRUE, "-mdef", MODELDIR "/en-us/en-us/mdef", "-mean", MODELDIR "/en-us/en-us/means", "-var", MODELDIR "/en-us/en-us/variances", "-tmat", MODELDIR "/en-us/en-us/transition_matrices", "-sendump", MODELDIR "/en-us/en-us/sendump", "-compallsen", "true", "-cmn", "prior", "-tmatfloor", "0.0001", "-mixwfloor", "0.001", "-varfloor", "0.0001", "-mmap", "no", "-topn", "4", "-ds", "1", "-input_endian", "little", "-samprate", "16000", NULL); TEST_ASSERT(config); cmd_ln_parse_file_r(config, ps_args(), MODELDIR "/en-us/en-us/feat.params", FALSE); TEST_ASSERT(acmod = acmod_init(config, lmath, NULL, NULL)); cmn_prior_set(acmod->fcb->cmn_struct, prior); nsamps = 2048; frame_counter = 0; buf = ckd_calloc(nsamps, sizeof(*buf)); TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb")); TEST_EQUAL(0, acmod_start_utt(acmod)); E_INFO("Incremental(2048):\n"); while (!feof(rawfh)) { nread = fread(buf, sizeof(*buf), nsamps, rawfh); bptr = buf; while ((nfr = acmod_process_raw(acmod, &bptr, &nread, FALSE)) > 0 || nread > 0) { int16 best_score; int frame_idx = -1, best_senid; while (acmod->n_feat_frame > 0) { acmod_score(acmod, &frame_idx); acmod_advance(acmod); best_score = acmod_best_score(acmod, &best_senid); E_INFO("Frame %d best senone %d score %d\n", frame_idx, best_senid, best_score); TEST_EQUAL(frame_counter, frame_idx); if (frame_counter < 190) bestsen1[frame_counter] = best_score; ++frame_counter; frame_idx = -1; } } } TEST_EQUAL(0, acmod_end_utt(acmod)); nread = 0; { int16 best_score; int frame_idx = -1, best_senid; while (acmod->n_feat_frame > 0) { acmod_score(acmod, &frame_idx); acmod_advance(acmod); best_score = acmod_best_score(acmod, &best_senid); E_INFO("Frame %d best senone %d score %d\n", frame_idx, best_senid, best_score); if (frame_counter < 190) bestsen1[frame_counter] = best_score; TEST_EQUAL(frame_counter, frame_idx); ++frame_counter; frame_idx = -1; } } /* Now try to process the whole thing at once. */ E_INFO("Whole utterance:\n"); cmn_prior_set(acmod->fcb->cmn_struct, prior); nsamps = ftell(rawfh) / sizeof(*buf); clearerr(rawfh); fseek(rawfh, 0, SEEK_SET); buf = ckd_realloc(buf, nsamps * sizeof(*buf)); TEST_EQUAL(nsamps, fread(buf, sizeof(*buf), nsamps, rawfh)); bptr = buf; TEST_EQUAL(0, acmod_start_utt(acmod)); acmod_process_raw(acmod, &bptr, &nsamps, TRUE); TEST_EQUAL(0, acmod_end_utt(acmod)); { int16 best_score; int frame_idx = -1, best_senid; frame_counter = 0; while (acmod->n_feat_frame > 0) { acmod_score(acmod, &frame_idx); acmod_advance(acmod); best_score = acmod_best_score(acmod, &best_senid); E_INFO("Frame %d best senone %d score %d\n", frame_idx, best_senid, best_score); if (frame_counter < 190) TEST_EQUAL_LOG(best_score, bestsen1[frame_counter]); TEST_EQUAL(frame_counter, frame_idx); ++frame_counter; frame_idx = -1; } } /* Now process MFCCs and make sure we get the same results. */ cepbuf = ckd_calloc_2d(frame_counter, fe_get_output_size(acmod->fe), sizeof(**cepbuf)); fe_start_utt(acmod->fe); nsamps = ftell(rawfh) / sizeof(*buf); bptr = buf; nfr = frame_counter; fe_process_frames(acmod->fe, &bptr, &nsamps, cepbuf, &nfr, NULL); fe_end_utt(acmod->fe, cepbuf[frame_counter-1], &nfr); E_INFO("Incremental(MFCC):\n"); cmn_prior_set(acmod->fcb->cmn_struct, prior); TEST_EQUAL(0, acmod_start_utt(acmod)); cptr = cepbuf; nfr = frame_counter; frame_counter = 0; while ((acmod_process_cep(acmod, &cptr, &nfr, FALSE)) > 0) { int16 best_score; int frame_idx = -1, best_senid; while (acmod->n_feat_frame > 0) { acmod_score(acmod, &frame_idx); acmod_advance(acmod); best_score = acmod_best_score(acmod, &best_senid); E_INFO("Frame %d best senone %d score %d\n", frame_idx, best_senid, best_score); TEST_EQUAL(frame_counter, frame_idx); if (frame_counter < 190) TEST_EQUAL_LOG(best_score, bestsen1[frame_counter]); ++frame_counter; frame_idx = -1; } } TEST_EQUAL(0, acmod_end_utt(acmod)); nfr = 0; acmod_process_cep(acmod, &cptr, &nfr, FALSE); { int16 best_score; int frame_idx = -1, best_senid; while (acmod->n_feat_frame > 0) { acmod_score(acmod, &frame_idx); acmod_advance(acmod); best_score = acmod_best_score(acmod, &best_senid); E_INFO("Frame %d best senone %d score %d\n", frame_idx, best_senid, best_score); TEST_EQUAL(frame_counter, frame_idx); if (frame_counter < 190) TEST_EQUAL_LOG(best_score, bestsen1[frame_counter]); ++frame_counter; frame_idx = -1; } } /* Note that we have to process the whole thing again because * !#@$@ s2mfc2feat modifies its argument (not for long) */ fe_start_utt(acmod->fe); nsamps = ftell(rawfh) / sizeof(*buf); bptr = buf; nfr = frame_counter; fe_process_frames(acmod->fe, &bptr, &nsamps, cepbuf, &nfr, NULL); fe_end_utt(acmod->fe, cepbuf[frame_counter-1], &nfr); E_INFO("Whole utterance (MFCC):\n"); cmn_prior_set(acmod->fcb->cmn_struct, prior); TEST_EQUAL(0, acmod_start_utt(acmod)); cptr = cepbuf; nfr = frame_counter; acmod_process_cep(acmod, &cptr, &nfr, TRUE); TEST_EQUAL(0, acmod_end_utt(acmod)); { int16 best_score; int frame_idx = -1, best_senid; frame_counter = 0; while (acmod->n_feat_frame > 0) { acmod_score(acmod, &frame_idx); acmod_advance(acmod); best_score = acmod_best_score(acmod, &best_senid); E_INFO("Frame %d best senone %d score %d\n", frame_idx, best_senid, best_score); if (frame_counter < 190) TEST_EQUAL_LOG(best_score, bestsen1[frame_counter]); TEST_EQUAL(frame_counter, frame_idx); ++frame_counter; frame_idx = -1; } } E_INFO("Rewound (MFCC):\n"); TEST_EQUAL(0, acmod_rewind(acmod)); { int16 best_score; int frame_idx = -1, best_senid; frame_counter = 0; while (acmod->n_feat_frame > 0) { acmod_score(acmod, &frame_idx); acmod_advance(acmod); best_score = acmod_best_score(acmod, &best_senid); E_INFO("Frame %d best senone %d score %d\n", frame_idx, best_senid, best_score); if (frame_counter < 190) TEST_EQUAL_LOG(best_score, bestsen1[frame_counter]); TEST_EQUAL(frame_counter, frame_idx); ++frame_counter; frame_idx = -1; } } /* Clean up, go home. */ ckd_free_2d(cepbuf); fclose(rawfh); ckd_free(buf); acmod_free(acmod); logmath_free(lmath); cmd_ln_free_r(config); return 0; } pocketsphinx-5prealpha/test/unit/test_senfh.c0000664000175000017500000000565012546074702016660 00000000000000#include #include #include #include #include "pocketsphinx_internal.h" #include "ngram_search_fwdflat.h" #include "test_macros.h" int main(int argc, char *argv[]) { ps_decoder_t *ps; cmd_ln_t *config; acmod_t *acmod; ngram_search_t *ngs; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-lm", MODELDIR "/en-us/en-us.lm.bin", "-dict", MODELDIR "/en-us/cmudict-en-us.dict", "-fwdtree", "no", "-fwdflat", "yes", "-bestpath", "no", "-input_endian", "little", "-samprate", "16000", NULL)); TEST_ASSERT(ps = ps_init(config)); ngs = (ngram_search_t *)ps->search; acmod = ps->acmod; setbuf(stdout, NULL); { FILE *rawfh, *senfh; int16 buf[2048]; size_t nread; int16 const *bptr; int nfr; TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb")); TEST_EQUAL(0, acmod_start_utt(acmod)); TEST_ASSERT(senfh = fopen("goforward.sen", "wb")); TEST_EQUAL(0, acmod_set_senfh(acmod, senfh)); ngram_fwdflat_start(ngs); while (!feof(rawfh)) { nread = fread(buf, sizeof(*buf), 2048, rawfh); bptr = buf; while ((nfr = acmod_process_raw(acmod, &bptr, &nread, FALSE)) > 0) { while (acmod->n_feat_frame > 0) { ngram_fwdflat_search(ngs, acmod->output_frame); acmod_advance(acmod); } } } ngram_fwdflat_finish(ngs); printf("%s\n", ngram_search_bp_hyp(ngs, ngram_search_find_exit(ngs, -1, NULL, NULL))); TEST_ASSERT(acmod_end_utt(acmod) >= 0); fclose(rawfh); TEST_EQUAL(0, strcmp("go forward ten meters", ngram_search_bp_hyp(ngs, ngram_search_find_exit(ngs, -1, NULL, NULL)))); TEST_EQUAL(0, acmod_set_senfh(acmod, NULL)); TEST_EQUAL(0, acmod_start_utt(acmod)); TEST_ASSERT(senfh = fopen("goforward.sen", "rb")); TEST_EQUAL(0, acmod_set_insenfh(acmod, senfh)); ngram_fwdflat_start(ngs); while ((nfr = acmod_read_scores(acmod)) > 0) { while (acmod->n_feat_frame > 0) { ngram_fwdflat_search(ngs, acmod->output_frame); acmod_advance(acmod); } } ngram_fwdflat_finish(ngs); printf("%s\n", ngram_search_bp_hyp(ngs, ngram_search_find_exit(ngs, -1, NULL, NULL))); TEST_ASSERT(acmod_end_utt(acmod) >= 0); TEST_EQUAL(0, strcmp("go forward ten meters", ngram_search_bp_hyp(ngs, ngram_search_find_exit(ngs, -1, NULL, NULL)))); fclose(senfh); } ps_free(ps); cmd_ln_free_r(config); return 0; } pocketsphinx-5prealpha/test/unit/test_fwdtree_nbest.c0000664000175000017500000000701712546074702020407 00000000000000#include #include #include #include #include "pocketsphinx_internal.h" #include "ngram_search_fwdtree.h" #include "ps_lattice_internal.h" #include "test_macros.h" int main(int argc, char *argv[]) { ps_decoder_t *ps; cmd_ln_t *config; acmod_t *acmod; ngram_search_t *ngs; ps_lattice_t *dag; clock_t c; int i; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-lm", MODELDIR "/en-us/en-us.lm.bin", "-dict", MODELDIR "/en-us/cmudict-en-us.dict", "-fwdtree", "yes", "-fwdflat", "no", "-bestpath", "yes", "-input_endian", "little", "-samprate", "16000", NULL)); TEST_ASSERT(ps = ps_init(config)); ngs = (ngram_search_t *)ps->search; acmod = ps->acmod; acmod_set_grow(ps->acmod, TRUE); setbuf(stdout, NULL); c = clock(); for (i = 0; i < 5; ++i) { FILE *rawfh; int16 buf[2048]; size_t nread; int16 const *bptr; int nfr; ps_astar_t *nbest; ps_latpath_t *path; char *besthyp; const char *astar_besthyp = NULL; int32 astar_hyp_score; int i; /* PocketSphinx API would do this for us but we have to do it manually here. */ ps_lattice_free(ps->search->dag); ps->search->dag = NULL; TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb")); TEST_EQUAL(0, acmod_start_utt(acmod)); ngram_fwdtree_start(ngs); while (!feof(rawfh)) { nread = fread(buf, sizeof(*buf), 2048, rawfh); bptr = buf; while ((nfr = acmod_process_raw(acmod, &bptr, &nread, FALSE)) > 0) { while (acmod->n_feat_frame > 0) { ngram_fwdtree_search(ngs, acmod->output_frame); acmod_advance(acmod); } } } ngram_fwdtree_finish(ngs); printf("FWDTREE: %s\n", ngram_search_bp_hyp(ngs, ngram_search_find_exit(ngs, -1, NULL, NULL))); TEST_ASSERT(acmod_end_utt(acmod) >= 0); fclose(rawfh); dag = ngram_search_lattice(ps->search); if (dag == NULL) { E_ERROR("Failed to build DAG!\n"); return 1; } besthyp = ckd_salloc (ps_lattice_hyp(dag, ps_lattice_bestpath (dag, ngs->lmset, 6.5, 1.0))); printf("BESTPATH: %s\n", besthyp); TEST_ASSERT(nbest = ps_astar_start(dag, ngs->lmset, 6.5, 0, -1, -1, -1)); i = 0; astar_hyp_score = WORST_SCORE; while ((path = ps_astar_next(nbest))) { if (i < 10) printf("NBEST %d: %s\n", i, ps_astar_hyp(nbest, path)); if (path->score > astar_hyp_score) { astar_hyp_score = path->score; astar_besthyp = ps_astar_hyp(nbest, path); } i++; } TEST_EQUAL(0, strcmp(besthyp, astar_besthyp)); ps_astar_finish(nbest); ckd_free(besthyp); } printf("%s\n", ngram_search_bp_hyp(ngs, ngram_search_find_exit(ngs, -1, NULL, NULL))); TEST_EQUAL(0, strcmp("go forward ten meters", ngram_search_bp_hyp(ngs, ngram_search_find_exit(ngs, -1, NULL, NULL)))); c = clock() - c; printf("5 * fwdtree + bestpath + N-best search in %.2f sec\n", (double)c / CLOCKS_PER_SEC); ps_free(ps); cmd_ln_free_r(config); return 0; } pocketsphinx-5prealpha/test/unit/test_pl_fwdtree.c0000664000175000017500000000457312546074702017713 00000000000000#include #include #include #include #include "pocketsphinx_internal.h" #include "test_macros.h" int main(int argc, char *argv[]) { ps_decoder_t *ps; cmd_ln_t *config; acmod_t *acmod; ps_search_t *ngs, *pls; clock_t c; int32 score; int i; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-lm", MODELDIR "/en-us/en-us.lm.bin", "-dict", MODELDIR "/en-us/cmudict-en-us.dict", "-fwdtree", "yes", "-fwdflat", "no", "-bestpath", "no", "-pl_window", "6", "-input_endian", "little", "-samprate", "16000", NULL)); TEST_ASSERT(ps = ps_init(config)); ngs = ps->search; pls = ps->phone_loop; acmod = ps->acmod; setbuf(stdout, NULL); c = clock(); for (i = 0; i < 5; ++i) { FILE *rawfh; int16 buf[2048]; size_t nread; int16 const *bptr; int nfr, n_searchfr; TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb")); TEST_EQUAL(0, acmod_start_utt(acmod)); ps_search_start(ngs); ps_search_start(pls); n_searchfr = 0; while (!feof(rawfh)) { nread = fread(buf, sizeof(*buf), 2048, rawfh); bptr = buf; while ((nfr = acmod_process_raw(acmod, &bptr, &nread, FALSE)) > 0) { while (acmod->n_feat_frame > 0) { ps_search_step(pls, n_searchfr); if (n_searchfr >= 6) ps_search_step(ngs, n_searchfr - 6); acmod_advance(acmod); ++n_searchfr; } } } for (nfr = n_searchfr - 6; nfr < n_searchfr; ++nfr) { ps_search_step(ngs, nfr); } ps_search_finish(pls); ps_search_finish(ngs); printf("%s\n", ps_search_hyp(ngs, &score, NULL)); TEST_ASSERT(acmod_end_utt(acmod) >= 0); fclose(rawfh); } printf("%s\n", ps_search_hyp(ngs, &score, NULL)); TEST_EQUAL(0, strcmp("go forward ten meters", ps_search_hyp(ngs, &score, NULL))); c = clock() - c; printf("5 * fwdtree search in %.2f sec\n", (double)c / CLOCKS_PER_SEC); ps_free(ps); cmd_ln_free_r(config); return 0; } pocketsphinx-5prealpha/test/unit/test_ps_fwdtree_fwdflat.c0000664000175000017500000000120512546074702021416 00000000000000#include #include #include #include "pocketsphinx_internal.h" #include "test_macros.h" #include "ps_test.c" int main(int argc, char *argv[]) { cmd_ln_t *config; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-lm", MODELDIR "/en-us/en-us.lm.bin", "-dict", MODELDIR "/en-us/cmudict-en-us.dict", "-lw", "6.5", "-fwdflatlw", "6.5", "-fwdtree", "yes", "-fwdflat", "yes", "-bestpath", "no", "-input_endian", "little", "-samprate", "16000", NULL)); return ps_decoder_test(config, "FWDFLAT", "go forward ten meters"); } pocketsphinx-5prealpha/test/unit/test_posterior.c0000664000175000017500000001064512546074702017603 00000000000000#include #include #include #include #include "pocketsphinx_internal.h" #include "ngram_search_fwdtree.h" #include "ps_lattice_internal.h" #include "test_macros.h" int test_decode(ps_decoder_t *ps) { FILE *rawfh; int16 buf[2048]; size_t nread; int16 const *bptr; int nfr; ps_lattice_t *dag; acmod_t *acmod; ngram_search_t *ngs; int i, j; ps_latlink_t *link; ps_latnode_t *node; latlink_list_t *x; int32 norm, post; ngs = (ngram_search_t *)ps->search; acmod = ps->acmod; /* Decode stuff and build a DAG. */ TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb")); TEST_EQUAL(0, acmod_start_utt(acmod)); ngram_fwdtree_start(ngs); while (!feof(rawfh)) { nread = fread(buf, sizeof(*buf), 2048, rawfh); bptr = buf; while ((nfr = acmod_process_raw(acmod, &bptr, &nread, FALSE)) > 0) { while (acmod->n_feat_frame > 0) { ngram_fwdtree_search(ngs, acmod->output_frame); acmod_advance(acmod); } } } ngram_fwdtree_finish(ngs); printf("FWDTREE: %s\n", ngram_search_bp_hyp(ngs, ngram_search_find_exit(ngs, -1, NULL, NULL))); TEST_ASSERT(acmod_end_utt(acmod) >= 0); fclose(rawfh); dag = ngram_search_lattice(ps->search); if (dag == NULL) { E_ERROR("Failed to build DAG!\n"); return -1; } /* Write lattice to disk. */ TEST_EQUAL(0, ps_lattice_write(dag, "test_posterior.lat")); /* Do a bunch of checks on the DAG generation and traversal code: */ /* Verify that forward and backward iteration give the same number of edges. */ i = j = 0; for (link = ps_lattice_traverse_edges(dag, NULL, NULL); link; link = ps_lattice_traverse_next(dag, NULL)) { ++i; } for (link = ps_lattice_reverse_edges(dag, NULL, NULL); link; link = ps_lattice_reverse_next(dag, NULL)) { ++j; } printf("%d forward edges, %d reverse edges\n", i, j); TEST_EQUAL(i,j); /* Verify that the same links are reachable via entries and exits. */ for (node = dag->nodes; node; node = node->next) { for (x = node->exits; x; x = x->next) x->link->alpha = -42; } for (node = dag->nodes; node; node = node->next) { for (x = node->entries; x; x = x->next) TEST_EQUAL(x->link->alpha, -42); } /* Verify that forward iteration is properly ordered. */ for (link = ps_lattice_traverse_edges(dag, NULL, NULL); link; link = ps_lattice_traverse_next(dag, NULL)) { link->alpha = 0; for (x = link->from->entries; x; x = x->next) { TEST_EQUAL(x->link->alpha, 0); } } /* Verify that backward iteration is properly ordered. */ for (node = dag->nodes; node; node = node->next) { for (x = node->exits; x; x = x->next) x->link->alpha = -42; } for (link = ps_lattice_reverse_edges(dag, NULL, NULL); link; link = ps_lattice_reverse_next(dag, NULL)) { link->alpha = 0; for (x = link->to->exits; x; x = x->next) { TEST_EQUAL(x->link->alpha, 0); } } /* Find and print best path. */ link = ps_lattice_bestpath(dag, ngs->lmset, 1.0, 1.0/20.0); printf("BESTPATH: %s\n", ps_lattice_hyp(dag, link)); /* Calculate betas. */ post = ps_lattice_posterior(dag, ngs->lmset, 1.0/20.0); printf("Best path score: %d\n", link->path_scr + dag->final_node_ascr); printf("P(S|O) = %d\n", post); /* Verify that sum of final alphas and initial alphas+betas is * sufficiently similar. */ norm = logmath_get_zero(acmod->lmath); for (x = dag->start->exits; x; x = x->next) norm = logmath_add(acmod->lmath, norm, x->link->beta + x->link->alpha); E_INFO("Sum of final alphas+betas = %d\n", dag->norm); E_INFO("Sum of initial alphas+betas = %d\n", norm); TEST_EQUAL_LOG(dag->norm, norm); /* Print posterior probabilities for each link in best path. */ while (link) { printf("P(%s,%d) = %d = %f\n", dict_wordstr(ps->search->dict, link->from->wid), link->ef, link->alpha + link->beta - dag->norm, logmath_exp(acmod->lmath, link->alpha + link->beta - dag->norm)); link = link->best_prev; } return 0; } int main(int argc, char *argv[]) { ps_decoder_t *ps; cmd_ln_t *config; int rv; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-lm", MODELDIR "/en-us/en-us.lm.bin", "-dict", MODELDIR "/en-us/cmudict-en-us.dict", "-fwdtree", "yes", "-fwdflat", "no", "-bestpath", "yes", "-input_endian", "little", "-cmninit", "37", "-samprate", "16000", NULL)); TEST_ASSERT(ps = ps_init(config)); rv = test_decode(ps); ps_free(ps); cmd_ln_free_r(config); return rv; } pocketsphinx-5prealpha/test/unit/test_ps_fwdflat.c0000664000175000017500000000116212546074702017700 00000000000000#include #include #include #include "pocketsphinx_internal.h" #include "test_macros.h" #include "ps_test.c" int main(int argc, char *argv[]) { cmd_ln_t *config; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-lm", MODELDIR "/en-us/en-us.lm.bin", "-dict", MODELDIR "/en-us/cmudict-en-us.dict", "-fwdflatlw", "6.5", "-fwdtree", "no", "-fwdflat", "yes", "-bestpath", "no", "-input_endian", "little", "-samprate", "16000", NULL)); return ps_decoder_test(config, "FWDFLAT", "go forward ten meters"); } pocketsphinx-5prealpha/test/unit/test_alignment.c0000664000175000017500000000327012504317076017525 00000000000000#include #include "ps_alignment.h" #include "pocketsphinx_internal.h" #include "test_macros.h" int main(int argc, char *argv[]) { bin_mdef_t *mdef; dict_t *dict; dict2pid_t *d2p; ps_alignment_t *al; ps_alignment_iter_t *itor; cmd_ln_t *config; config = cmd_ln_init(NULL, NULL, FALSE, "-dict", MODELDIR "/en-us/cmudict-en-us.dict", "-fdict", MODELDIR "/en-us/en-us/noisedict", NULL); mdef = bin_mdef_read(NULL, MODELDIR "/en-us/en-us/mdef"); dict = dict_init(config, mdef); d2p = dict2pid_build(mdef, dict); al = ps_alignment_init(d2p); TEST_EQUAL(1, ps_alignment_add_word(al, dict_wordid(dict, ""), 0)); TEST_EQUAL(2, ps_alignment_add_word(al, dict_wordid(dict, "hello"), 0)); TEST_EQUAL(3, ps_alignment_add_word(al, dict_wordid(dict, "world"), 0)); TEST_EQUAL(4, ps_alignment_add_word(al, dict_wordid(dict, ""), 0)); TEST_EQUAL(0, ps_alignment_populate(al)); itor = ps_alignment_words(al); TEST_EQUAL(ps_alignment_iter_get(itor)->id.wid, dict_wordid(dict, "")); itor = ps_alignment_iter_next(itor); TEST_EQUAL(ps_alignment_iter_get(itor)->id.wid, dict_wordid(dict, "hello")); itor = ps_alignment_iter_next(itor); TEST_EQUAL(ps_alignment_iter_get(itor)->id.wid, dict_wordid(dict, "world")); itor = ps_alignment_iter_next(itor); TEST_EQUAL(ps_alignment_iter_get(itor)->id.wid, dict_wordid(dict, "")); itor = ps_alignment_iter_next(itor); TEST_EQUAL(itor, NULL); printf("%d words %d phones %d states\n", ps_alignment_n_words(al), ps_alignment_n_phones(al), ps_alignment_n_states(al)); ps_alignment_free(al); dict_free(dict); dict2pid_free(d2p); bin_mdef_free(mdef); cmd_ln_free_r(config); return 0; } pocketsphinx-5prealpha/test/unit/test_fwdflat.c0000664000175000017500000000405612546074702017203 00000000000000#include #include #include #include #include "pocketsphinx_internal.h" #include "ngram_search_fwdflat.h" #include "test_macros.h" int main(int argc, char *argv[]) { ps_decoder_t *ps; cmd_ln_t *config; acmod_t *acmod; ngram_search_t *ngs; clock_t c; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-lm", MODELDIR "/en-us/en-us.lm.bin", "-dict", MODELDIR "/en-us/cmudict-en-us.dict", "-fwdtree", "no", "-fwdflat", "yes", "-bestpath", "no", "-input_endian", "little", "-samprate", "16000", NULL)); TEST_ASSERT(ps = ps_init(config)); ngs = (ngram_search_t *)ps->search; acmod = ps->acmod; setbuf(stdout, NULL); c = clock(); { FILE *rawfh; int16 buf[2048]; size_t nread; int16 const *bptr; int nfr; TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb")); TEST_EQUAL(0, acmod_start_utt(acmod)); ngram_fwdflat_start(ngs); while (!feof(rawfh)) { nread = fread(buf, sizeof(*buf), 2048, rawfh); bptr = buf; while ((nfr = acmod_process_raw(acmod, &bptr, &nread, FALSE)) > 0) { while (acmod->n_feat_frame > 0) { ngram_fwdflat_search(ngs,acmod->output_frame); acmod_advance(acmod); } } } ngram_fwdflat_finish(ngs); printf("%s\n", ngram_search_bp_hyp(ngs, ngram_search_find_exit(ngs, -1, NULL, NULL))); TEST_ASSERT(acmod_end_utt(acmod) >= 0); fclose(rawfh); } TEST_EQUAL(0, strcmp("go forward ten meters", ngram_search_bp_hyp(ngs, ngram_search_find_exit(ngs, -1, NULL, NULL)))); c = clock() - c; printf("2 * fwdflat search in %.2f sec\n", (double)c / CLOCKS_PER_SEC); ps_free(ps); cmd_ln_free_r(config); return 0; } pocketsphinx-5prealpha/test/unit/test_fsg3.c0000664000175000017500000000431112504317076016406 00000000000000#include #include #include #include #include "pocketsphinx_internal.h" #include "fsg_search_internal.h" #include "ps_lattice_internal.h" #include "test_macros.h" int main(int argc, char *argv[]) { ps_decoder_t *ps; cmd_ln_t *config; acmod_t *acmod; fsg_search_t *fsgs; ps_lattice_t *dag; ps_seg_t *seg; int32 score; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", DATADIR "/tidigits/hmm", "-fsg", DATADIR "/tidigits/lm/tidigits.fsg", "-dict", DATADIR "/tidigits/lm/tidigits.dic", "-bestpath", "no", "-input_endian", "little", "-samprate", "16000", NULL)); TEST_ASSERT(ps = ps_init(config)); fsgs = (fsg_search_t *)ps->search; acmod = ps->acmod; setbuf(stdout, NULL); { FILE *rawfh; int16 buf[2048]; size_t nread; int16 const *bptr; char const *hyp; int nfr; TEST_ASSERT(rawfh = fopen(DATADIR "/numbers.raw", "rb")); TEST_EQUAL(0, acmod_start_utt(acmod)); fsg_search_start(ps_search_base(fsgs)); while (!feof(rawfh)) { nread = fread(buf, sizeof(*buf), 2048, rawfh); bptr = buf; while ((nfr = acmod_process_raw(acmod, &bptr, &nread, FALSE)) > 0) { while (acmod->n_feat_frame > 0) { fsg_search_step(ps_search_base(fsgs), acmod->output_frame); acmod_advance(acmod); } } } fsg_search_finish(ps_search_base(fsgs)); hyp = fsg_search_hyp(ps_search_base(fsgs), &score, NULL); printf("FSG: %s (%d)\n", hyp, score); TEST_ASSERT(acmod_end_utt(acmod) >= 0); fclose(rawfh); } for (seg = ps_seg_iter(ps, &score); seg; seg = ps_seg_next(seg)) { char const *word; int sf, ef; int32 post, lscr, ascr, lback; word = ps_seg_word(seg); ps_seg_frames(seg, &sf, &ef); post = ps_seg_prob(seg, &ascr, &lscr, &lback); printf("%s (%d:%d) P(w|o) = %f ascr = %d lscr = %d lback = %d\n", word, sf, ef, logmath_exp(ps_get_logmath(ps), post), ascr, lscr, lback); } /* Now get the DAG and play with it. */ dag = ps_get_lattice(ps); ps_lattice_write(dag, "test_fsg3.lat"); printf("BESTPATH: %s\n", ps_lattice_hyp(dag, ps_lattice_bestpath(dag, NULL, 1.0, 15.0))); ps_lattice_posterior(dag, NULL, 15.0); ps_free(ps); cmd_ln_free_r(config); return 0; } pocketsphinx-5prealpha/test/unit/Makefile.am0000664000175000017500000000220012504317076016370 00000000000000check_PROGRAMS = \ test_ps_init \ test_ps_reinit \ test_ps_fwdtree \ test_ps_fwdtree_fwdflat \ test_ps_fwdflat \ test_ps_fwdflat_bestpath \ test_ps_fwdtree_bestpath \ test_ps_simple \ test_ps_nbest \ test_ps_lattice \ test_ps_set_search \ test_acmod \ test_acmod_grow \ test_fwdtree \ test_fwdflat \ test_fwdtree_fwdflat \ test_fwdtree_bestpath \ test_fwdtree_nbest \ test_pl_fwdtree \ test_ptm_mgau \ test_posterior \ test_fsg \ test_fsg2 \ test_fsg3 \ test_jsgf \ test_lm_read \ test_dict \ test_dict2pid \ test_senfh \ test_alignment \ test_state_align \ test_mllr TESTS = $(check_PROGRAMS) EXTRA_DIST = ps_test.c noinst_HEADERS = test_macros.h AM_CFLAGS =-I$(top_srcdir)/include \ -I$(top_srcdir)/src/libpocketsphinx \ -I$(top_builddir)/include \ -I$(srcdir) \ -DMODELDIR=\"${top_srcdir}/model\" \ -DDATADIR=\"${top_srcdir}/test/data\" LDADD = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la \ -lsphinxbase CLEANFILES = *.log *.out *.lat *.mfc *.raw *.dic *.sen valgrind-check: for testf in .libs/lt-*; do valgrind --leak-check=full --show-reachable=yes \ $$testf; done >& valgrind.log pocketsphinx-5prealpha/test/unit/test_state_align.c0000664000175000017500000000631212520771215020036 00000000000000#include #include "ps_alignment.h" #include "state_align_search.h" #include "pocketsphinx_internal.h" #include "test_macros.h" static void do_search(ps_search_t *search, acmod_t *acmod) { FILE *rawfh; int16 buf[2048]; size_t nread; int16 const *bptr; int nfr; TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb")); TEST_EQUAL(0, acmod_start_utt(acmod)); ps_search_start(search); while (!feof(rawfh)) { nread = fread(buf, sizeof(*buf), 2048, rawfh); bptr = buf; while ((nfr = acmod_process_raw(acmod, &bptr, &nread, FALSE)) > 0) { while (acmod->n_feat_frame > 0) { ps_search_step(search, acmod->output_frame); acmod_advance(acmod); } } } ps_search_finish(search); TEST_ASSERT(acmod_end_utt(acmod) >= 0); fclose(rawfh); } int main(int argc, char *argv[]) { ps_decoder_t *ps; dict_t *dict; dict2pid_t *d2p; acmod_t *acmod; ps_alignment_t *al; ps_alignment_iter_t *itor; ps_search_t *search; cmd_ln_t *config; int i; config = cmd_ln_init(NULL, ps_args(), FALSE, "-hmm", MODELDIR "/en-us/en-us", "-dict", MODELDIR "/en-us/cmudict-en-us.dict", "-input_endian", "little", "-samprate", "16000", NULL); TEST_ASSERT(ps = ps_init(config)); dict = ps->dict; d2p = ps->d2p; acmod = ps->acmod; al = ps_alignment_init(d2p); TEST_EQUAL(1, ps_alignment_add_word(al, dict_wordid(dict, ""), 0)); TEST_EQUAL(2, ps_alignment_add_word(al, dict_wordid(dict, "go"), 0)); TEST_EQUAL(3, ps_alignment_add_word(al, dict_wordid(dict, "forward"), 0)); TEST_EQUAL(4, ps_alignment_add_word(al, dict_wordid(dict, "ten"), 0)); TEST_EQUAL(5, ps_alignment_add_word(al, dict_wordid(dict, "meters"), 0)); TEST_EQUAL(6, ps_alignment_add_word(al, dict_wordid(dict, ""), 0)); TEST_EQUAL(0, ps_alignment_populate(al)); TEST_ASSERT(search = state_align_search_init("state_align", config, acmod, al)); for (i = 0; i < 5; ++i) do_search(search, acmod); itor = ps_alignment_words(al); TEST_EQUAL(ps_alignment_iter_get(itor)->start, 0); TEST_EQUAL(ps_alignment_iter_get(itor)->duration, 8); itor = ps_alignment_iter_next(itor); TEST_EQUAL(ps_alignment_iter_get(itor)->start, 8); TEST_EQUAL(ps_alignment_iter_get(itor)->duration, 18); itor = ps_alignment_iter_next(itor); TEST_EQUAL(ps_alignment_iter_get(itor)->start, 26); TEST_EQUAL(ps_alignment_iter_get(itor)->duration, 53); itor = ps_alignment_iter_next(itor); TEST_EQUAL(ps_alignment_iter_get(itor)->start, 79); TEST_EQUAL(ps_alignment_iter_get(itor)->duration, 36); itor = ps_alignment_iter_next(itor); TEST_EQUAL(ps_alignment_iter_get(itor)->start, 115); TEST_EQUAL(ps_alignment_iter_get(itor)->duration, 59); itor = ps_alignment_iter_next(itor); TEST_EQUAL(ps_alignment_iter_get(itor)->start, 174); TEST_EQUAL(ps_alignment_iter_get(itor)->duration, 49); itor = ps_alignment_iter_next(itor); TEST_EQUAL(itor, NULL); ps_search_free(search); ps_alignment_free(al); ps_free(ps); cmd_ln_free_r(config); return 0; } pocketsphinx-5prealpha/test/unit/test_fwdtree_bestpath.c0000664000175000017500000000610712546074702021105 00000000000000#include #include #include #include #include "pocketsphinx_internal.h" #include "ngram_search_fwdtree.h" #include "ps_lattice_internal.h" #include "test_macros.h" int main(int argc, char *argv[]) { ps_decoder_t *ps; cmd_ln_t *config; acmod_t *acmod; ngram_search_t *ngs; ps_lattice_t *dag; clock_t c; int i; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-lm", MODELDIR "/en-us/en-us.lm.bin", "-dict", MODELDIR "/en-us/cmudict-en-us.dict", "-fwdtree", "yes", "-fwdflat", "no", "-bestpath", "yes", "-input_endian", "little", "-samprate", "16000", NULL)); TEST_ASSERT(ps = ps_init(config)); ngs = (ngram_search_t *)ps->search; acmod = ps->acmod; acmod_set_grow(ps->acmod, TRUE); setbuf(stdout, NULL); c = clock(); for (i = 0; i < 5; ++i) { FILE *rawfh; int16 buf[2048]; size_t nread; int16 const *bptr; int nfr; /* PocketSphinx API would do this for us but we have to do it manually here. */ ps_lattice_free(ps->search->dag); ps->search->dag = NULL; TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb")); TEST_EQUAL(0, acmod_start_utt(acmod)); ngram_fwdtree_start(ngs); while (!feof(rawfh)) { nread = fread(buf, sizeof(*buf), 2048, rawfh); bptr = buf; while ((nfr = acmod_process_raw(acmod, &bptr, &nread, FALSE)) > 0) { while (acmod->n_feat_frame > 0) { ngram_fwdtree_search(ngs, acmod->output_frame); acmod_advance(acmod); } } } ngram_fwdtree_finish(ngs); printf("FWDTREE: %s\n", ngram_search_bp_hyp(ngs, ngram_search_find_exit(ngs, -1, NULL, NULL))); TEST_ASSERT(acmod_end_utt(acmod) >= 0); fclose(rawfh); dag = ngram_search_lattice(ps->search); if (dag == NULL) { E_ERROR("Failed to build DAG!\n"); return 1; } ps_lattice_write(dag, "test_fwdtree.lat"); printf("BESTPATH: %s\n", ps_lattice_hyp(dag, ps_lattice_bestpath(dag, ngs->lmset, 1.461538, 15.0))); } printf("%s\n", ngram_search_bp_hyp(ngs, ngram_search_find_exit(ngs, -1, NULL, NULL))); TEST_EQUAL(0, strcmp("go forward ten meters", ngram_search_bp_hyp(ngs, ngram_search_find_exit(ngs, -1, NULL, NULL)))); printf("%s\n", ps_lattice_hyp(dag, ps_lattice_bestpath(dag, ngs->lmset, 1.461538, 15.0))); TEST_EQUAL(0, strcmp("go forward ten meters", ps_lattice_hyp(dag, ps_lattice_bestpath(dag, ngs->lmset, 1.461538, 15.0)))); c = clock() - c; printf("5 * fwdtree + bestpath search in %.2f sec\n", (double)c / CLOCKS_PER_SEC); ps_free(ps); cmd_ln_free_r(config); return 0; } pocketsphinx-5prealpha/test/unit/test_macros.h0000664000175000017500000000055312504317076017041 00000000000000#include #include #include #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 200 #define TEST_EQUAL_LOG(a,b) TEST_ASSERT(abs((a) - (b)) < LOG_EPSILON) pocketsphinx-5prealpha/test/unit/Makefile.in0000664000175000017500000016640212525147724016424 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@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_ps_init$(EXEEXT) test_ps_reinit$(EXEEXT) \ test_ps_fwdtree$(EXEEXT) test_ps_fwdtree_fwdflat$(EXEEXT) \ test_ps_fwdflat$(EXEEXT) test_ps_fwdflat_bestpath$(EXEEXT) \ test_ps_fwdtree_bestpath$(EXEEXT) test_ps_simple$(EXEEXT) \ test_ps_nbest$(EXEEXT) test_ps_lattice$(EXEEXT) \ test_ps_set_search$(EXEEXT) test_acmod$(EXEEXT) \ test_acmod_grow$(EXEEXT) test_fwdtree$(EXEEXT) \ test_fwdflat$(EXEEXT) test_fwdtree_fwdflat$(EXEEXT) \ test_fwdtree_bestpath$(EXEEXT) test_fwdtree_nbest$(EXEEXT) \ test_pl_fwdtree$(EXEEXT) test_ptm_mgau$(EXEEXT) \ test_posterior$(EXEEXT) test_fsg$(EXEEXT) test_fsg2$(EXEEXT) \ test_fsg3$(EXEEXT) test_jsgf$(EXEEXT) test_lm_read$(EXEEXT) \ test_dict$(EXEEXT) test_dict2pid$(EXEEXT) test_senfh$(EXEEXT) \ test_alignment$(EXEEXT) test_state_align$(EXEEXT) \ test_mllr$(EXEEXT) subdir = test/unit DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(noinst_HEADERS) \ $(top_srcdir)/test-driver ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \ $(top_srcdir)/m4/ax_python_devel.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.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = test_acmod_SOURCES = test_acmod.c test_acmod_OBJECTS = test_acmod.$(OBJEXT) test_acmod_LDADD = $(LDADD) test_acmod_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = test_acmod_grow_SOURCES = test_acmod_grow.c test_acmod_grow_OBJECTS = test_acmod_grow.$(OBJEXT) test_acmod_grow_LDADD = $(LDADD) test_acmod_grow_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_alignment_SOURCES = test_alignment.c test_alignment_OBJECTS = test_alignment.$(OBJEXT) test_alignment_LDADD = $(LDADD) test_alignment_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_dict_SOURCES = test_dict.c test_dict_OBJECTS = test_dict.$(OBJEXT) test_dict_LDADD = $(LDADD) test_dict_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_dict2pid_SOURCES = test_dict2pid.c test_dict2pid_OBJECTS = test_dict2pid.$(OBJEXT) test_dict2pid_LDADD = $(LDADD) test_dict2pid_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_fsg_SOURCES = test_fsg.c test_fsg_OBJECTS = test_fsg.$(OBJEXT) test_fsg_LDADD = $(LDADD) test_fsg_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_fsg2_SOURCES = test_fsg2.c test_fsg2_OBJECTS = test_fsg2.$(OBJEXT) test_fsg2_LDADD = $(LDADD) test_fsg2_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_fsg3_SOURCES = test_fsg3.c test_fsg3_OBJECTS = test_fsg3.$(OBJEXT) test_fsg3_LDADD = $(LDADD) test_fsg3_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_fwdflat_SOURCES = test_fwdflat.c test_fwdflat_OBJECTS = test_fwdflat.$(OBJEXT) test_fwdflat_LDADD = $(LDADD) test_fwdflat_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_fwdtree_SOURCES = test_fwdtree.c test_fwdtree_OBJECTS = test_fwdtree.$(OBJEXT) test_fwdtree_LDADD = $(LDADD) test_fwdtree_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_fwdtree_bestpath_SOURCES = test_fwdtree_bestpath.c test_fwdtree_bestpath_OBJECTS = test_fwdtree_bestpath.$(OBJEXT) test_fwdtree_bestpath_LDADD = $(LDADD) test_fwdtree_bestpath_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_fwdtree_fwdflat_SOURCES = test_fwdtree_fwdflat.c test_fwdtree_fwdflat_OBJECTS = test_fwdtree_fwdflat.$(OBJEXT) test_fwdtree_fwdflat_LDADD = $(LDADD) test_fwdtree_fwdflat_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_fwdtree_nbest_SOURCES = test_fwdtree_nbest.c test_fwdtree_nbest_OBJECTS = test_fwdtree_nbest.$(OBJEXT) test_fwdtree_nbest_LDADD = $(LDADD) test_fwdtree_nbest_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_jsgf_SOURCES = test_jsgf.c test_jsgf_OBJECTS = test_jsgf.$(OBJEXT) test_jsgf_LDADD = $(LDADD) test_jsgf_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.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/libpocketsphinx/libpocketsphinx.la test_mllr_SOURCES = test_mllr.c test_mllr_OBJECTS = test_mllr.$(OBJEXT) test_mllr_LDADD = $(LDADD) test_mllr_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_pl_fwdtree_SOURCES = test_pl_fwdtree.c test_pl_fwdtree_OBJECTS = test_pl_fwdtree.$(OBJEXT) test_pl_fwdtree_LDADD = $(LDADD) test_pl_fwdtree_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_posterior_SOURCES = test_posterior.c test_posterior_OBJECTS = test_posterior.$(OBJEXT) test_posterior_LDADD = $(LDADD) test_posterior_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_ps_fwdflat_SOURCES = test_ps_fwdflat.c test_ps_fwdflat_OBJECTS = test_ps_fwdflat.$(OBJEXT) test_ps_fwdflat_LDADD = $(LDADD) test_ps_fwdflat_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_ps_fwdflat_bestpath_SOURCES = test_ps_fwdflat_bestpath.c test_ps_fwdflat_bestpath_OBJECTS = test_ps_fwdflat_bestpath.$(OBJEXT) test_ps_fwdflat_bestpath_LDADD = $(LDADD) test_ps_fwdflat_bestpath_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_ps_fwdtree_SOURCES = test_ps_fwdtree.c test_ps_fwdtree_OBJECTS = test_ps_fwdtree.$(OBJEXT) test_ps_fwdtree_LDADD = $(LDADD) test_ps_fwdtree_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_ps_fwdtree_bestpath_SOURCES = test_ps_fwdtree_bestpath.c test_ps_fwdtree_bestpath_OBJECTS = test_ps_fwdtree_bestpath.$(OBJEXT) test_ps_fwdtree_bestpath_LDADD = $(LDADD) test_ps_fwdtree_bestpath_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_ps_fwdtree_fwdflat_SOURCES = test_ps_fwdtree_fwdflat.c test_ps_fwdtree_fwdflat_OBJECTS = test_ps_fwdtree_fwdflat.$(OBJEXT) test_ps_fwdtree_fwdflat_LDADD = $(LDADD) test_ps_fwdtree_fwdflat_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_ps_init_SOURCES = test_ps_init.c test_ps_init_OBJECTS = test_ps_init.$(OBJEXT) test_ps_init_LDADD = $(LDADD) test_ps_init_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_ps_lattice_SOURCES = test_ps_lattice.c test_ps_lattice_OBJECTS = test_ps_lattice.$(OBJEXT) test_ps_lattice_LDADD = $(LDADD) test_ps_lattice_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_ps_nbest_SOURCES = test_ps_nbest.c test_ps_nbest_OBJECTS = test_ps_nbest.$(OBJEXT) test_ps_nbest_LDADD = $(LDADD) test_ps_nbest_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_ps_reinit_SOURCES = test_ps_reinit.c test_ps_reinit_OBJECTS = test_ps_reinit.$(OBJEXT) test_ps_reinit_LDADD = $(LDADD) test_ps_reinit_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_ps_set_search_SOURCES = test_ps_set_search.c test_ps_set_search_OBJECTS = test_ps_set_search.$(OBJEXT) test_ps_set_search_LDADD = $(LDADD) test_ps_set_search_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_ps_simple_SOURCES = test_ps_simple.c test_ps_simple_OBJECTS = test_ps_simple.$(OBJEXT) test_ps_simple_LDADD = $(LDADD) test_ps_simple_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_ptm_mgau_SOURCES = test_ptm_mgau.c test_ptm_mgau_OBJECTS = test_ptm_mgau.$(OBJEXT) test_ptm_mgau_LDADD = $(LDADD) test_ptm_mgau_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_senfh_SOURCES = test_senfh.c test_senfh_OBJECTS = test_senfh.$(OBJEXT) test_senfh_LDADD = $(LDADD) test_senfh_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la test_state_align_SOURCES = test_state_align.c test_state_align_OBJECTS = test_state_align.$(OBJEXT) test_state_align_LDADD = $(LDADD) test_state_align_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = test_acmod.c test_acmod_grow.c test_alignment.c test_dict.c \ test_dict2pid.c test_fsg.c test_fsg2.c test_fsg3.c \ test_fwdflat.c test_fwdtree.c test_fwdtree_bestpath.c \ test_fwdtree_fwdflat.c test_fwdtree_nbest.c test_jsgf.c \ test_lm_read.c test_mllr.c test_pl_fwdtree.c test_posterior.c \ test_ps_fwdflat.c test_ps_fwdflat_bestpath.c test_ps_fwdtree.c \ test_ps_fwdtree_bestpath.c test_ps_fwdtree_fwdflat.c \ test_ps_init.c test_ps_lattice.c test_ps_nbest.c \ test_ps_reinit.c test_ps_set_search.c test_ps_simple.c \ test_ptm_mgau.c test_senfh.c test_state_align.c DIST_SOURCES = test_acmod.c test_acmod_grow.c test_alignment.c \ test_dict.c test_dict2pid.c test_fsg.c test_fsg2.c test_fsg3.c \ test_fwdflat.c test_fwdtree.c test_fwdtree_bestpath.c \ test_fwdtree_fwdflat.c test_fwdtree_nbest.c test_jsgf.c \ test_lm_read.c test_mllr.c test_pl_fwdtree.c test_posterior.c \ test_ps_fwdflat.c test_ps_fwdflat_bestpath.c test_ps_fwdtree.c \ test_ps_fwdtree_bestpath.c test_ps_fwdtree_fwdflat.c \ test_ps_init.c test_ps_lattice.c test_ps_nbest.c \ test_ps_reinit.c test_ps_set_search.c test_ps_simple.c \ test_ptm_mgau.c test_senfh.c test_state_align.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } 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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ 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@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GST_CFLAGS = @GST_CFLAGS@ GST_LIBS = @GST_LIBS@ GST_MAJORMINOR = @GST_MAJORMINOR@ GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@ GStreamer_CFLAGS = @GStreamer_CFLAGS@ GStreamer_LIBS = @GStreamer_LIBS@ 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@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ 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_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SPHINXBASE_CFLAGS = @SPHINXBASE_CFLAGS@ SPHINXBASE_LIBS = @SPHINXBASE_LIBS@ SPHINXBASE_SWIG = @SPHINXBASE_SWIG@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ plugindir = @plugindir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ 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) EXTRA_DIST = ps_test.c noinst_HEADERS = test_macros.h AM_CFLAGS = -I$(top_srcdir)/include \ -I$(top_srcdir)/src/libpocketsphinx \ -I$(top_builddir)/include \ -I$(srcdir) \ -DMODELDIR=\"${top_srcdir}/model\" \ -DDATADIR=\"${top_srcdir}/test/data\" LDADD = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la \ -lsphinxbase CLEANFILES = *.log *.out *.lat *.mfc *.raw *.dic *.sen all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(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) --foreign test/unit/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign 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 $(am__aclocal_m4_deps): clean-checkPROGRAMS: @list='$(check_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list test_acmod$(EXEEXT): $(test_acmod_OBJECTS) $(test_acmod_DEPENDENCIES) $(EXTRA_test_acmod_DEPENDENCIES) @rm -f test_acmod$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_acmod_OBJECTS) $(test_acmod_LDADD) $(LIBS) test_acmod_grow$(EXEEXT): $(test_acmod_grow_OBJECTS) $(test_acmod_grow_DEPENDENCIES) $(EXTRA_test_acmod_grow_DEPENDENCIES) @rm -f test_acmod_grow$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_acmod_grow_OBJECTS) $(test_acmod_grow_LDADD) $(LIBS) test_alignment$(EXEEXT): $(test_alignment_OBJECTS) $(test_alignment_DEPENDENCIES) $(EXTRA_test_alignment_DEPENDENCIES) @rm -f test_alignment$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_alignment_OBJECTS) $(test_alignment_LDADD) $(LIBS) test_dict$(EXEEXT): $(test_dict_OBJECTS) $(test_dict_DEPENDENCIES) $(EXTRA_test_dict_DEPENDENCIES) @rm -f test_dict$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_dict_OBJECTS) $(test_dict_LDADD) $(LIBS) test_dict2pid$(EXEEXT): $(test_dict2pid_OBJECTS) $(test_dict2pid_DEPENDENCIES) $(EXTRA_test_dict2pid_DEPENDENCIES) @rm -f test_dict2pid$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_dict2pid_OBJECTS) $(test_dict2pid_LDADD) $(LIBS) test_fsg$(EXEEXT): $(test_fsg_OBJECTS) $(test_fsg_DEPENDENCIES) $(EXTRA_test_fsg_DEPENDENCIES) @rm -f test_fsg$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fsg_OBJECTS) $(test_fsg_LDADD) $(LIBS) test_fsg2$(EXEEXT): $(test_fsg2_OBJECTS) $(test_fsg2_DEPENDENCIES) $(EXTRA_test_fsg2_DEPENDENCIES) @rm -f test_fsg2$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fsg2_OBJECTS) $(test_fsg2_LDADD) $(LIBS) test_fsg3$(EXEEXT): $(test_fsg3_OBJECTS) $(test_fsg3_DEPENDENCIES) $(EXTRA_test_fsg3_DEPENDENCIES) @rm -f test_fsg3$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fsg3_OBJECTS) $(test_fsg3_LDADD) $(LIBS) test_fwdflat$(EXEEXT): $(test_fwdflat_OBJECTS) $(test_fwdflat_DEPENDENCIES) $(EXTRA_test_fwdflat_DEPENDENCIES) @rm -f test_fwdflat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fwdflat_OBJECTS) $(test_fwdflat_LDADD) $(LIBS) test_fwdtree$(EXEEXT): $(test_fwdtree_OBJECTS) $(test_fwdtree_DEPENDENCIES) $(EXTRA_test_fwdtree_DEPENDENCIES) @rm -f test_fwdtree$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fwdtree_OBJECTS) $(test_fwdtree_LDADD) $(LIBS) test_fwdtree_bestpath$(EXEEXT): $(test_fwdtree_bestpath_OBJECTS) $(test_fwdtree_bestpath_DEPENDENCIES) $(EXTRA_test_fwdtree_bestpath_DEPENDENCIES) @rm -f test_fwdtree_bestpath$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fwdtree_bestpath_OBJECTS) $(test_fwdtree_bestpath_LDADD) $(LIBS) test_fwdtree_fwdflat$(EXEEXT): $(test_fwdtree_fwdflat_OBJECTS) $(test_fwdtree_fwdflat_DEPENDENCIES) $(EXTRA_test_fwdtree_fwdflat_DEPENDENCIES) @rm -f test_fwdtree_fwdflat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fwdtree_fwdflat_OBJECTS) $(test_fwdtree_fwdflat_LDADD) $(LIBS) test_fwdtree_nbest$(EXEEXT): $(test_fwdtree_nbest_OBJECTS) $(test_fwdtree_nbest_DEPENDENCIES) $(EXTRA_test_fwdtree_nbest_DEPENDENCIES) @rm -f test_fwdtree_nbest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_fwdtree_nbest_OBJECTS) $(test_fwdtree_nbest_LDADD) $(LIBS) test_jsgf$(EXEEXT): $(test_jsgf_OBJECTS) $(test_jsgf_DEPENDENCIES) $(EXTRA_test_jsgf_DEPENDENCIES) @rm -f test_jsgf$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_jsgf_OBJECTS) $(test_jsgf_LDADD) $(LIBS) test_lm_read$(EXEEXT): $(test_lm_read_OBJECTS) $(test_lm_read_DEPENDENCIES) $(EXTRA_test_lm_read_DEPENDENCIES) @rm -f test_lm_read$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_lm_read_OBJECTS) $(test_lm_read_LDADD) $(LIBS) test_mllr$(EXEEXT): $(test_mllr_OBJECTS) $(test_mllr_DEPENDENCIES) $(EXTRA_test_mllr_DEPENDENCIES) @rm -f test_mllr$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_mllr_OBJECTS) $(test_mllr_LDADD) $(LIBS) test_pl_fwdtree$(EXEEXT): $(test_pl_fwdtree_OBJECTS) $(test_pl_fwdtree_DEPENDENCIES) $(EXTRA_test_pl_fwdtree_DEPENDENCIES) @rm -f test_pl_fwdtree$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_pl_fwdtree_OBJECTS) $(test_pl_fwdtree_LDADD) $(LIBS) test_posterior$(EXEEXT): $(test_posterior_OBJECTS) $(test_posterior_DEPENDENCIES) $(EXTRA_test_posterior_DEPENDENCIES) @rm -f test_posterior$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_posterior_OBJECTS) $(test_posterior_LDADD) $(LIBS) test_ps_fwdflat$(EXEEXT): $(test_ps_fwdflat_OBJECTS) $(test_ps_fwdflat_DEPENDENCIES) $(EXTRA_test_ps_fwdflat_DEPENDENCIES) @rm -f test_ps_fwdflat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ps_fwdflat_OBJECTS) $(test_ps_fwdflat_LDADD) $(LIBS) test_ps_fwdflat_bestpath$(EXEEXT): $(test_ps_fwdflat_bestpath_OBJECTS) $(test_ps_fwdflat_bestpath_DEPENDENCIES) $(EXTRA_test_ps_fwdflat_bestpath_DEPENDENCIES) @rm -f test_ps_fwdflat_bestpath$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ps_fwdflat_bestpath_OBJECTS) $(test_ps_fwdflat_bestpath_LDADD) $(LIBS) test_ps_fwdtree$(EXEEXT): $(test_ps_fwdtree_OBJECTS) $(test_ps_fwdtree_DEPENDENCIES) $(EXTRA_test_ps_fwdtree_DEPENDENCIES) @rm -f test_ps_fwdtree$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ps_fwdtree_OBJECTS) $(test_ps_fwdtree_LDADD) $(LIBS) test_ps_fwdtree_bestpath$(EXEEXT): $(test_ps_fwdtree_bestpath_OBJECTS) $(test_ps_fwdtree_bestpath_DEPENDENCIES) $(EXTRA_test_ps_fwdtree_bestpath_DEPENDENCIES) @rm -f test_ps_fwdtree_bestpath$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ps_fwdtree_bestpath_OBJECTS) $(test_ps_fwdtree_bestpath_LDADD) $(LIBS) test_ps_fwdtree_fwdflat$(EXEEXT): $(test_ps_fwdtree_fwdflat_OBJECTS) $(test_ps_fwdtree_fwdflat_DEPENDENCIES) $(EXTRA_test_ps_fwdtree_fwdflat_DEPENDENCIES) @rm -f test_ps_fwdtree_fwdflat$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ps_fwdtree_fwdflat_OBJECTS) $(test_ps_fwdtree_fwdflat_LDADD) $(LIBS) test_ps_init$(EXEEXT): $(test_ps_init_OBJECTS) $(test_ps_init_DEPENDENCIES) $(EXTRA_test_ps_init_DEPENDENCIES) @rm -f test_ps_init$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ps_init_OBJECTS) $(test_ps_init_LDADD) $(LIBS) test_ps_lattice$(EXEEXT): $(test_ps_lattice_OBJECTS) $(test_ps_lattice_DEPENDENCIES) $(EXTRA_test_ps_lattice_DEPENDENCIES) @rm -f test_ps_lattice$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ps_lattice_OBJECTS) $(test_ps_lattice_LDADD) $(LIBS) test_ps_nbest$(EXEEXT): $(test_ps_nbest_OBJECTS) $(test_ps_nbest_DEPENDENCIES) $(EXTRA_test_ps_nbest_DEPENDENCIES) @rm -f test_ps_nbest$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ps_nbest_OBJECTS) $(test_ps_nbest_LDADD) $(LIBS) test_ps_reinit$(EXEEXT): $(test_ps_reinit_OBJECTS) $(test_ps_reinit_DEPENDENCIES) $(EXTRA_test_ps_reinit_DEPENDENCIES) @rm -f test_ps_reinit$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ps_reinit_OBJECTS) $(test_ps_reinit_LDADD) $(LIBS) test_ps_set_search$(EXEEXT): $(test_ps_set_search_OBJECTS) $(test_ps_set_search_DEPENDENCIES) $(EXTRA_test_ps_set_search_DEPENDENCIES) @rm -f test_ps_set_search$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ps_set_search_OBJECTS) $(test_ps_set_search_LDADD) $(LIBS) test_ps_simple$(EXEEXT): $(test_ps_simple_OBJECTS) $(test_ps_simple_DEPENDENCIES) $(EXTRA_test_ps_simple_DEPENDENCIES) @rm -f test_ps_simple$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ps_simple_OBJECTS) $(test_ps_simple_LDADD) $(LIBS) test_ptm_mgau$(EXEEXT): $(test_ptm_mgau_OBJECTS) $(test_ptm_mgau_DEPENDENCIES) $(EXTRA_test_ptm_mgau_DEPENDENCIES) @rm -f test_ptm_mgau$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_ptm_mgau_OBJECTS) $(test_ptm_mgau_LDADD) $(LIBS) test_senfh$(EXEEXT): $(test_senfh_OBJECTS) $(test_senfh_DEPENDENCIES) $(EXTRA_test_senfh_DEPENDENCIES) @rm -f test_senfh$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_senfh_OBJECTS) $(test_senfh_LDADD) $(LIBS) test_state_align$(EXEEXT): $(test_state_align_OBJECTS) $(test_state_align_DEPENDENCIES) $(EXTRA_test_state_align_DEPENDENCIES) @rm -f test_state_align$(EXEEXT) $(AM_V_CCLD)$(LINK) $(test_state_align_OBJECTS) $(test_state_align_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_acmod.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_acmod_grow.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_alignment.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_dict.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_dict2pid.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_fsg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_fsg2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_fsg3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_fwdflat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_fwdtree.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_fwdtree_bestpath.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_fwdtree_fwdflat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_fwdtree_nbest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_jsgf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_lm_read.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_mllr.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_pl_fwdtree.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_posterior.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ps_fwdflat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ps_fwdflat_bestpath.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ps_fwdtree.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ps_fwdtree_bestpath.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ps_fwdtree_fwdflat.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ps_init.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ps_lattice.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ps_nbest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ps_reinit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ps_set_search.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ps_simple.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_ptm_mgau.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_senfh.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_state_align.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ else \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? test_ps_init.log: test_ps_init$(EXEEXT) @p='test_ps_init$(EXEEXT)'; \ b='test_ps_init'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_ps_reinit.log: test_ps_reinit$(EXEEXT) @p='test_ps_reinit$(EXEEXT)'; \ b='test_ps_reinit'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_ps_fwdtree.log: test_ps_fwdtree$(EXEEXT) @p='test_ps_fwdtree$(EXEEXT)'; \ b='test_ps_fwdtree'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_ps_fwdtree_fwdflat.log: test_ps_fwdtree_fwdflat$(EXEEXT) @p='test_ps_fwdtree_fwdflat$(EXEEXT)'; \ b='test_ps_fwdtree_fwdflat'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_ps_fwdflat.log: test_ps_fwdflat$(EXEEXT) @p='test_ps_fwdflat$(EXEEXT)'; \ b='test_ps_fwdflat'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_ps_fwdflat_bestpath.log: test_ps_fwdflat_bestpath$(EXEEXT) @p='test_ps_fwdflat_bestpath$(EXEEXT)'; \ b='test_ps_fwdflat_bestpath'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_ps_fwdtree_bestpath.log: test_ps_fwdtree_bestpath$(EXEEXT) @p='test_ps_fwdtree_bestpath$(EXEEXT)'; \ b='test_ps_fwdtree_bestpath'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_ps_simple.log: test_ps_simple$(EXEEXT) @p='test_ps_simple$(EXEEXT)'; \ b='test_ps_simple'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_ps_nbest.log: test_ps_nbest$(EXEEXT) @p='test_ps_nbest$(EXEEXT)'; \ b='test_ps_nbest'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_ps_lattice.log: test_ps_lattice$(EXEEXT) @p='test_ps_lattice$(EXEEXT)'; \ b='test_ps_lattice'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_ps_set_search.log: test_ps_set_search$(EXEEXT) @p='test_ps_set_search$(EXEEXT)'; \ b='test_ps_set_search'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_acmod.log: test_acmod$(EXEEXT) @p='test_acmod$(EXEEXT)'; \ b='test_acmod'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_acmod_grow.log: test_acmod_grow$(EXEEXT) @p='test_acmod_grow$(EXEEXT)'; \ b='test_acmod_grow'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_fwdtree.log: test_fwdtree$(EXEEXT) @p='test_fwdtree$(EXEEXT)'; \ b='test_fwdtree'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_fwdflat.log: test_fwdflat$(EXEEXT) @p='test_fwdflat$(EXEEXT)'; \ b='test_fwdflat'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_fwdtree_fwdflat.log: test_fwdtree_fwdflat$(EXEEXT) @p='test_fwdtree_fwdflat$(EXEEXT)'; \ b='test_fwdtree_fwdflat'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_fwdtree_bestpath.log: test_fwdtree_bestpath$(EXEEXT) @p='test_fwdtree_bestpath$(EXEEXT)'; \ b='test_fwdtree_bestpath'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_fwdtree_nbest.log: test_fwdtree_nbest$(EXEEXT) @p='test_fwdtree_nbest$(EXEEXT)'; \ b='test_fwdtree_nbest'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_pl_fwdtree.log: test_pl_fwdtree$(EXEEXT) @p='test_pl_fwdtree$(EXEEXT)'; \ b='test_pl_fwdtree'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_ptm_mgau.log: test_ptm_mgau$(EXEEXT) @p='test_ptm_mgau$(EXEEXT)'; \ b='test_ptm_mgau'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_posterior.log: test_posterior$(EXEEXT) @p='test_posterior$(EXEEXT)'; \ b='test_posterior'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_fsg.log: test_fsg$(EXEEXT) @p='test_fsg$(EXEEXT)'; \ b='test_fsg'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_fsg2.log: test_fsg2$(EXEEXT) @p='test_fsg2$(EXEEXT)'; \ b='test_fsg2'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_fsg3.log: test_fsg3$(EXEEXT) @p='test_fsg3$(EXEEXT)'; \ b='test_fsg3'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_jsgf.log: test_jsgf$(EXEEXT) @p='test_jsgf$(EXEEXT)'; \ b='test_jsgf'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_lm_read.log: test_lm_read$(EXEEXT) @p='test_lm_read$(EXEEXT)'; \ b='test_lm_read'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_dict.log: test_dict$(EXEEXT) @p='test_dict$(EXEEXT)'; \ b='test_dict'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_dict2pid.log: test_dict2pid$(EXEEXT) @p='test_dict2pid$(EXEEXT)'; \ b='test_dict2pid'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_senfh.log: test_senfh$(EXEEXT) @p='test_senfh$(EXEEXT)'; \ b='test_senfh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_alignment.log: test_alignment$(EXEEXT) @p='test_alignment$(EXEEXT)'; \ b='test_alignment'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_state_align.log: test_state_align$(EXEEXT) @p='test_state_align$(EXEEXT)'; \ b='test_state_align'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) test_mllr.log: test_mllr$(EXEEXT) @p='test_mllr$(EXEEXT)'; \ b='test_mllr'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) 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 "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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 html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am 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: check-am install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-TESTS check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am 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 \ recheck tags tags-am uninstall uninstall-am valgrind-check: for testf in .libs/lt-*; do valgrind --leak-check=full --show-reachable=yes \ $$testf; done >& valgrind.log # 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: pocketsphinx-5prealpha/test/unit/test_ptm_mgau.c0000664000175000017500000000663112546074702017366 00000000000000#include #include #include #include #include "pocketsphinx_internal.h" #include "ptm_mgau.h" #include "ms_mgau.h" #include "test_macros.h" static const mfcc_t prior[13] = { FLOAT2MFCC(37.03), FLOAT2MFCC(-1.01), FLOAT2MFCC(0.53), FLOAT2MFCC(0.49), FLOAT2MFCC(-0.60), FLOAT2MFCC(0.14), FLOAT2MFCC(-0.05), FLOAT2MFCC(0.25), FLOAT2MFCC(0.37), FLOAT2MFCC(0.58), FLOAT2MFCC(0.13), FLOAT2MFCC(-0.16), FLOAT2MFCC(0.17) }; void run_acmod_test(acmod_t *acmod) { FILE *rawfh; int16 *buf; int16 const *bptr; size_t nread, nsamps; int nfr; int frame_counter; cmn_prior_set(acmod->fcb->cmn_struct, prior); nsamps = 2048; frame_counter = 0; buf = ckd_calloc(nsamps, sizeof(*buf)); TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb")); TEST_EQUAL(0, acmod_start_utt(acmod)); printf("Incremental(2048):\n"); while (!feof(rawfh)) { nread = fread(buf, sizeof(*buf), nsamps, rawfh); bptr = buf; while ((nfr = acmod_process_raw(acmod, &bptr, &nread, FALSE)) > 0) { int16 best_score; int frame_idx = -1, best_senid; while (acmod->n_feat_frame > 0) { acmod_score(acmod, &frame_idx); acmod_advance(acmod); best_score = acmod_best_score(acmod, &best_senid); printf("Frame %d best senone %d score %d\n", frame_idx, best_senid, best_score); TEST_EQUAL(frame_counter, frame_idx); ++frame_counter; frame_idx = -1; } } } TEST_EQUAL(0, acmod_end_utt(acmod)); nread = 0; { int16 best_score; int frame_idx = -1, best_senid; while (acmod->n_feat_frame > 0) { acmod_score(acmod, &frame_idx); acmod_advance(acmod); best_score = acmod_best_score(acmod, &best_senid); printf("Frame %d best senone %d score %d\n", frame_idx, best_senid, best_score); TEST_EQUAL(frame_counter, frame_idx); ++frame_counter; frame_idx = -1; } } fclose(rawfh); } int main(int argc, char *argv[]) { logmath_t *lmath; cmd_ln_t *config; acmod_t *acmod; ps_mgau_t *ps; ptm_mgau_t *s; int i, lastcb; lmath = logmath_init(1.0001, 0, 0); config = cmd_ln_init(NULL, ps_args(), TRUE, "-mdef", MODELDIR "/en-us/en-us/mdef", "-mean", MODELDIR "/en-us/en-us/means", "-var", MODELDIR "/en-us/en-us/variances", "-tmat", MODELDIR "/en-us/en-us/transition_matrices", "-sendump", MODELDIR "/en-us/en-us/sendump", "-compallsen", "yes", "-input_endian", "little", NULL); cmd_ln_parse_file_r(config, ps_args(), MODELDIR "/en-us/en-us/feat.params", FALSE); err_set_debug_level(3); TEST_ASSERT(config); TEST_ASSERT((acmod = acmod_init(config, lmath, NULL, NULL))); TEST_ASSERT((ps = acmod->mgau)); TEST_EQUAL(0, strcmp(ps->vt->name, "ptm")); s = (ptm_mgau_t *)ps; E_DEBUG(2,("PTM model loaded: %d codebooks, %d senones, %d frames of history\n", s->g->n_mgau, s->n_sen, s->n_fast_hist)); E_DEBUG(2,("Senone to codebook mappings:\n")); lastcb = s->sen2cb[0]; E_DEBUG(2,("\t%d: 0", lastcb)); for (i = 0; i < s->n_sen; ++i) { if (s->sen2cb[i] != lastcb) { lastcb = s->sen2cb[i]; E_DEBUGCONT(2,("-%d\n", i-1)); E_DEBUGCONT(2,("\t%d: %d", lastcb, i)); } } E_INFOCONT("-%d\n", i-1); run_acmod_test(acmod); #if 0 /* Replace it with ms_mgau. */ ptm_mgau_free(ps); cmd_ln_set_str_r(config, "-mixw", MODELDIR "/en-us/en-us/mixture_weights"); TEST_ASSERT((acmod->mgau = ms_mgau_init(acmod, lmath, acmod->mdef))); run_acmod_test(acmod); cmd_ln_free_r(config); #endif return 0; } pocketsphinx-5prealpha/test/unit/test_ps_init.c0000664000175000017500000000111012546074702017205 00000000000000#include #include #include #include "test_macros.h" int main(int argc, char *argv[]) { ps_decoder_t *ps; cmd_ln_t *config; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-lm", MODELDIR "/en-us/en-us.lm.bin", "-dict", MODELDIR "/en-us/cmudict-en-us.dict", "-fwdtree", "yes", "-fwdflat", "yes", "-bestpath", "yes", "-input_endian", "little", "-samprate", "16000", NULL)); TEST_ASSERT(ps = ps_init(config)); ps_free(ps); cmd_ln_free_r(config); return 0; } pocketsphinx-5prealpha/test/unit/test_dict.c0000664000175000017500000000343312504317076016473 00000000000000#include #include #include #include #include "dict.h" #include "test_macros.h" int main(int argc, char *argv[]) { bin_mdef_t *mdef; dict_t *dict; cmd_ln_t *config; int i; char buf[100]; TEST_ASSERT(config = cmd_ln_init(NULL, NULL, FALSE, "-dict", MODELDIR "/en-us/cmudict-en-us.dict", "-fdict", MODELDIR "/en-us/en-us/noisedict", NULL)); /* Test dictionary in standard fashion. */ TEST_ASSERT(mdef = bin_mdef_read(NULL, MODELDIR "/en-us/en-us/mdef")); TEST_ASSERT(dict = dict_init(config, mdef)); printf("Word ID (CARNEGIE) = %d\n", dict_wordid(dict, "CARNEGIE")); printf("Word ID (ASDFASFASSD) = %d\n", dict_wordid(dict, "ASDFASFASSD")); TEST_EQUAL(0, dict_write(dict, "_cmu07a.dic", NULL)); TEST_EQUAL(0, system("diff -uw " MODELDIR "/en-us/cmudict-en-us.dict _cmu07a.dic")); dict_free(dict); bin_mdef_free(mdef); /* Now test an empty dictionary. */ TEST_ASSERT(dict = dict_init(NULL, NULL)); printf("Word ID() = %d\n", dict_wordid(dict, "")); TEST_ASSERT(BAD_S3WID != dict_add_word(dict, "FOOBIE", NULL, 0)); TEST_ASSERT(BAD_S3WID != dict_add_word(dict, "BLETCH", NULL, 0)); printf("Word ID(FOOBIE) = %d\n", dict_wordid(dict, "FOOBIE")); printf("Word ID(BLETCH) = %d\n", dict_wordid(dict, "BLETCH")); TEST_ASSERT(dict_real_word(dict, dict_wordid(dict, "FOOBIE"))); TEST_ASSERT(dict_real_word(dict, dict_wordid(dict, "BLETCH"))); TEST_ASSERT(!dict_real_word(dict, dict_wordid(dict, ""))); dict_free(dict); /* Test to add 500k words. */ TEST_ASSERT(dict = dict_init(NULL, NULL)); for (i = 0; i < 500000; i++) { sprintf(buf, "word_%d", i); TEST_ASSERT(BAD_S3WID != dict_add_word(dict, buf, NULL, 0)); } dict_free(dict); cmd_ln_free_r(config); return 0; } pocketsphinx-5prealpha/test/unit/ps_test.c0000664000175000017500000001075212504317076016174 00000000000000#include #include #include #include "pocketsphinx_internal.h" #include "test_macros.h" static const mfcc_t prior[13] = { FLOAT2MFCC(33.89), FLOAT2MFCC(-1.13), FLOAT2MFCC(0.83), FLOAT2MFCC(0.49), FLOAT2MFCC(-0.65), FLOAT2MFCC(0.12), FLOAT2MFCC(-0.03), FLOAT2MFCC(0.28), FLOAT2MFCC(0.41), FLOAT2MFCC(0.59), FLOAT2MFCC(0.11), FLOAT2MFCC(-0.20), FLOAT2MFCC(0.17) }; int ps_decoder_test(cmd_ln_t *config, char const *sname, char const *expected) { ps_decoder_t *ps; mfcc_t **cepbuf; FILE *rawfh; int16 *buf; int16 const *bptr; size_t nread; size_t nsamps; int32 nfr, i, score, prob; char const *hyp; double n_speech, n_cpu, n_wall; ps_seg_t *seg; TEST_ASSERT(ps = ps_init(config)); /* Test it first with pocketsphinx_decode_raw() */ TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb")); ps_decode_raw(ps, rawfh, -1); hyp = ps_get_hyp(ps, &score); prob = ps_get_prob(ps); printf("%s: %s (%d, %d)\n", sname, hyp, score, prob); TEST_EQUAL(0, strcmp(hyp, expected)); TEST_ASSERT(prob <= 0); ps_get_utt_time(ps, &n_speech, &n_cpu, &n_wall); printf("%.2f seconds speech, %.2f seconds CPU, %.2f seconds wall\n", n_speech, n_cpu, n_wall); printf("%.2f xRT (CPU), %.2f xRT (elapsed)\n", n_cpu / n_speech, n_wall / n_speech); /* Test it with ps_process_raw() */ clearerr(rawfh); fseek(rawfh, 0, SEEK_END); nsamps = ftell(rawfh) / sizeof(*buf); fseek(rawfh, 0, SEEK_SET); TEST_EQUAL(0, ps_start_utt(ps)); nsamps = 2048; buf = ckd_calloc(nsamps, sizeof(*buf)); while (!feof(rawfh)) { nread = fread(buf, sizeof(*buf), nsamps, rawfh); ps_process_raw(ps, buf, nread, FALSE, FALSE); } TEST_EQUAL(0, ps_end_utt(ps)); hyp = ps_get_hyp(ps, &score); prob = ps_get_prob(ps); printf("%s: %s (%d, %d)\n", sname, hyp, score, prob); TEST_EQUAL(0, strcmp(hyp, expected)); ps_get_utt_time(ps, &n_speech, &n_cpu, &n_wall); printf("%.2f seconds speech, %.2f seconds CPU, %.2f seconds wall\n", n_speech, n_cpu, n_wall); printf("%.2f xRT (CPU), %.2f xRT (elapsed)\n", n_cpu / n_speech, n_wall / n_speech); /* Now read the whole file and produce an MFCC buffer. */ clearerr(rawfh); fseek(rawfh, 0, SEEK_END); nsamps = ftell(rawfh) / sizeof(*buf); fseek(rawfh, 0, SEEK_SET); bptr = buf = ckd_realloc(buf, nsamps * sizeof(*buf)); TEST_EQUAL(nsamps, fread(buf, sizeof(*buf), nsamps, rawfh)); fe_process_frames(ps->acmod->fe, &bptr, &nsamps, NULL, &nfr, NULL); cepbuf = ckd_calloc_2d(nfr + 1, fe_get_output_size(ps->acmod->fe), sizeof(**cepbuf)); fe_start_utt(ps->acmod->fe); fe_process_frames(ps->acmod->fe, &bptr, &nsamps, cepbuf, &nfr, NULL); fe_end_utt(ps->acmod->fe, cepbuf[nfr], &i); /* Decode it with process_cep() */ TEST_EQUAL(0, ps_start_utt(ps)); for (i = 0; i < nfr; ++i) { ps_process_cep(ps, cepbuf + i, 1, FALSE, FALSE); } TEST_EQUAL(0, ps_end_utt(ps)); hyp = ps_get_hyp(ps, &score); prob = ps_get_prob(ps); printf("%s: %s (%d, %d)\n", sname, hyp, score, prob); TEST_EQUAL(0, strcmp(hyp, expected)); TEST_ASSERT(prob <= 0); for (seg = ps_seg_iter(ps, &score); seg; seg = ps_seg_next(seg)) { char const *word; int sf, ef; int32 post, lscr, ascr, lback; word = ps_seg_word(seg); ps_seg_frames(seg, &sf, &ef); post = ps_seg_prob(seg, &ascr, &lscr, &lback); printf("%s (%d:%d) P(w|o) = %f ascr = %d lscr = %d lback = %d\n", word, sf, ef, logmath_exp(ps_get_logmath(ps), post), ascr, lscr, lback); TEST_ASSERT(post <= 2); // Due to numerical errors with float it sometimes could go out of 0 } ps_get_utt_time(ps, &n_speech, &n_cpu, &n_wall); printf("%.2f seconds speech, %.2f seconds CPU, %.2f seconds wall\n", n_speech, n_cpu, n_wall); printf("%.2f xRT (CPU), %.2f xRT (elapsed)\n", n_cpu / n_speech, n_wall / n_speech); ps_get_all_time(ps, &n_speech, &n_cpu, &n_wall); printf("TOTAL: %.2f seconds speech, %.2f seconds CPU, %.2f seconds wall\n", n_speech, n_cpu, n_wall); printf("TOTAL: %.2f xRT (CPU), %.2f xRT (elapsed)\n", n_cpu / n_speech, n_wall / n_speech); fclose(rawfh); ps_free(ps); cmd_ln_free_r(config); ckd_free_2d(cepbuf); ckd_free(buf); return 0; } pocketsphinx-5prealpha/test/unit/test_dict2pid.c0000664000175000017500000000130412504317076017245 00000000000000#include #include #include #include #include "dict.h" #include "dict2pid.h" #include "test_macros.h" int main(int argc, char *argv[]) { bin_mdef_t *mdef; dict_t *dict; dict2pid_t *d2p; cmd_ln_t *config; TEST_ASSERT(config = cmd_ln_init(NULL, NULL, FALSE, "-dict", MODELDIR "/en-us/cmudict-en-us.dict", "-fdict", MODELDIR "/en-us/en-us/noisedict", NULL)); TEST_ASSERT(mdef = bin_mdef_read(NULL, MODELDIR "/en-us/en-us/mdef")); TEST_ASSERT(dict = dict_init(config, mdef)); TEST_ASSERT(d2p = dict2pid_build(mdef, dict)); dict_free(dict); dict2pid_free(d2p); bin_mdef_free(mdef); cmd_ln_free_r(config); return 0; } pocketsphinx-5prealpha/test/unit/test_fsg2.c0000664000175000017500000000505412504317076016412 00000000000000#include #include #include #include #include "pocketsphinx_internal.h" #include "fsg_search_internal.h" #include "ps_lattice_internal.h" #include "test_macros.h" int main(int argc, char *argv[]) { ps_decoder_t *ps; cmd_ln_t *config; acmod_t *acmod; fsg_search_t *fsgs; ps_lattice_t *dag; ps_seg_t *seg; int32 score; ps_latlink_t *link; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-fsg", DATADIR "/goforward.fsg", "-dict", DATADIR "/turtle.dic", "-bestpath", "no", "-input_endian", "little", "-samprate", "16000", NULL)); TEST_ASSERT(ps = ps_init(config)); fsgs = (fsg_search_t *)ps->search; acmod = ps->acmod; setbuf(stdout, NULL); { FILE *rawfh; int16 buf[2048]; size_t nread; int16 const *bptr; char const *hyp; int nfr; TEST_ASSERT(rawfh = fopen(DATADIR "/something.raw", "rb")); TEST_EQUAL(0, acmod_start_utt(acmod)); fsg_search_start(ps_search_base(fsgs)); while (!feof(rawfh)) { nread = fread(buf, sizeof(*buf), 2048, rawfh); bptr = buf; while ((nfr = acmod_process_raw(acmod, &bptr, &nread, FALSE)) > 0) { while (acmod->n_feat_frame > 0) { fsg_search_step(ps_search_base(fsgs), acmod->output_frame); acmod_advance(acmod); } } } fsg_search_finish(ps_search_base(fsgs)); hyp = fsg_search_hyp(ps_search_base(fsgs), &score, NULL); printf("FSG: %s (%d)\n", hyp, score); TEST_ASSERT(acmod_end_utt(acmod) >= 0); fclose(rawfh); } for (seg = ps_seg_iter(ps, &score); seg; seg = ps_seg_next(seg)) { char const *word; int sf, ef; int32 post, lscr, ascr, lback; word = ps_seg_word(seg); ps_seg_frames(seg, &sf, &ef); if (sf == ef) continue; post = ps_seg_prob(seg, &ascr, &lscr, &lback); printf("%s (%d:%d) P(w|o) = %f ascr = %d lscr = %d lback = %d\n", word, sf, ef, logmath_exp(ps_get_logmath(ps), post), ascr, lscr, lback); } dag = ps_get_lattice(ps); ps_lattice_write(dag, "test_fsg2.lat"); link = ps_lattice_bestpath(dag, NULL, 1.0, 1.0/15.0); if (link) printf("BESTPATH: %s\n", ps_lattice_hyp(dag, link)); ps_lattice_posterior(dag, NULL, 1.0/15.0); while (link) { printf("%s %d P(w|o) = %d + %d - %d = %d = %f\n", dict_wordstr(ps->dict, link->from->wid), link->ef, link->alpha, link->beta, dag->norm, link->alpha + link->beta - dag->norm, logmath_exp(ps_get_logmath(ps), link->alpha + link->beta - dag->norm)); link = link->best_prev; } ps_free(ps); cmd_ln_free_r(config); return 0; } pocketsphinx-5prealpha/test/unit/test_ps_nbest.c0000664000175000017500000000257112546074702017371 00000000000000#include #include #include #include "pocketsphinx_internal.h" #include "test_macros.h" #include "ps_test.c" int main(int argc, char *argv[]) { ps_decoder_t *ps; ps_nbest_t *nbest; cmd_ln_t *config; FILE *rawfh; char const *hyp; int32 score, n; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-lm", MODELDIR "/en-us/en-us.lm.bin", "-dict", MODELDIR "/en-us/cmudict-en-us.dict", "-fwdtree", "yes", "-fwdflat", "yes", "-bestpath", "yes", "-input_endian", "little", "-samprate", "16000", NULL)); TEST_ASSERT(ps = ps_init(config)); TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb")); ps_decode_raw(ps, rawfh, -1); fclose(rawfh); hyp = ps_get_hyp(ps, &score); printf("BESTPATH: %s (%d)\n", hyp, score); TEST_ASSERT(nbest = ps_nbest(ps, 0, -1, NULL, NULL)); n = 1; while (nbest && (nbest = ps_nbest_next(nbest))) { ps_seg_t *seg; hyp = ps_nbest_hyp(nbest, &score); printf("NBEST %d: %s (%d)\n", n, hyp, score); for (seg = ps_nbest_seg(nbest, &score); seg; seg = ps_seg_next(seg)) { char const *word; int sf, ef; word = ps_seg_word(seg); ps_seg_frames(seg, &sf, &ef); printf("%s %d %d\n", word, sf, ef); } if (n == 10) break; ++n; } if (nbest) ps_nbest_free(nbest); ps_free(ps); cmd_ln_free_r(config); return 0; } pocketsphinx-5prealpha/test/unit/test_lm_read.c0000664000175000017500000000603012546074702017151 00000000000000#include #include #include #include "test_macros.h" int main(int argc, char *argv[]) { char const *hyp; ps_decoder_t *ps; cmd_ln_t *config; ngram_model_t *lm; FILE *rawfh; int32 score; /* First decode it with the crappy WSJ language model. */ TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-lm", MODELDIR "/en-us/en-us.lm.bin", "-dict", DATADIR "/defective.dic", "-dictcase", "yes", "-input_endian", "little", "-samprate", "16000", NULL)); TEST_ASSERT(ps = ps_init(config)); TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb")); ps_decode_raw(ps, rawfh, -1); hyp = ps_get_hyp(ps, &score); printf("%s (%d)\n", hyp, score); TEST_EQUAL(0, strcmp(hyp, "go forward ten years")); /* Now load the turtle language model. */ lm = ngram_model_read(config, DATADIR "/turtle.lm.bin", NGRAM_AUTO, ps_get_logmath(ps)); ps_set_lm(ps, "turtle", lm); ps_set_search(ps, "turtle"); clearerr(rawfh); fseek(rawfh, 0, SEEK_SET); TEST_ASSERT(ps_decode_raw(ps, rawfh, -1)); hyp = ps_get_hyp(ps, &score); printf("%s (%d)\n", hyp, score); /* Oops! It's still not correct, because METERS isn't in the * dictionary that we originally loaded. */ TEST_EQUAL(0, strcmp(hyp, "go forward ten degrees")); /* So let's add it to the dictionary. */ ps_add_word(ps, "foobie", "F UW B IY", FALSE); ps_add_word(ps, "meters", "M IY T ER Z", TRUE); /* And try again. */ clearerr(rawfh); fseek(rawfh, 0, SEEK_SET); TEST_ASSERT(ps_decode_raw(ps, rawfh, -1)); hyp = ps_get_hyp(ps, &score); TEST_ASSERT(hyp); printf("%s (%d)\n", hyp, score); ps_lattice_write(ps_get_lattice(ps), "meters.lat"); /* Bingo! */ TEST_EQUAL(0, strcmp(hyp, "go forward ten meters")); /* Now let's test dictionary switching. */ TEST_EQUAL(-1, ps_load_dict(ps, DATADIR "/turtle_missing_file.dic", NULL, NULL)); /* Now let's test dictionary switching. */ TEST_EQUAL(0, ps_load_dict(ps, DATADIR "/turtle.dic", NULL, NULL)); /* And try again. */ clearerr(rawfh); fseek(rawfh, 0, SEEK_SET); TEST_ASSERT(ps_decode_raw(ps, rawfh, -1)); hyp = ps_get_hyp(ps, &score); printf("%s (%d)\n", hyp, score); TEST_EQUAL(0, strcmp(hyp, "go forward ten meters")); /* Try switching back again just to make sure. */ TEST_EQUAL(0, ps_load_dict(ps, DATADIR "/defective.dic", NULL, NULL)); clearerr(rawfh); fseek(rawfh, 0, SEEK_SET); TEST_ASSERT(ps_decode_raw(ps, rawfh, -1)); hyp = ps_get_hyp(ps, &score); printf("%s (%d)\n", hyp, score); TEST_EQUAL(0, strcmp(hyp, "go forward ten degrees")); fclose(rawfh); ps_free(ps); cmd_ln_free_r(config); return 0; } pocketsphinx-5prealpha/test/unit/test_fwdtree_fwdflat.c0000664000175000017500000000607412546074702020725 00000000000000#include #include #include #include #include "pocketsphinx_internal.h" #include "ngram_search_fwdtree.h" #include "ngram_search_fwdflat.h" #include "test_macros.h" int main(int argc, char *argv[]) { ps_decoder_t *ps; cmd_ln_t *config; acmod_t *acmod; ngram_search_t *ngs; clock_t c; int i; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-lm", MODELDIR "/en-us/en-us.lm.bin", "-dict", MODELDIR "/en-us/cmudict-en-us.dict", "-fwdtree", "yes", "-fwdflat", "yes", "-bestpath", "no", "-input_endian", "little", "-samprate", "16000", NULL)); TEST_ASSERT(ps = ps_init(config)); ngs = (ngram_search_t *)ps->search; acmod = ps->acmod; acmod_set_grow(ps->acmod, TRUE); setbuf(stdout, NULL); c = clock(); for (i = 0; i < 5; ++i) { FILE *rawfh; int16 buf[2048]; size_t nread; int16 const *bptr; int nfr; TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb")); TEST_EQUAL(0, acmod_start_utt(acmod)); ngram_fwdtree_start(ngs); while (!feof(rawfh)) { nread = fread(buf, sizeof(*buf), 2048, rawfh); bptr = buf; while ((nfr = acmod_process_raw(acmod, &bptr, &nread, FALSE)) > 0) { while (acmod->n_feat_frame > 0) { ngram_fwdtree_search(ngs, acmod->output_frame); acmod_advance(acmod); } } } TEST_ASSERT(acmod_end_utt(acmod) >= 0); while (acmod->n_feat_frame > 0) { ngram_fwdtree_search(ngs, acmod->output_frame); acmod_advance(acmod); } ngram_fwdtree_finish(ngs); printf("FWDTREE: %s\n", ngram_search_bp_hyp(ngs, ngram_search_find_exit(ngs, -1, NULL, NULL))); fclose(rawfh); E_INFO("grow_feat %d output_frame %d n_mfc_alloc %d n_mfc_frame %d\n", acmod->grow_feat, acmod->output_frame, acmod->n_mfc_alloc, acmod->n_mfc_frame); E_INFO("mfc_outidx %d n_feat_alloc %d n_feat_frame %d feat_outidx %d\n", acmod->mfc_outidx, acmod->n_feat_alloc, acmod->n_feat_frame, acmod->feat_outidx); TEST_EQUAL(0, acmod_rewind(acmod)); ngram_fwdflat_start(ngs); while (acmod->n_feat_frame > 0) { ngram_fwdflat_search(ngs, acmod->output_frame); acmod_advance(acmod); } ngram_fwdflat_finish(ngs); printf("FWDFLAT: %s\n", ngram_search_bp_hyp(ngs, ngram_search_find_exit(ngs, -1, NULL, NULL))); } TEST_EQUAL(0, strcmp("go forward ten meters", ngram_search_bp_hyp(ngs, ngram_search_find_exit(ngs, -1, NULL, NULL)))); c = clock() - c; printf("5 * fwdtree + fwdflat search in %.2f sec\n", (double)c / CLOCKS_PER_SEC); ps_free(ps); cmd_ln_free_r(config); return 0; } pocketsphinx-5prealpha/test/unit/test_ps_reinit.c0000664000175000017500000000151112535637372017547 00000000000000#include #include #include #include "test_macros.h" int main(int argc, char *argv[]) { ps_decoder_t *ps; cmd_ln_t *config; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", DATADIR "/tidigits/hmm", "-dict", DATADIR "/tidigits/lm/tidigits.dic", NULL)); TEST_ASSERT(ps = ps_init(config)); cmd_ln_free_r(config); TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-dict", MODELDIR "/en-us/cmudict-en-us.dict", NULL)); TEST_EQUAL(0, ps_reinit(ps, config)); /* Reinit when adding words */ ps_add_word(ps, "foobie", "F UW B IY", FALSE); ps_add_word(ps, "hellosomething", "HH EH L OW S", TRUE); /* Reinit with existing config */ ps_reinit(ps, NULL); ps_free(ps); cmd_ln_free_r(config); return 0; } pocketsphinx-5prealpha/test/unit/test_fsg.c0000664000175000017500000000600312505034521016313 00000000000000#include #include #include #include #include "pocketsphinx_internal.h" #include "fsg_search_internal.h" #include "ps_lattice_internal.h" #include "test_macros.h" int main(int argc, char *argv[]) { ps_decoder_t *ps; cmd_ln_t *config; acmod_t *acmod; fsg_search_t *fsgs; ps_lattice_t *dag; ps_seg_t *seg; int32 score; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-fsg", DATADIR "/goforward.fsg", "-dict", DATADIR "/turtle.dic", "-bestpath", "no", "-input_endian", "little", "-samprate", "16000", NULL)); TEST_ASSERT(ps = ps_init(config)); fsgs = (fsg_search_t *) ps->search; acmod = ps->acmod; setbuf(stdout, NULL); { FILE *rawfh; int16 buf[2048]; size_t nread; int16 const *bptr; char const *hyp; int nfr; int is_final; TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb")); TEST_EQUAL(0, acmod_start_utt(acmod)); fsg_search_start(ps_search_base(fsgs)); while (!feof(rawfh)) { nread = fread(buf, sizeof(*buf), 2048, rawfh); bptr = buf; while ((nfr = acmod_process_raw(acmod, &bptr, &nread, FALSE)) > 0) { while (acmod->n_feat_frame > 0) { fsg_search_step(ps_search_base(fsgs), acmod->output_frame); acmod_advance(acmod); } hyp = fsg_search_hyp(ps_search_base(fsgs), &score, &is_final); printf("FSG: %d %s (%d) %s\n", acmod->output_frame, hyp, score, is_final ? "FINAL" : ""); TEST_EQUAL (is_final, acmod->output_frame > 173); } } fsg_search_finish(ps_search_base(fsgs)); hyp = fsg_search_hyp(ps_search_base(fsgs), &score, NULL); printf("FSG: %s (%d)\n", hyp, score); TEST_ASSERT(acmod_end_utt(acmod) >= 0); fclose(rawfh); } TEST_EQUAL(0, strcmp("go forward ten meters", fsg_search_hyp(ps_search_base(fsgs), &score, NULL))); for (seg = ps_seg_iter(ps, &score); seg; seg = ps_seg_next(seg)) { char const *word; int sf, ef; int32 post, lscr, ascr, lback; word = ps_seg_word(seg); ps_seg_frames(seg, &sf, &ef); if (sf == ef) continue; post = ps_seg_prob(seg, &ascr, &lscr, &lback); printf("%s (%d:%d) P(w|o) = %f ascr = %d lscr = %d lback = %d\n", word, sf, ef, logmath_exp(ps_get_logmath(ps), post), ascr, lscr, lback); } /* Now get the DAG and play with it. */ dag = ps_get_lattice(ps); ps_lattice_write(dag, "test_fsg.lat"); printf("BESTPATH: %s\n", ps_lattice_hyp(dag, ps_lattice_bestpath(dag, NULL, 1.0, 15.0))); ps_lattice_posterior(dag, NULL, 15.0); ps_free(ps); cmd_ln_free_r(config); return 0; } pocketsphinx-5prealpha/test/unit/test_ps_lattice.c0000664000175000017500000001022012546074702017671 00000000000000#include #include #include #include "pocketsphinx_internal.h" #include "ps_lattice_internal.h" #include "test_macros.h" #include "ps_test.c" int test_nodes_and_stuff(ps_lattice_t *dag) { ps_latnode_iter_t *itor; ps_latlink_iter_t *litor; ps_latnode_t *forward = NULL; TEST_ASSERT(itor = ps_latnode_iter(dag)); while ((itor = ps_latnode_iter_next(itor))) { int16 sf, fef, lef; ps_latnode_t *node; float64 post; node = ps_latnode_iter_node(itor); sf = ps_latnode_times(node, &fef, &lef); post = logmath_exp(ps_lattice_get_logmath(dag), ps_latnode_prob(dag, node, NULL)); if (post > 0.0001) printf("%s %s %d -> (%d,%d) %f\n", ps_latnode_baseword(dag, node), ps_latnode_word(dag, node), sf, fef, lef, post); if (0 == strcmp(ps_latnode_baseword(dag, node), "forward")) forward = node; } TEST_ASSERT(forward); printf("FORWARD entries:\n"); for (litor = ps_latnode_entries(forward); litor; litor = ps_latlink_iter_next(litor)) { ps_latlink_t *link = ps_latlink_iter_link(litor); int16 sf, ef; float64 post; int32 ascr; ef = ps_latlink_times(link, &sf); post = logmath_exp(ps_lattice_get_logmath(dag), ps_latlink_prob(dag, link, &ascr)); if (post > 0.0001) printf("%s %d -> %d prob %f ascr %d\n", ps_latlink_baseword(dag, link), sf, ef, post, ascr); } printf("FORWARD exits:\n"); for (litor = ps_latnode_exits(forward); litor; litor = ps_latlink_iter_next(litor)) { ps_latlink_t *link = ps_latlink_iter_link(litor); int16 sf, ef; float64 post; int32 ascr; ef = ps_latlink_times(link, &sf); post = logmath_exp(ps_lattice_get_logmath(dag), ps_latlink_prob(dag, link, &ascr)); if (post > 0.0001) printf("%d -> %d prob %f ascr %d\n", sf, ef, post, ascr); } return 0; } int test_remaining_nodes(ps_lattice_t *dag) { ps_latnode_iter_t *itor; ps_latlink_iter_t *litor; int count, lcount; count = 0; lcount = 0; for (itor = ps_latnode_iter(dag); itor; itor = ps_latnode_iter_next(itor)) { ps_latnode_t* node = ps_latnode_iter_node(itor); for (litor = ps_latnode_entries(node); litor; litor = ps_latlink_iter_next(litor)) { lcount++; } count++; } TEST_ASSERT(count == 3); TEST_ASSERT(lcount == 2); printf("Remaining %d nodes %d links\n", count, lcount); return 0; } int main(int argc, char *argv[]) { ps_decoder_t *ps; ps_lattice_t *dag; cmd_ln_t *config; FILE *rawfh; char const *hyp; int32 score; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-lm", MODELDIR "/en-us/en-us.lm.bin", "-dict", MODELDIR "/en-us/cmudict-en-us.dict", "-fwdtree", "yes", "-fwdflat", "no", "-bestpath", "no", "-input_endian", "little", "-samprate", "16000", NULL)); TEST_ASSERT(ps = ps_init(config)); TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb")); ps_decode_raw(ps, rawfh, -1); fclose(rawfh); hyp = ps_get_hyp(ps, &score); printf("FWDFLAT: %s (%d)\n", hyp, score); TEST_ASSERT(dag = ps_get_lattice(ps)); ps_lattice_bestpath(dag, ps_get_lm(ps, PS_DEFAULT_SEARCH), 1.0, 1.0/15.0); score = ps_lattice_posterior(dag, ps_get_lm(ps, PS_DEFAULT_SEARCH), 1.0/15.0); printf("P(S|O) = %d\n", score); test_nodes_and_stuff(dag); ps_lattice_posterior_prune(dag, logmath_log(ps_lattice_get_logmath(dag), 1e-2)); test_nodes_and_stuff(dag); TEST_EQUAL(0, ps_lattice_write(dag, "goforward.lat")); dag = ps_lattice_read(ps, "goforward.lat"); TEST_ASSERT(dag); ps_lattice_bestpath(dag, ps_get_lm(ps, PS_DEFAULT_SEARCH), 1.0, 1.0/15.0); score = ps_lattice_posterior(dag, ps_get_lm(ps, PS_DEFAULT_SEARCH), 1.0/15.0); printf("P(S|O) = %d\n", score); test_nodes_and_stuff(dag); ps_lattice_free(dag); ps_free(ps); cmd_ln_free_r(config); /* Now test standalone lattices. */ dag = ps_lattice_read(NULL, "goforward.lat"); TEST_ASSERT(dag); test_nodes_and_stuff(dag); ps_lattice_free(dag); /* Test stripping the unreachable nodes. */ dag = ps_lattice_read(NULL, DATADIR "/unreachable.lat"); TEST_ASSERT(dag); ps_lattice_delete_unreachable(dag); test_remaining_nodes(dag); ps_lattice_free(dag); return 0; } pocketsphinx-5prealpha/test/unit/test_fwdtree.c0000664000175000017500000000412212546074702017206 00000000000000#include #include #include #include #include "pocketsphinx_internal.h" #include "ngram_search_fwdtree.h" #include "test_macros.h" int main(int argc, char *argv[]) { ps_decoder_t *ps; cmd_ln_t *config; acmod_t *acmod; ngram_search_t *ngs; clock_t c; int i; TEST_ASSERT(config = cmd_ln_init(NULL, ps_args(), TRUE, "-hmm", MODELDIR "/en-us/en-us", "-lm", MODELDIR "/en-us/en-us.lm.bin", "-dict", MODELDIR "/en-us/cmudict-en-us.dict", "-fwdtree", "yes", "-fwdflat", "no", "-bestpath", "no", "-input_endian", "little", "-samprate", "16000", NULL)); TEST_ASSERT(ps = ps_init(config)); ngs = (ngram_search_t *)ps->search; acmod = ps->acmod; setbuf(stdout, NULL); c = clock(); for (i = 0; i < 5; ++i) { FILE *rawfh; int16 buf[2048]; size_t nread; int16 const *bptr; int nfr; TEST_ASSERT(rawfh = fopen(DATADIR "/goforward.raw", "rb")); TEST_EQUAL(0, acmod_start_utt(acmod)); ngram_fwdtree_start(ngs); while (!feof(rawfh)) { nread = fread(buf, sizeof(*buf), 2048, rawfh); bptr = buf; while ((nfr = acmod_process_raw(acmod, &bptr, &nread, FALSE)) > 0) { while (acmod->n_feat_frame > 0) { ngram_fwdtree_search(ngs, acmod->output_frame); acmod_advance(acmod); } } } ngram_fwdtree_finish(ngs); printf("%s\n", ngram_search_bp_hyp(ngs, ngram_search_find_exit(ngs, -1, NULL, NULL))); TEST_ASSERT(acmod_end_utt(acmod) >= 0); fclose(rawfh); } TEST_EQUAL(0, strcmp("go forward ten meters", ngram_search_bp_hyp(ngs, ngram_search_find_exit(ngs, -1, NULL, NULL)))); c = clock() - c; printf("5 * fwdtree search in %.2f sec\n", (double)c / CLOCKS_PER_SEC); ps_free(ps); cmd_ln_free_r(config); return 0; } pocketsphinx-5prealpha/swig/0000775000175000017500000000000012560377662013446 500000000000000pocketsphinx-5prealpha/swig/pocketsphinx.i0000664000175000017500000001304412525174512016247 00000000000000/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* ==================================================================== * Copyright (c) 2013 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. * * ==================================================================== * */ %define DOCSTRING "This documentation was automatically generated using original comments in Doxygen format. As some C types and data structures cannot be directly mapped into Python types, some non-trivial type conversion could have place. Basically a type is replaced with another one that has the closest match, and sometimes one argument of generated function comprises several arguments of the original function (usually two). Functions having error code as the return value and returning effective value in one of its arguments are transformed so that the effective value is returned in a regular fashion and run-time exception is being thrown in case of negative error code." %enddef #if SWIGJAVA %module PocketSphinx #else %module(docstring=DOCSTRING) pocketsphinx #endif %feature("autodoc", "1"); %include typemaps.i %include iterators.i %import sphinxbase.i #if SWIGPYTHON %include pybuffer.i #endif %{ typedef cmd_ln_t Config; typedef feat_t Feature; typedef fe_t FrontEnd; typedef fsg_model_t FsgModel; typedef logmath_t LogMath; typedef ngram_model_t NGramModel; typedef ngram_model_t NGramModelSet; %} #if SWIGPYTHON %begin %{ #include %} #endif %begin %{ #include typedef int bool; #define false 0 #define true 1 typedef ps_decoder_t Decoder; typedef ps_decoder_t SegmentList; typedef ps_decoder_t NBestList; typedef ps_lattice_t Lattice; %} %inline %{ // TODO: make private with %immutable typedef struct { char *hypstr; int best_score; int prob; } Hypothesis; typedef struct { char *word; int32 ascore; int32 lscore; int32 lback; int32 prob; int start_frame; int end_frame; } Segment; typedef struct { char *hypstr; int32 score; } NBest; %} sb_iterator(Segment, ps_seg, Segment) sb_iterator(NBest, ps_nbest, NBest) sb_iterable_java(SegmentList, Segment) sb_iterable_java(NBestList, NBest) typedef struct {} Decoder; typedef struct {} Lattice; typedef struct {} NBestList; typedef struct {} SegmentList; #ifdef HAS_DOC %include pydoc.i #endif %extend Hypothesis { Hypothesis(char const *hypstr, int best_score, int prob) { Hypothesis *h = ckd_malloc(sizeof *h); if (hypstr) h->hypstr = ckd_salloc(hypstr); else h->hypstr = NULL; h->best_score = best_score; h->prob = prob; return h; } ~Hypothesis() { if ($self->hypstr) ckd_free($self->hypstr); ckd_free($self); } } %extend Segment { static Segment* fromIter(ps_seg_t *itor) { Segment *seg; if (!itor) return NULL; seg = ckd_malloc(sizeof(Segment)); seg->word = ckd_salloc(ps_seg_word(itor)); seg->prob = ps_seg_prob(itor, &(seg->ascore), &(seg->lscore), &(seg->lback)); ps_seg_frames(itor, &seg->start_frame, &seg->end_frame); return seg; } ~Segment() { ckd_free($self->word); ckd_free($self); } } %extend NBest { static NBest* fromIter(ps_nbest_t *itor) { NBest *nbest; if (!itor) return NULL; nbest = ckd_malloc(sizeof(NBest)); nbest->hypstr = ckd_salloc(ps_nbest_hyp(itor, &(nbest->score))); return nbest; } %newobject hyp; Hypothesis* hyp() { return $self->hypstr ? new_Hypothesis($self->hypstr, $self->score, 0) : NULL; } ~NBest() { ckd_free($self->hypstr); ckd_free($self); } } %extend SegmentList { SegmentList(ps_decoder_t *ptr) { return ptr; } %newobject __iter__; SegmentIterator * __iter__() { int32 best_score; return new_SegmentIterator(ps_seg_iter($self, &best_score)); } } %extend NBestList { NBestList(ps_decoder_t *ptr) { return ptr; } %newobject __iter__; NBestIterator * __iter__() { return new_NBestIterator(ps_nbest_next(ps_nbest($self, 0, -1, NULL, NULL))); } } %include ps_decoder.i %include ps_lattice.i pocketsphinx-5prealpha/swig/Makefile.am0000664000175000017500000000012112504317105015374 00000000000000SUBDIRS = python EXTRA_DIST = \ pocketsphinx.i \ ps_decoder.i \ ps_lattice.i pocketsphinx-5prealpha/swig/python/0000775000175000017500000000000012560377662014767 500000000000000pocketsphinx-5prealpha/swig/python/test/0000775000175000017500000000000012560377662015746 500000000000000pocketsphinx-5prealpha/swig/python/test/fsg_test.py0000664000175000017500000000040212521207254020034 00000000000000#!/usr/bin/python import sys from sphinxbase.sphinxbase import LogMath from sphinxbase.sphinxbase import FsgModel lmath = LogMath() fsg = FsgModel("simple_grammar", lmath, 1.0, 10) fsg.word_add("hello") fsg.word_add("world") print (fsg.word_id("world")) pocketsphinx-5prealpha/swig/python/test/lattice_test.py0000664000175000017500000000472712546074710020726 00000000000000# ==================================================================== # Copyright (c) 2013 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. # # ==================================================================== from os import environ, path from pocketsphinx.pocketsphinx import * from sphinxbase.sphinxbase import * MODELDIR = "../../../model" DATADIR = "../../../test/data" # Create a decoder with certain model config = Decoder.default_config() config.set_string('-hmm', path.join(MODELDIR, 'en-us/en-us')) config.set_string('-lm', path.join(MODELDIR, 'en-us/en-us.lm.bin')) config.set_string('-dict', path.join(MODELDIR, 'en-us/cmudict-en-us.dict')) decoder = Decoder(config) decoder.start_utt() stream = open(path.join(DATADIR, 'goforward.raw'), 'rb') while True: buf = stream.read(1024) if buf: decoder.process_raw(buf, False, False) else: break decoder.end_utt() decoder.get_lattice().write('goforward.lat') decoder.get_lattice().write_htk('goforward.htk') pocketsphinx-5prealpha/swig/python/test/Makefile.am0000664000175000017500000000020112504317105017673 00000000000000EXTRA_DIST = \ config_test.py \ decoder_test.py \ kws_test.py \ fsg_test.py \ jsgf_test.py \ lattice_test.py \ lm_test.py pocketsphinx-5prealpha/swig/python/test/decoder_test.py0000664000175000017500000000631512546074710020701 00000000000000# ==================================================================== # Copyright (c) 2013 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. # # ==================================================================== from os import environ, path from pocketsphinx.pocketsphinx import * from sphinxbase.sphinxbase import * MODELDIR = "../../../model" DATADIR = "../../../test/data" # Create a decoder with certain model config = Decoder.default_config() config.set_string('-hmm', path.join(MODELDIR, 'en-us/en-us')) config.set_string('-lm', path.join(MODELDIR, 'en-us/en-us.lm.bin')) config.set_string('-dict', path.join(MODELDIR, 'en-us/cmudict-en-us.dict')) # Decode streaming data. decoder = Decoder(config) print ("Pronunciation for word 'hello' is ", decoder.lookup_word("hello")) print ("Pronunciation for word 'abcdf' is ", decoder.lookup_word("abcdf")) decoder.start_utt() stream = open(path.join(DATADIR, 'goforward.raw'), 'rb') while True: buf = stream.read(1024) if buf: decoder.process_raw(buf, False, False) else: break decoder.end_utt() hypothesis = decoder.hyp() print ('Best hypothesis: ', hypothesis.hypstr, " model score: ", hypothesis.best_score, " confidence: ", hypothesis.prob) print ('Best hypothesis segments: ', [seg.word for seg in decoder.seg()]) # Access N best decodings. print ('Best 10 hypothesis: ') for best, i in zip(decoder.nbest(), range(10)): print (best.hypstr, best.score) stream = open(path.join(DATADIR, 'goforward.mfc'), 'rb') stream.read(4) buf = stream.read(13780) decoder.start_utt() decoder.process_cep(buf, False, True) decoder.end_utt() hypothesis = decoder.hyp() print ('Best hypothesis: ', hypothesis.hypstr, " model score: ", hypothesis.best_score, " confidence: ", hypothesis.prob) pocketsphinx-5prealpha/swig/python/test/Makefile.in0000664000175000017500000003076612525147724017742 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@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 = swig/python/test DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \ $(top_srcdir)/m4/ax_python_devel.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.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ 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@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GST_CFLAGS = @GST_CFLAGS@ GST_LIBS = @GST_LIBS@ GST_MAJORMINOR = @GST_MAJORMINOR@ GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@ GStreamer_CFLAGS = @GStreamer_CFLAGS@ GStreamer_LIBS = @GStreamer_LIBS@ 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@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ 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_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SPHINXBASE_CFLAGS = @SPHINXBASE_CFLAGS@ SPHINXBASE_LIBS = @SPHINXBASE_LIBS@ SPHINXBASE_SWIG = @SPHINXBASE_SWIG@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ plugindir = @plugindir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ 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 = \ config_test.py \ decoder_test.py \ kws_test.py \ fsg_test.py \ jsgf_test.py \ lattice_test.py \ lm_test.py 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) --foreign swig/python/test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign swig/python/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 $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: 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 "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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 html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am 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-am clean clean-generic clean-libtool \ cscopelist-am ctags-am 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 \ tags-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: pocketsphinx-5prealpha/swig/python/test/lm_test.py0000664000175000017500000000700312546074710017677 00000000000000# ==================================================================== # Copyright (c) 2013 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. # # ==================================================================== from os import environ, path from pocketsphinx.pocketsphinx import * from sphinxbase.sphinxbase import * MODELDIR = "../../../model" DATADIR = "../../../test/data" # Create a decoder with certain model config = Decoder.default_config() config.set_string('-hmm', path.join(MODELDIR, 'en-us/en-us')) config.set_string('-lm', path.join(MODELDIR, 'en-us/en-us.lm.bin')) config.set_string('-dict', path.join(DATADIR, 'defective.dic')) config.set_boolean('-mmap', False) decoder = Decoder(config) decoder.start_utt() stream = open(path.join(DATADIR, 'goforward.raw'), 'rb') while True: buf = stream.read(1024) if buf: decoder.process_raw(buf, False, False) else: break decoder.end_utt() print ('Decoding with default settings:', decoder.hyp().hypstr) # Load "turtle" language model and decode again. lm = NGramModel(config, decoder.get_logmath(), path.join(DATADIR, 'turtle.lm.bin')) print (lm.prob(['you'])) print (lm.prob(['are','you'])) print (lm.prob(['you', 'are', 'what'])) print (lm.prob(['lost', 'are', 'you'])) decoder.set_lm('turtle', lm) decoder.set_search('turtle') decoder.start_utt() stream = open(path.join(DATADIR, 'goforward.raw'), 'rb') while True: buf = stream.read(1024) if buf: decoder.process_raw(buf, False, False) else: break decoder.end_utt() print ('Decoding with "turtle" language:', decoder.hyp().hypstr) ## The word 'meters' isn't in the loaded dictionary. ## Let's add it manually. decoder.add_word('foobie', 'F UW B IY', False) decoder.add_word('meters', 'M IY T ER Z', True) decoder.start_utt() stream = open(path.join(DATADIR, 'goforward.raw'), 'rb') while True: buf = stream.read(1024) if buf: decoder.process_raw(buf, False, False) else: break decoder.end_utt() print ('Decoding with customized language:', decoder.hyp().hypstr) pocketsphinx-5prealpha/swig/python/test/config_test.py0000664000175000017500000000532412521207233020527 00000000000000# ==================================================================== # Copyright (c) 2013 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. # # ==================================================================== from os import environ, path from pocketsphinx.pocketsphinx import * from sphinxbase.sphinxbase import * #some dumb test for checking during developent MODELDIR = "../../../model" config = Decoder.default_config() intval = 256 floatval = 8000.0 stringval = "~/pocketsphinx" boolval = True # Check values that was previously set. s = config.get_float("-samprate") print ("Float: ",floatval ," ", s) config.set_float("-samprate", floatval) s = config.get_float("-samprate") print ("Float: ",floatval ," ", s) s = config.get_int("-nfft") print ("Int:",intval, " ", s) config.set_int("-nfft", intval) s = config.get_int("-nfft") print ("Int:",intval, " ", s) s = config.get_string("-rawlogdir") print ("String:",stringval, " ", s) config.set_string("-rawlogdir", stringval) s = config.get_string("-rawlogdir") print ("String:",stringval, " ", s) s = config.get_boolean("-backtrace") print ("Boolean:", boolval, " ", s) config.set_boolean("-backtrace", boolval); s = config.get_boolean("-backtrace") print ("Boolean:", boolval, " ", s) pocketsphinx-5prealpha/swig/python/test/kws_test.py0000664000175000017500000000565112525217005020073 00000000000000# ==================================================================== # Copyright (c) 2013 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. # # ==================================================================== import sys, os from pocketsphinx.pocketsphinx import * from sphinxbase.sphinxbase import * modeldir = "../../../model" datadir = "../../../test/data" # Create a decoder with certain model config = Decoder.default_config() config.set_string('-hmm', os.path.join(modeldir, 'en-us/en-us')) config.set_string('-dict', os.path.join(modeldir, 'en-us/cmudict-en-us.dict')) config.set_string('-keyphrase', 'forward') config.set_float('-kws_threshold', 1e+20) # Open file to read the data stream = open(os.path.join(datadir, "goforward.raw"), "rb") # Alternatively you can read from microphone # import pyaudio # # p = pyaudio.PyAudio() # stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True, frames_per_buffer=1024) # stream.start_stream() # Process audio chunk by chunk. On keyword detected perform action and restart search decoder = Decoder(config) decoder.start_utt() while True: buf = stream.read(1024) if buf: decoder.process_raw(buf, False, False) else: break if decoder.hyp() != None: print ([(seg.word, seg.prob, seg.start_frame, seg.end_frame) for seg in decoder.seg()]) print ("Detected keyword, restarting search") decoder.end_utt() decoder.start_utt() pocketsphinx-5prealpha/swig/python/test/jsgf_test.py0000664000175000017500000000577112546074710020232 00000000000000# ==================================================================== # Copyright (c) 2013 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. # # ==================================================================== from os import environ, path from sys import stdout from pocketsphinx.pocketsphinx import * from sphinxbase.sphinxbase import * MODELDIR = "../../../model" DATADIR = "../../../test/data" # Create a decoder with certain model config = Decoder.default_config() config.set_string('-hmm', path.join(MODELDIR, 'en-us/en-us')) config.set_string('-lm', path.join(DATADIR, 'turtle.lm.bin')) config.set_string('-dict', path.join(DATADIR, 'turtle.dic')) decoder = Decoder(config) # Decode with lm decoder.start_utt() stream = open(path.join(DATADIR, 'goforward.raw'), 'rb') while True: buf = stream.read(1024) if buf: decoder.process_raw(buf, False, False) else: break decoder.end_utt() print ('Decoding with "turtle" language:', decoder.hyp().hypstr) # Switch to JSGF grammar jsgf = Jsgf(path.join(DATADIR, 'goforward.gram')) rule = jsgf.get_rule('goforward.move2') fsg = jsgf.build_fsg(rule, decoder.get_logmath(), 7.5) fsg.writefile('goforward.fsg') decoder.set_fsg("goforward", fsg) decoder.set_search("goforward") decoder.start_utt() stream = open(path.join(DATADIR, 'goforward.raw'), 'rb') while True: buf = stream.read(1024) if buf: decoder.process_raw(buf, False, False) else: break decoder.end_utt() print ('Decoding with "goforward" grammar:', decoder.hyp().hypstr) pocketsphinx-5prealpha/swig/python/Makefile.am0000664000175000017500000000160212525174512016730 00000000000000if BUILD_SWIG SUBDIRS = test SWIG_FLAGS = -I$(top_srcdir)/include -I@SPHINXBASE_SWIG@ SWIG_DIR = $(top_srcdir)/swig SWIG_FILES = \ $(SWIG_DIR)/pocketsphinx.i \ $(SWIG_DIR)/ps_decoder.i \ $(SWIG_DIR)/ps_lattice.i if BUILD_DOXYGEN SWIG_FLAGS += -DHAS_DOC -I$(top_builddir)/doc SWIG_FILES += $(top_builddir)/doc/pydoc.i endif CLEANFILES = pocketsphinx_wrap.c pocketsphinx.py pocketsphinx.pyc nodist_pkgpyexec_PYTHON = pocketsphinx.py pkgpyexec_PYTHON = __init__.py pkgpyexec_LTLIBRARIES = _pocketsphinx.la nodist__pocketsphinx_la_SOURCES = pocketsphinx_wrap.c AM_CFLAGS =\ $(PYTHON_CPPFLAGS) \ -I$(top_srcdir)/include \ -D_DATADIR=\"$(datadir)/@PACKAGE@\" _pocketsphinx_la_LDFLAGS = -module _pocketsphinx_la_LIBADD = \ -lsphinxbase \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la pocketsphinx_wrap.c: $(SWIG_FILES) $(SWIG) $(SWIG_FLAGS) -outdir . -o $@ -python $< endif pocketsphinx-5prealpha/swig/python/Makefile.in0000664000175000017500000007417712525174536016770 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@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@ @BUILD_DOXYGEN_TRUE@@BUILD_SWIG_TRUE@am__append_1 = -DHAS_DOC -I$(top_builddir)/doc @BUILD_DOXYGEN_TRUE@@BUILD_SWIG_TRUE@am__append_2 = $(top_builddir)/doc/pydoc.i subdir = swig/python DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(am__pkgpyexec_PYTHON_DIST) \ $(top_srcdir)/py-compile ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \ $(top_srcdir)/m4/ax_python_devel.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.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgpyexecdir)" \ "$(DESTDIR)$(pkgpyexecdir)" "$(DESTDIR)$(pkgpyexecdir)" LTLIBRARIES = $(pkgpyexec_LTLIBRARIES) @BUILD_SWIG_TRUE@_pocketsphinx_la_DEPENDENCIES = $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la @BUILD_SWIG_TRUE@nodist__pocketsphinx_la_OBJECTS = \ @BUILD_SWIG_TRUE@ pocketsphinx_wrap.lo _pocketsphinx_la_OBJECTS = $(nodist__pocketsphinx_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = _pocketsphinx_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(_pocketsphinx_la_LDFLAGS) $(LDFLAGS) \ -o $@ @BUILD_SWIG_TRUE@am__pocketsphinx_la_rpath = -rpath $(pkgpyexecdir) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(nodist__pocketsphinx_la_SOURCES) DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-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 \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__py_compile = PYTHON=$(PYTHON) $(SHELL) $(py_compile) am__pep3147_tweak = \ sed -e 's|\.py$$||' -e 's|[^/]*$$|__pycache__/&.*.py|' am__pkgpyexec_PYTHON_DIST = __init__.py py_compile = $(top_srcdir)/py-compile RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = test DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ 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@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GST_CFLAGS = @GST_CFLAGS@ GST_LIBS = @GST_LIBS@ GST_MAJORMINOR = @GST_MAJORMINOR@ GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@ GStreamer_CFLAGS = @GStreamer_CFLAGS@ GStreamer_LIBS = @GStreamer_LIBS@ 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@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ 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_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SPHINXBASE_CFLAGS = @SPHINXBASE_CFLAGS@ SPHINXBASE_LIBS = @SPHINXBASE_LIBS@ SPHINXBASE_SWIG = @SPHINXBASE_SWIG@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ plugindir = @plugindir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ 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@ @BUILD_SWIG_TRUE@SUBDIRS = test @BUILD_SWIG_TRUE@SWIG_FLAGS = -I$(top_srcdir)/include \ @BUILD_SWIG_TRUE@ -I@SPHINXBASE_SWIG@ $(am__append_1) @BUILD_SWIG_TRUE@SWIG_DIR = $(top_srcdir)/swig @BUILD_SWIG_TRUE@SWIG_FILES = $(SWIG_DIR)/pocketsphinx.i \ @BUILD_SWIG_TRUE@ $(SWIG_DIR)/ps_decoder.i \ @BUILD_SWIG_TRUE@ $(SWIG_DIR)/ps_lattice.i $(am__append_2) @BUILD_SWIG_TRUE@CLEANFILES = pocketsphinx_wrap.c pocketsphinx.py pocketsphinx.pyc @BUILD_SWIG_TRUE@nodist_pkgpyexec_PYTHON = pocketsphinx.py @BUILD_SWIG_TRUE@pkgpyexec_PYTHON = __init__.py @BUILD_SWIG_TRUE@pkgpyexec_LTLIBRARIES = _pocketsphinx.la @BUILD_SWIG_TRUE@nodist__pocketsphinx_la_SOURCES = pocketsphinx_wrap.c @BUILD_SWIG_TRUE@AM_CFLAGS = \ @BUILD_SWIG_TRUE@ $(PYTHON_CPPFLAGS) \ @BUILD_SWIG_TRUE@ -I$(top_srcdir)/include \ @BUILD_SWIG_TRUE@ -D_DATADIR=\"$(datadir)/@PACKAGE@\" @BUILD_SWIG_TRUE@_pocketsphinx_la_LDFLAGS = -module @BUILD_SWIG_TRUE@_pocketsphinx_la_LIBADD = \ @BUILD_SWIG_TRUE@ -lsphinxbase \ @BUILD_SWIG_TRUE@ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la all: all-recursive .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) --foreign swig/python/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign swig/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 $(am__aclocal_m4_deps): install-pkgpyexecLTLIBRARIES: $(pkgpyexec_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(pkgpyexec_LTLIBRARIES)'; test -n "$(pkgpyexecdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgpyexecdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgpyexecdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(pkgpyexecdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(pkgpyexecdir)"; \ } uninstall-pkgpyexecLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(pkgpyexec_LTLIBRARIES)'; test -n "$(pkgpyexecdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(pkgpyexecdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(pkgpyexecdir)/$$f"; \ done clean-pkgpyexecLTLIBRARIES: -test -z "$(pkgpyexec_LTLIBRARIES)" || rm -f $(pkgpyexec_LTLIBRARIES) @list='$(pkgpyexec_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } _pocketsphinx.la: $(_pocketsphinx_la_OBJECTS) $(_pocketsphinx_la_DEPENDENCIES) $(EXTRA__pocketsphinx_la_DEPENDENCIES) $(AM_V_CCLD)$(_pocketsphinx_la_LINK) $(am__pocketsphinx_la_rpath) $(_pocketsphinx_la_OBJECTS) $(_pocketsphinx_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pocketsphinx_wrap.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-nodist_pkgpyexecPYTHON: $(nodist_pkgpyexec_PYTHON) @$(NORMAL_INSTALL) @list='$(nodist_pkgpyexec_PYTHON)'; dlist=; list2=; test -n "$(pkgpyexecdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgpyexecdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgpyexecdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgpyexecdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgpyexecdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ $(am__py_compile) --destdir "$(DESTDIR)" \ --basedir "$(pkgpyexecdir)" $$dlist; \ else :; fi uninstall-nodist_pkgpyexecPYTHON: @$(NORMAL_UNINSTALL) @list='$(nodist_pkgpyexec_PYTHON)'; test -n "$(pkgpyexecdir)" || list=; \ py_files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$py_files" || exit 0; \ dir='$(DESTDIR)$(pkgpyexecdir)'; \ pyc_files=`echo "$$py_files" | sed 's|$$|c|'`; \ pyo_files=`echo "$$py_files" | sed 's|$$|o|'`; \ py_files_pep3147=`echo "$$py_files" | $(am__pep3147_tweak)`; \ echo "$$py_files_pep3147";\ pyc_files_pep3147=`echo "$$py_files_pep3147" | sed 's|$$|c|'`; \ pyo_files_pep3147=`echo "$$py_files_pep3147" | sed 's|$$|o|'`; \ st=0; \ for files in \ "$$py_files" \ "$$pyc_files" \ "$$pyo_files" \ "$$pyc_files_pep3147" \ "$$pyo_files_pep3147" \ ; do \ $(am__uninstall_files_from_dir) || st=$$?; \ done; \ exit $$st install-pkgpyexecPYTHON: $(pkgpyexec_PYTHON) @$(NORMAL_INSTALL) @list='$(pkgpyexec_PYTHON)'; dlist=; list2=; test -n "$(pkgpyexecdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgpyexecdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgpyexecdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then b=; else b="$(srcdir)/"; fi; \ if test -f $$b$$p; then \ $(am__strip_dir) \ dlist="$$dlist $$f"; \ list2="$$list2 $$b$$p"; \ else :; fi; \ done; \ for file in $$list2; do echo $$file; done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgpyexecdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgpyexecdir)" || exit $$?; \ done || exit $$?; \ if test -n "$$dlist"; then \ $(am__py_compile) --destdir "$(DESTDIR)" \ --basedir "$(pkgpyexecdir)" $$dlist; \ else :; fi uninstall-pkgpyexecPYTHON: @$(NORMAL_UNINSTALL) @list='$(pkgpyexec_PYTHON)'; test -n "$(pkgpyexecdir)" || list=; \ py_files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$py_files" || exit 0; \ dir='$(DESTDIR)$(pkgpyexecdir)'; \ pyc_files=`echo "$$py_files" | sed 's|$$|c|'`; \ pyo_files=`echo "$$py_files" | sed 's|$$|o|'`; \ py_files_pep3147=`echo "$$py_files" | $(am__pep3147_tweak)`; \ echo "$$py_files_pep3147";\ pyc_files_pep3147=`echo "$$py_files_pep3147" | sed 's|$$|c|'`; \ pyo_files_pep3147=`echo "$$py_files_pep3147" | sed 's|$$|o|'`; \ st=0; \ for files in \ "$$py_files" \ "$$pyc_files" \ "$$pyo_files" \ "$$pyc_files_pep3147" \ "$$pyo_files_pep3147" \ ; do \ $(am__uninstall_files_from_dir) || st=$$?; \ done; \ exit $$st # 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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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; \ ($(am__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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ 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 || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$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 \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ 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)$(pkgpyexecdir)" "$(DESTDIR)$(pkgpyexecdir)" "$(DESTDIR)$(pkgpyexecdir)"; 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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 clean-pkgpyexecLTLIBRARIES \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-nodist_pkgpyexecPYTHON \ install-pkgpyexecLTLIBRARIES install-pkgpyexecPYTHON install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -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-nodist_pkgpyexecPYTHON \ uninstall-pkgpyexecLTLIBRARIES uninstall-pkgpyexecPYTHON .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool \ clean-pkgpyexecLTLIBRARIES cscopelist-am ctags ctags-am \ 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-nodist_pkgpyexecPYTHON \ install-pdf install-pdf-am install-pkgpyexecLTLIBRARIES \ install-pkgpyexecPYTHON 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-am uninstall uninstall-am \ uninstall-nodist_pkgpyexecPYTHON \ uninstall-pkgpyexecLTLIBRARIES uninstall-pkgpyexecPYTHON @BUILD_SWIG_TRUE@pocketsphinx_wrap.c: $(SWIG_FILES) @BUILD_SWIG_TRUE@ $(SWIG) $(SWIG_FLAGS) -outdir . -o $@ -python $< # 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: pocketsphinx-5prealpha/swig/python/__init__.py0000664000175000017500000000342512525174512017012 00000000000000# -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ # ==================================================================== # Copyright (c) 2013 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. # # ==================================================================== from pocketsphinx import * pocketsphinx-5prealpha/swig/Makefile.in0000664000175000017500000004521612525147724015436 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@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 = swig DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \ $(top_srcdir)/m4/ax_python_devel.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.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-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 \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ 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@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GST_CFLAGS = @GST_CFLAGS@ GST_LIBS = @GST_LIBS@ GST_MAJORMINOR = @GST_MAJORMINOR@ GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@ GStreamer_CFLAGS = @GStreamer_CFLAGS@ GStreamer_LIBS = @GStreamer_LIBS@ 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@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ 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_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SPHINXBASE_CFLAGS = @SPHINXBASE_CFLAGS@ SPHINXBASE_LIBS = @SPHINXBASE_LIBS@ SPHINXBASE_SWIG = @SPHINXBASE_SWIG@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ plugindir = @plugindir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ 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 = python EXTRA_DIST = \ pocketsphinx.i \ ps_decoder.i \ ps_lattice.i 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) --foreign swig/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign swig/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 $(am__aclocal_m4_deps): 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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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; \ ($(am__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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ 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 || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$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 \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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 html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: 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: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am 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-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: pocketsphinx-5prealpha/swig/ps_decoder.i0000664000175000017500000001657412546074710015654 00000000000000/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* ==================================================================== * Copyright (c) 2013 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. * * ==================================================================== * */ %extend Decoder { /* Following functions have no bindings: * ps_mllr_t *ps_update_mllr - requires * int ps_decode_senscr */ Decoder(int *errcode) { Decoder *d = ps_init(cmd_ln_init(NULL, ps_args(), FALSE, NULL)); *errcode = d ? 0 : -1; return d; } Decoder(Config *config, int *errcode) { Decoder *d = ps_init(config); *errcode = d ? 0 : -1; return d; } ~Decoder() { ps_free($self); } void reinit(Config *config, int *errcode) { *errcode = ps_reinit($self, config); } void load_dict( char const *fdict, char const *ffilter, char const *format, int *errcode) { *errcode = ps_load_dict($self, fdict, ffilter, format); } void save_dict(char const *dictfile, char const *format, int *errcode) { *errcode = ps_save_dict($self, dictfile, format); } void add_word(char const *word, char const *phones, int update, int *errcode) { *errcode = ps_add_word($self, word, phones, update); } %newobject lookup_word; char * lookup_word(const char *word) { return ps_lookup_word($self, word); } Lattice * get_lattice() { return ps_lattice_retain(ps_get_lattice($self)); } %newobject get_config; Config *get_config() { return cmd_ln_retain(ps_get_config($self)); } %newobject default_config; static Config *default_config() { return cmd_ln_parse_r(NULL, ps_args(), 0, NULL, FALSE); } %newobject file_config; static Config *file_config(char const * path) { return cmd_ln_parse_file_r(NULL, ps_args(), path, FALSE); } void start_stream(int *errcode) { *errcode = ps_start_stream($self); } void start_utt(int *errcode) { *errcode = ps_start_utt($self); } void end_utt(int *errcode) { *errcode = ps_end_utt($self); } #ifdef SWIGPYTHON %include %pybuffer_binary(const char* SDATA, size_t NSAMP); int process_raw(const char* SDATA, size_t NSAMP, bool no_search, bool full_utt, int *errcode) { NSAMP /= sizeof(int16); return *errcode = ps_process_raw($self, (int16 *)SDATA, NSAMP, no_search, full_utt); } int process_cep(const char *SDATA, size_t NSAMP, bool no_search, bool full_utt, int *errcode) { mfcc_t **feats; int ncep = fe_get_output_size(ps_get_fe($self)); NSAMP /= ncep * sizeof(mfcc_t); feats = ckd_calloc_2d(NSAMP, ncep, sizeof(mfcc_t)); memcpy(feats[0], SDATA, NSAMP * ncep * sizeof(mfcc_t)); *errcode = ps_process_cep($self, feats, NSAMP, no_search, full_utt); ckd_free_2d(feats); return *errcode; } #else int process_raw(const int16 *SDATA, size_t NSAMP, bool no_search, bool full_utt, int *errcode) { return *errcode = ps_process_raw($self, SDATA, NSAMP, no_search, full_utt); } #endif #ifdef SWIGJAVA // Not sure how to properly return binary buffer in python yet (python3 is also an issue) void set_rawdata_size(size_t size) { ps_set_rawdata_size($self, size); } int16 *get_rawdata(int32 *RAWDATA_SIZE) { int16 *result; ps_get_rawdata($self, &result, RAWDATA_SIZE); return result; } #endif %newobject hyp; Hypothesis * hyp() { char const *hyp; int32 best_score, prob; hyp = ps_get_hyp($self, &best_score); if (hyp) prob = ps_get_prob($self); return hyp ? new_Hypothesis(hyp, best_score, prob) : NULL; } FrontEnd * get_fe() { return ps_get_fe($self); } Feature * get_feat() { return ps_get_feat($self); } bool get_in_speech() { return ps_get_in_speech($self); } FsgModel * get_fsg(const char *name) { return fsg_model_retain(ps_get_fsg($self, name)); } void set_fsg(const char *name, FsgModel *fsg, int *errcode) { *errcode = ps_set_fsg($self, name, fsg); } void set_jsgf_file(const char *name, const char *path, int *errcode) { *errcode = ps_set_jsgf_file($self, name, path); } void set_jsgf_string(const char *name, const char *jsgf_string, int *errcode) { *errcode = ps_set_jsgf_string($self, name, jsgf_string); } const char * get_kws(const char *name) { return ps_get_kws($self, name); } void set_kws(const char *name, const char *keyfile, int *errcode) { *errcode = ps_set_kws($self, name, keyfile); } void set_keyphrase(const char *name, const char *keyphrase, int *errcode) { *errcode = ps_set_keyphrase($self, name, keyphrase); } void set_allphone_file(const char *name, const char *lmfile, int *errcode) { *errcode = ps_set_allphone_file($self, name, lmfile); } %newobject get_lm; NGramModel * get_lm(const char *name) { return ngram_model_retain(ps_get_lm($self, name)); } void set_lm(const char *name, NGramModel *lm, int *errcode) { *errcode = ps_set_lm($self, name, lm); } void set_lm_file(const char *name, const char *path, int *errcode) { *errcode = ps_set_lm_file($self, name, path); } %newobject get_logmath; LogMath * get_logmath() { return logmath_retain(ps_get_logmath($self)); } void set_search(const char *search_name, int *errcode) { *errcode = ps_set_search($self, search_name); } const char * get_search() { return ps_get_search($self); } int n_frames() { return ps_get_n_frames($self); } SegmentList *seg() { return $self; } NBestList *nbest() { return $self; } } pocketsphinx-5prealpha/swig/ps_lattice.i0000664000175000017500000000437712504317105015662 00000000000000/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* ==================================================================== * Copyright (c) 2013 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. * * ==================================================================== * */ %extend Lattice { Lattice(const char *path) { return ps_lattice_read(NULL, path); } Lattice(Decoder *decoder, char *path) { return ps_lattice_read(decoder, path); } ~Lattice() { ps_lattice_free($self); } void write(char const *path, int *errcode) { *errcode = ps_lattice_write($self, path); } void write_htk(char const *path, int *errcode) { *errcode = ps_lattice_write_htk($self, path); } } pocketsphinx-5prealpha/win32/0000775000175000017500000000000012560377662013437 500000000000000pocketsphinx-5prealpha/win32/pocketsphinx_mdef_convert/0000775000175000017500000000000012560377662020711 500000000000000pocketsphinx-5prealpha/win32/pocketsphinx_mdef_convert/pocketsphinx_mdef_convert.vcxproj0000775000175000017500000001123712504317656027522 00000000000000 Debug Win32 Release Win32 Debug x64 Release x64 {94001a0e-a837-445c-8004-f918f10d0226} {4FB65800-11B8-46BD-95B8-6E4F73BDAD91} Win32Proj pocketsphinx_mdef_convert Application false MultiByte v110 Win32 X64 MachineX64 MachineX86 $(SolutionDir)\bin\$(Configuration)\$(Platform)\ $(Configuration)\$(Platform)\ false Level3 Disabled _DEBUG;_CONSOLE;%(PreprocessorDefinitions) ../../include;../../../sphinxbase/include;../../../sphinxbase/include/win32;../../src/libpocketsphinx;%(AdditionalIncludeDirectories) Console true sphinxbase.lib;pocketsphinx.lib;%(AdditionalDependencies) $(SolutionDir)/bin/$(Configuration)/$(Platform)/pocketsphinx_mdef_convert.exe ..\..\..\sphinxbase\bin\$(Configuration)\$(Platform);..\..\bin\$(Configuration)\$(Platform);%(AdditionalLibraryDirectories) false Level3 MaxSpeed true true NDEBUG;_CONSOLE;%(PreprocessorDefinitions) ../../include;../../../sphinxbase/include;../../../sphinxbase/include/win32;../../src/libpocketsphinx;%(AdditionalIncludeDirectories) Console true true true pocketsphinx-5prealpha/win32/pocketsphinx_continuous/0000775000175000017500000000000012560377662020444 500000000000000pocketsphinx-5prealpha/win32/pocketsphinx_continuous/pocketsphinx_continuous.vcxproj0000775000175000017500000001756312504317656027020 00000000000000 Debug Win32 Release Win32 Debug x64 Release x64 {1380AF76-C926-44D0-8002-06C228AC869A} pocketsphinx_continuous Application false v110 MultiByte Win32 X64 MachineX64 MachineX86 $(SolutionDir)\bin\$(Configuration)\$(Platform)\ $(Configuration)\$(Platform)\ false $(SolutionDir)\bin\$(Configuration)\$(Platform)/pocketsphinx_continuous.tlb Disabled ../../include;../../../sphinxbase/include;../../../sphinxbase/include/win32;../../src/libpocketsphinx;%(AdditionalIncludeDirectories) _DEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;AD_BACKEND_WIN32;HAVE_CONFIG_H;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL .\$(Configuration)\$(Platform)/pocketsphinx_continuous.pch .\$(Configuration)\$(Platform)/ .\$(Configuration)\$(Platform)/ .\$(Configuration)\$(Platform)/ Level3 true EditAndContinue _DEBUG;%(PreprocessorDefinitions) 0x0409 sphinxbase.lib;winmm.lib;pocketsphinx.lib;%(AdditionalDependencies) $(SolutionDir)\bin\$(Configuration)\$(Platform)\pocketsphinx_continuous.exe true ..\..\..\sphinxbase\bin\$(Configuration)\$(Platform);..\..\bin\$(Configuration)\$(Platform);%(AdditionalLibraryDirectories) true $(SolutionDir)\bin\$(Configuration)\$(Platform)/pocketsphinx_continuous.pdb Console false $(MachineArch) false true $(SolutionDir)\bin\$(Configuration)\$(Platform)/pocketsphinx_continuous.bsc $(SolutionDir)\bin\$(Configuration)\$(Platform)/pocketsphinx_continuous.tlb MaxSpeed OnlyExplicitInline ../../include;../../../sphinxbase/include;../../../sphinxbase/include/win32;../../src/libpocketsphinx;%(AdditionalIncludeDirectories) NDEBUG;_CONSOLE;AD_BACKEND_WIN32;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;%(PreprocessorDefinitions) true MultiThreadedDLL true .\$(Configuration)\$(Platform)/pocketsphinx_continuous.pch .\$(Configuration)\$(Platform)/ .\$(Configuration)\$(Platform)/ .\$(Configuration)\$(Platform)/ Level3 true NDEBUG;%(PreprocessorDefinitions) 0x0409 sphinxbase.lib;winmm.lib;%(AdditionalDependencies) $(SolutionDir)\bin\$(Configuration)\$(Platform)\pocketsphinx_continuous.exe true ..\..\..\sphinxbase\bin\$(Configuration)\$(Platform);%(AdditionalLibraryDirectories) $(SolutionDir)\bin\$(Configuration)\$(Platform)/pocketsphinx_continuous.pdb Console false $(MachineArch) true $(SolutionDir)\bin\$(Configuration)\$(Platform)/pocketsphinx_continuous.bsc {94001a0e-a837-445c-8004-f918f10d0226} pocketsphinx-5prealpha/win32/pocketsphinx/0000775000175000017500000000000012560377662016156 500000000000000pocketsphinx-5prealpha/win32/pocketsphinx/pocketsphinx.vcxproj.filters0000775000175000017500000001030312504317104023660 00000000000000 pocketsphinx-5prealpha/win32/pocketsphinx/pocketsphinx.vcxproj0000775000175000017500000002775212504317656022245 00000000000000 Debug Win32 Release Win32 Debug x64 Release x64 {94001A0E-A837-445C-8004-F918F10D0226} pocketsphinx DynamicLibrary false MultiByte v110 Win32 X64 MachineX64 MachineX86 $(SolutionDir)\bin\$(Configuration)\$(Platform)\ $(Configuration)\$(Platform)\ false NDEBUG;%(PreprocessorDefinitions) true true $(TargetEnv) .\..\..\..\bin\$(Configuration)\$(Platform)/pocketsphinx.tlb MaxSpeed OnlyExplicitInline ../../include;../../src/libpocketsphinx;../../../sphinxbase/include;../../../sphinxbase/include/win32;%(AdditionalIncludeDirectories) NDEBUG;_USRDLL;POCKETSPHINX_EXPORTS;HAVE_CONFIG_H;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true MultiThreadedDLL true .\$(Configuration)\$(Platform)/pocketsphinx.pch .\$(Configuration)\$(Platform)/ .\$(Configuration)\$(Platform)/ .\$(Configuration)\$(Platform)/ Level3 true NDEBUG;%(PreprocessorDefinitions) 0x0409 sphinxbase.lib;winmm.lib;%(AdditionalDependencies) ..\..\bin\$(Configuration)\$(Platform)\pocketsphinx.dll true ..\..\..\sphinxbase\bin\$(Configuration)\$(Platform);%(AdditionalLibraryDirectories) ..\..\bin\$(Configuration)\$(Platform)/pocketsphinx.pdb false ..\..\bin\$(Configuration)\$(Platform)/pocketsphinx.lib $(MachineArch) true .\..\..\..\bin\$(Configuration)\$(Platform)/pocketsphinx.bsc _DEBUG;%(PreprocessorDefinitions) true true $(TargetEnv) .\..\..\..\bin\$(Configuration)\$(Platform)/pocketsphinx.tlb Disabled ../../include;../../src/libpocketsphinx;../../../sphinxbase/include;../../../sphinxbase/include/win32;%(AdditionalIncludeDirectories) _DEBUG;_USRDLL;POCKETSPHINX_EXPORTS;HAVE_CONFIG_H;_CRT_SECURE_NO_DEPRECATE;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL .\$(Configuration)\$(Platform)/pocketsphinx.pch .\$(Configuration)\$(Platform)/ .\$(Configuration)\$(Platform)/ .\$(Configuration)\$(Platform)/ Level3 true EditAndContinue _DEBUG;%(PreprocessorDefinitions) 0x0409 sphinxbase.lib;winmm.lib;%(AdditionalDependencies) ../../bin/$(Configuration)/$(Platform)/pocketsphinx.dll true ..\..\..\sphinxbase\bin\$(Configuration)\$(Platform);%(AdditionalLibraryDirectories) true ..\..\bin\$(Configuration)\$(Platform)/pocketsphinx.pdb false ..\..\bin\$(Configuration)\$(Platform)/pocketsphinx.lib $(MachineArch) false true .\..\..\..\bin\$(Configuration)\$(Platform)/pocketsphinx.bsc pocketsphinx-5prealpha/win32/pocketsphinx_batch/0000775000175000017500000000000012560377662017317 500000000000000pocketsphinx-5prealpha/win32/pocketsphinx_batch/pocketsphinx_batch.vcxproj0000775000175000017500000001734112504317656024540 00000000000000 Debug Win32 Release Win32 Debug x64 Release x64 {CB47D94B-2F84-41BC-A3C4-A1EBDCDE922A} pocketsphinx_batch Application false MultiByte v110 Win32 X64 MachineX64 MachineX86 $(SolutionDir)\bin\$(Configuration)\$(Platform)\ $(Configuration)\$(Platform)\ false .\..\..\..\bin\$(Configuration)\$(Platform)/pocketsphinx_batch.tlb MaxSpeed OnlyExplicitInline ../../include;../../../sphinxbase/include;../../../sphinxbase/include/win32;../../src/libpocketsphinx;%(AdditionalIncludeDirectories) NDEBUG;_CONSOLE;_CRT_SECURE_NO_WARNINGS;HAVE_CONFIG_H;%(PreprocessorDefinitions) true MultiThreadedDLL true .\$(Configuration)\$(Platform)/pocketsphinx_batch.pch .\$(Configuration)\$(Platform)/ .\$(Configuration)\$(Platform)/ .\$(Configuration)\$(Platform)/ Level3 true NDEBUG;%(PreprocessorDefinitions) 0x0409 sphinxbase.lib;winmm.lib;%(AdditionalDependencies) ..\..\bin\$(Configuration)\$(Platform)\pocketsphinx_batch.exe true ..\..\..\sphinxbase\bin\$(Configuration)\$(Platform);%(AdditionalLibraryDirectories) ..\..\bin\$(Configuration)\$(Platform)/pocketsphinx_batch.pdb Console false $(MachineArch) true .\..\..\..\bin\$(Configuration)\$(Platform)/pocketsphinx_batch.bsc .\..\..\..\bin\$(Configuration)\$(Platform)/pocketsphinx_batch.tlb Disabled ../../include;../../../sphinxbase/include;../../../sphinxbase/include/win32;../../src/libpocketsphinx;%(AdditionalIncludeDirectories) _DEBUG;_CONSOLE;HAVE_CONFIG_H;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions) true EnableFastChecks MultiThreadedDebugDLL .\$(Configuration)\$(Platform)/pocketsphinx_batch.pch .\$(Configuration)\$(Platform)/ .\$(Configuration)\$(Platform)/ .\$(Configuration)\$(Platform)/ Level3 true EditAndContinue _DEBUG;%(PreprocessorDefinitions) 0x0409 sphinxbase.lib;winmm.lib;pocketsphinx.lib;%(AdditionalDependencies) ../../bin/$(Configuration)/$(Platform)/pocketsphinx_batch.exe true ..\..\..\sphinxbase\bin\$(Configuration)\$(Platform);..\..\bin\$(Configuration)\$(Platform);%(AdditionalLibraryDirectories) true ..\..\bin\$(Configuration)\$(Platform)/pocketsphinx_batch.pdb Console false $(MachineArch) false true .\..\..\..\bin\$(Configuration)\$(Platform)/pocketsphinx_batch.bsc {94001a0e-a837-445c-8004-f918f10d0226} pocketsphinx-5prealpha/pocketsphinx.pc.in0000664000175000017500000000071112504317100016037 00000000000000prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ libs=@LIBS@ datarootdir=@datarootdir@ modeldir=@datadir@/@PACKAGE@/model Name: PocketSphinx Description: Lightweight speech recognition system Version: @VERSION@ URL: http://cmusphinx.sourceforge.net/ Requires: sphinxbase >= @VERSION@ Libs: -L${libdir} -lpocketsphinx Libs.private: ${libs} -lm Cflags: -I${includedir} -I${includedir}/sphinxbase -I${includedir}/pocketsphinx pocketsphinx-5prealpha/include/0000775000175000017500000000000012560377662014120 500000000000000pocketsphinx-5prealpha/include/ps_lattice.h0000664000175000017500000003220312504317077016330 00000000000000/* -*- 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 ps_lattice.h Word graph search */ #ifndef __PS_LATTICE_H__ #define __PS_LATTICE_H__ /* SphinxBase headers. */ #include #include /* PocketSphinx headers. */ #include /** * Word graph structure used in bestpath/nbest search. */ typedef struct ps_lattice_s ps_lattice_t; /** * DAG nodes. * * A node corresponds to a number of hypothesized instances of a word * which all share the same starting point. */ typedef struct ps_latnode_s ps_latnode_t; /** * Iterator over DAG nodes. */ typedef struct ps_latnode_s ps_latnode_iter_t; /* pay no attention to the man behind the curtain */ /** * Links between DAG nodes. * * A link corresponds to a single hypothesized instance of a word with * a given start and end point. */ typedef struct ps_latlink_s ps_latlink_t; /** * Iterator over DAG links. */ typedef struct latlink_list_s ps_latlink_iter_t; /* Forward declaration needed to avoid circular includes */ struct ps_decoder_s; /** * Read a lattice from a file on disk. * * @param ps Decoder to use for processing this lattice, or NULL. * @param file Path to lattice file. * @return Newly created lattice, or NULL for failure. */ POCKETSPHINX_EXPORT ps_lattice_t *ps_lattice_read(struct ps_decoder_s *ps, char const *file); /** * Retain a lattice. * * This function retains ownership of a lattice for the caller, * preventing it from being freed automatically. You must call * ps_lattice_free() to free it after having called this function. * * @return pointer to the retained lattice. */ POCKETSPHINX_EXPORT ps_lattice_t *ps_lattice_retain(ps_lattice_t *dag); /** * Free a lattice. * * @return new reference count (0 if dag was freed) */ POCKETSPHINX_EXPORT int ps_lattice_free(ps_lattice_t *dag); /** * Write a lattice to disk. * * @return 0 for success, <0 on failure. */ POCKETSPHINX_EXPORT int ps_lattice_write(ps_lattice_t *dag, char const *filename); /** * Write a lattice to disk in HTK format * * @return 0 for success, <0 on failure. */ POCKETSPHINX_EXPORT int ps_lattice_write_htk(ps_lattice_t *dag, char const *filename); /** * Get the log-math computation object for this lattice * * @return The log-math object for this lattice. The lattice retains * ownership of this pointer, so you should not attempt to * free it manually. Use logmath_retain() if you wish to * reuse it elsewhere. */ POCKETSPHINX_EXPORT logmath_t *ps_lattice_get_logmath(ps_lattice_t *dag); /** * Start iterating over nodes in the lattice. * * @note No particular order of traversal is guaranteed, and you * should not depend on this. * * @param dag Lattice to iterate over. * @return Iterator over lattice nodes. */ POCKETSPHINX_EXPORT ps_latnode_iter_t *ps_latnode_iter(ps_lattice_t *dag); /** * Move to next node in iteration. * @param itor Node iterator. * @return Updated node iterator, or NULL if finished */ POCKETSPHINX_EXPORT ps_latnode_iter_t *ps_latnode_iter_next(ps_latnode_iter_t *itor); /** * Stop iterating over nodes. * @param itor Node iterator. */ POCKETSPHINX_EXPORT void ps_latnode_iter_free(ps_latnode_iter_t *itor); /** * Get node from iterator. */ POCKETSPHINX_EXPORT ps_latnode_t *ps_latnode_iter_node(ps_latnode_iter_t *itor); /** * Get start and end time range for a node. * * @param node Node inquired about. * @param out_fef Output: End frame of first exit from this node. * @param out_lef Output: End frame of last exit from this node. * @return Start frame for all edges exiting this node. */ POCKETSPHINX_EXPORT int ps_latnode_times(ps_latnode_t *node, int16 *out_fef, int16 *out_lef); /** * Get word string for this node. * * @param dag Lattice to which node belongs. * @param node Node inquired about. * @return Word string for this node (possibly a pronunciation variant). */ POCKETSPHINX_EXPORT char const *ps_latnode_word(ps_lattice_t *dag, ps_latnode_t *node); /** * Get base word string for this node. * * @param dag Lattice to which node belongs. * @param node Node inquired about. * @return Base word string for this node. */ POCKETSPHINX_EXPORT char const *ps_latnode_baseword(ps_lattice_t *dag, ps_latnode_t *node); /** * Iterate over exits from this node. * * @param node Node inquired about. * @return Iterator over exit links from this node. */ POCKETSPHINX_EXPORT ps_latlink_iter_t *ps_latnode_exits(ps_latnode_t *node); /** * Iterate over entries to this node. * * @param node Node inquired about. * @return Iterator over entry links to this node. */ POCKETSPHINX_EXPORT ps_latlink_iter_t *ps_latnode_entries(ps_latnode_t *node); /** * Get best posterior probability and associated acoustic score from a lattice node. * * @param dag Lattice to which node belongs. * @param node Node inquired about. * @param out_link Output: exit link with highest posterior probability * @return Posterior probability of the best link exiting this node. * Log is expressed in the log-base used in the decoder. To * convert to linear floating-point, use * logmath_exp(ps_lattice_get_logmath(), pprob). */ POCKETSPHINX_EXPORT int32 ps_latnode_prob(ps_lattice_t *dag, ps_latnode_t *node, ps_latlink_t **out_link); /** * Get next link from a lattice link iterator. * * @param itor Iterator. * @return Updated iterator, or NULL if finished. */ POCKETSPHINX_EXPORT ps_latlink_iter_t *ps_latlink_iter_next(ps_latlink_iter_t *itor); /** * Stop iterating over links. * @param itor Link iterator. */ POCKETSPHINX_EXPORT void ps_latlink_iter_free(ps_latlink_iter_t *itor); /** * Get link from iterator. */ POCKETSPHINX_EXPORT ps_latlink_t *ps_latlink_iter_link(ps_latlink_iter_t *itor); /** * Get start and end times from a lattice link. * * @note these are inclusive - i.e. the last frame of * this word is ef, not ef-1. * * @param link Link inquired about. * @param out_sf Output: (optional) start frame of this link. * @return End frame of this link. */ POCKETSPHINX_EXPORT int ps_latlink_times(ps_latlink_t *link, int16 *out_sf); /** * Get destination and source nodes from a lattice link * * @param link Link inquired about * @param out_src Output: (optional) source node. * @return destination node */ POCKETSPHINX_EXPORT ps_latnode_t *ps_latlink_nodes(ps_latlink_t *link, ps_latnode_t **out_src); /** * Get word string from a lattice link. * * @param dag Lattice to which node belongs. * @param link Link inquired about * @return Word string for this link (possibly a pronunciation variant). */ POCKETSPHINX_EXPORT char const *ps_latlink_word(ps_lattice_t *dag, ps_latlink_t *link); /** * Get base word string from a lattice link. * * @param dag Lattice to which node belongs. * @param link Link inquired about * @return Base word string for this link */ POCKETSPHINX_EXPORT char const *ps_latlink_baseword(ps_lattice_t *dag, ps_latlink_t *link); /** * Get predecessor link in best path. * * @param link Link inquired about * @return Best previous link from bestpath search, if any. Otherwise NULL */ POCKETSPHINX_EXPORT ps_latlink_t *ps_latlink_pred(ps_latlink_t *link); /** * Get acoustic score and posterior probability from a lattice link. * * @param dag Lattice to which node belongs. * @param link Link inquired about * @param out_ascr Output: (optional) acoustic score. * @return Posterior probability for this link. Log is expressed in * the log-base used in the decoder. To convert to linear * floating-point, use logmath_exp(ps_lattice_get_logmath(), pprob). */ POCKETSPHINX_EXPORT int32 ps_latlink_prob(ps_lattice_t *dag, ps_latlink_t *link, int32 *out_ascr); /** * Create a directed link between "from" and "to" nodes, but if a link already exists, * choose one with the best link_scr. */ POCKETSPHINX_EXPORT void ps_lattice_link(ps_lattice_t *dag, ps_latnode_t *from, ps_latnode_t *to, int32 score, int32 ef); /** * Start a forward traversal of edges in a word graph. * * @note A keen eye will notice an inconsistency in this API versus * other types of iterators in PocketSphinx. The reason for this is * that the traversal algorithm is much more efficient when it is able * to modify the lattice structure. Therefore, to avoid giving the * impression that multiple traversals are possible at once, no * separate iterator structure is provided. * * @param dag Lattice to be traversed. * @param start Start node (source) of traversal. * @param end End node (goal) of traversal. * @return First link in traversal. */ POCKETSPHINX_EXPORT ps_latlink_t *ps_lattice_traverse_edges(ps_lattice_t *dag, ps_latnode_t *start, ps_latnode_t *end); /** * Get the next link in forward traversal. * * @param dag Lattice to be traversed. * @param end End node (goal) of traversal. * @return Next link in traversal. */ POCKETSPHINX_EXPORT ps_latlink_t *ps_lattice_traverse_next(ps_lattice_t *dag, ps_latnode_t *end); /** * Start a reverse traversal of edges in a word graph. * * @note See ps_lattice_traverse_edges() for why this API is the way it is. * * @param dag Lattice to be traversed. * @param start Start node (goal) of traversal. * @param end End node (source) of traversal. * @return First link in traversal. */ POCKETSPHINX_EXPORT ps_latlink_t *ps_lattice_reverse_edges(ps_lattice_t *dag, ps_latnode_t *start, ps_latnode_t *end); /** * Get the next link in reverse traversal. * * @param dag Lattice to be traversed. * @param start Start node (goal) of traversal. * @return Next link in traversal. */ POCKETSPHINX_EXPORT ps_latlink_t *ps_lattice_reverse_next(ps_lattice_t *dag, ps_latnode_t *start); /** * Do N-Gram based best-path search on a word graph. * * This function calculates both the best path as well as the forward * probability used in confidence estimation. * * @return Final link in best path, NULL on error. */ POCKETSPHINX_EXPORT ps_latlink_t *ps_lattice_bestpath(ps_lattice_t *dag, ngram_model_t *lmset, float32 lwf, float32 ascale); /** * Calculate link posterior probabilities on a word graph. * * This function assumes that bestpath search has already been done. * * @return Posterior probability of the utterance as a whole. */ POCKETSPHINX_EXPORT int32 ps_lattice_posterior(ps_lattice_t *dag, ngram_model_t *lmset, float32 ascale); /** * Prune all links (and associated nodes) below a certain posterior probability. * * This function assumes that ps_lattice_posterior() has already been called. * * @param beam Minimum posterior probability for links. This is * expressed in the log-base used in the decoder. To convert * from linear floating-point, use * logmath_log(ps_lattice_get_logmath(), prob). * @return number of arcs removed. */ POCKETSPHINX_EXPORT int32 ps_lattice_posterior_prune(ps_lattice_t *dag, int32 beam); #ifdef NOT_IMPLEMENTED_YET /** * Expand lattice using an N-gram language model. * * This function expands the lattice such that each node represents a * unique N-gram history, and adds language model scores to the links. */ POCKETSPHINX_EXPORT int32 ps_lattice_ngram_expand(ps_lattice_t *dag, ngram_model_t *lm); #endif /** * Get the number of frames in the lattice. * * @param dag The lattice in question. * @return Number of frames in this lattice. */ POCKETSPHINX_EXPORT int ps_lattice_n_frames(ps_lattice_t *dag); #endif /* __PS_LATTICE_H__ */ pocketsphinx-5prealpha/include/pocketsphinx_export.h0000664000175000017500000000101012504317077020311 00000000000000#ifndef __POCKETSPHINX_EXPORT_H__ #define __POCKETSPHINX_EXPORT_H__ /* Win32/WinCE DLL gunk */ #if (defined(_WIN32) || defined(_WIN32_WCE)) && !defined(_WIN32_WP) && !defined(__MINGW32__) && !defined(__CYGWIN__) && !defined(__WINSCW__) && !defined(__SYMBIAN32__) #ifdef POCKETSPHINX_EXPORTS /* Visual Studio */ #define POCKETSPHINX_EXPORT __declspec(dllexport) #else #define POCKETSPHINX_EXPORT __declspec(dllimport) #endif #else /* !_WIN32 */ #define POCKETSPHINX_EXPORT #endif #endif /* __POCKETSPHINX_EXPORT_H__ */ pocketsphinx-5prealpha/include/ps_search.h0000664000175000017500000002116712533621347016157 00000000000000/* -*- c-basic-offset:4; indent-tabs-mode: nil -*- */ /* ==================================================================== * Copyright (c) 2014 Alpha Cephei 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 ALPHA CEPHEI 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 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 ps_search.h User can configure several "search" objects with * different grammars and langauge models and switch them in runtime to * provide interactive experience for the user. * * There are different possible search modes: * *

* * Each search has a name and can be referenced by a name, names are * application-specific. The function ps_set_search allows to activate * the search previously added by a name. Only single search can be * activated at time. * * To add the search one needs to point to the grammar/language model * describing the search. The location of the grammar is specific to the * application. * * The exact design of a searches depends on your application. For * example, you might want to listen for activation keyword first and once * keyword is recognized switch to ngram search to recognize actual * command. Once you recognized the command you can switch to grammar * search to recognize the confirmation and then switch back to keyword listening * mode to wait for another command. * * If only a simple recognition is required it is sufficient to add a single search or * just configure the required mode with configuration options. */ #ifndef __PS_SEARCH_H__ #define __PS_SEARCH_H__ #ifdef __cplusplus extern "C" { #endif #include #include /** * PocketSphinx search iterator. */ typedef struct ps_search_iter_s ps_search_iter_t; /** * Actives search with the provided name. * * Activates search with the provided name. The search must be added before * using either ps_set_fsg(), ps_set_lm() or ps_set_kws(). * * @return 0 on success, -1 on failure */ POCKETSPHINX_EXPORT int ps_set_search(ps_decoder_t *ps, const char *name); /** * Returns name of curent search in decoder * * @see ps_set_search */ POCKETSPHINX_EXPORT const char* ps_get_search(ps_decoder_t *ps); /** * Unsets the search and releases related resources. * * Unsets the search previously added with * using either ps_set_fsg(), ps_set_lm() or ps_set_kws(). * * @see ps_set_fsg * @see ps_set_lm * @see ps_set_kws */ POCKETSPHINX_EXPORT int ps_unset_search(ps_decoder_t *ps, const char *name); /** * Returns iterator over current searches * * @see ps_set_search */ POCKETSPHINX_EXPORT ps_search_iter_t *ps_search_iter(ps_decoder_t *ps); /** * Updates search iterator to point to the next position. * * This function automatically frees the iterator object upon reaching * the final entry. * @see ps_set_search */ POCKETSPHINX_EXPORT ps_search_iter_t *ps_search_iter_next(ps_search_iter_t *itor); /** * Retrieves the name of the search the iterator points to. * * @see ps_set_search */ POCKETSPHINX_EXPORT const char* ps_search_iter_val(ps_search_iter_t *itor); /** * Delete an unfinished search iterator * * @see ps_set_search */ POCKETSPHINX_EXPORT void ps_search_iter_free(ps_search_iter_t *itor); /** * Updates search iterator to point to the next position. * * This function automatically frees the iterator object upon reaching * the final entry. * @see ps_set_search */ POCKETSPHINX_EXPORT const char* ps_search_iter_val(ps_search_iter_t *itor); /** * Get the language model set object for this decoder. * * If N-Gram decoding is not enabled, this will return NULL. You will * need to enable it using ps_set_lmset(). * * @return The language model set object for this decoder. The * decoder retains ownership of this pointer, so you should * not attempt to free it manually. Use ngram_model_retain() * if you wish to reuse it elsewhere. */ POCKETSPHINX_EXPORT ngram_model_t *ps_get_lm(ps_decoder_t *ps, const char *name); /** * Adds new search based on N-gram language model. * * Associates N-gram search with the provided name. The search can be activated * using ps_set_search(). * * @see ps_set_search. */ POCKETSPHINX_EXPORT int ps_set_lm(ps_decoder_t *ps, const char *name, ngram_model_t *lm); /** * Adds new search based on N-gram language model. * * Convenient method to load N-gram model and create a search. * * @see ps_set_lm */ POCKETSPHINX_EXPORT int ps_set_lm_file(ps_decoder_t *ps, const char *name, const char *path); /** * Get the finite-state grammar set object for this decoder. * * If FSG decoding is not enabled, this returns NULL. Call * ps_set_fsgset() to enable it. * * @return The current FSG set object for this decoder, or * NULL if none is available. */ POCKETSPHINX_EXPORT fsg_model_t *ps_get_fsg(ps_decoder_t *ps, const char *name); /** * Adds new search based on finite state grammar. * * Associates FSG search with the provided name. The search can be activated * using ps_set_search(). * * @see ps_set_search */ POCKETSPHINX_EXPORT int ps_set_fsg(ps_decoder_t *ps, const char *name, fsg_model_t *fsg); /** * Adds new search using JSGF model. * * Convenient method to load JSGF model and create a search. * * @see ps_set_fsg */ POCKETSPHINX_EXPORT int ps_set_jsgf_file(ps_decoder_t *ps, const char *name, const char *path); /** * Adds new search using JSGF model. * * Convenience method to parse JSGF model from string and create a search. * * @see ps_set_fsg */ POCKETSPHINX_EXPORT int ps_set_jsgf_string(ps_decoder_t *ps, const char *name, const char *jsgf_string); /** * Get the current Key phrase to spot * * If KWS is not enabled, this returns NULL. Call * ps_update_kws() to enable it. * * @return The current keyphrase to spot */ POCKETSPHINX_EXPORT const char* ps_get_kws(ps_decoder_t *ps, const char *name); /** * Adds keywords from a file to spotting * * Associates KWS search with the provided name. The search can be activated * using ps_set_search(). * * @see ps_set_search */ POCKETSPHINX_EXPORT int ps_set_kws(ps_decoder_t *ps, const char *name, const char *keyfile); /** * Adds new keyword to spot * * Associates KWS search with the provided name. The search can be activated * using ps_set_search(). * * @see ps_set_search */ POCKETSPHINX_EXPORT int ps_set_keyphrase(ps_decoder_t *ps, const char *name, const char *keyphrase); /** * Adds new search based on phone N-gram language model. * * Associates N-gram search with the provided name. The search can be activated * using ps_set_search(). * * @see ps_set_search. */ POCKETSPHINX_EXPORT int ps_set_allphone(ps_decoder_t *ps, const char *name, ngram_model_t *lm); /** * Adds new search based on phone N-gram language model. * * Convenient method to load N-gram model and create a search. * * @see ps_set_allphone */ POCKETSPHINX_EXPORT int ps_set_allphone_file(ps_decoder_t *ps, const char *name, const char *path); #ifdef __cplusplus } #endif #endif /* __PS_SEARCH_H__ */ pocketsphinx-5prealpha/include/pocketsphinx.h0000664000175000017500000005240612535637372016736 00000000000000/* -*- c-basic-offset:4; indent-tabs-mode: nil -*- */ /* ==================================================================== * Copyright (c) 1999-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 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 pocketsphinx.h Main header file for the PocketSphinx decoder. */ #ifndef __POCKETSPHINX_H__ #define __POCKETSPHINX_H__ #ifdef __cplusplus extern "C" { #endif #if 0 } #endif /* System headers we need. */ #include /* SphinxBase headers we need. */ #include #include #include #include /* PocketSphinx headers (not many of them!) */ #include #include #include #include /** * PocketSphinx speech recognizer object. */ typedef struct ps_decoder_s ps_decoder_t; #include /** * PocketSphinx N-best hypothesis iterator object. */ typedef struct ps_astar_s ps_nbest_t; /** * PocketSphinx segmentation iterator object. */ typedef struct ps_seg_s ps_seg_t; /** * Sets default grammar and language model if they are not set explicitly and * are present in the default search path. */ POCKETSPHINX_EXPORT void ps_default_search_args(cmd_ln_t *); /** * Initialize the decoder from a configuration object. * * @note The decoder retains ownership of the pointer * config, so if you are not going to use it * elsewere, you can free it. * * @param config a command-line structure, as created by * cmd_ln_parse_r() or cmd_ln_parse_file_r(). */ POCKETSPHINX_EXPORT ps_decoder_t *ps_init(cmd_ln_t *config); /** * Reinitialize the decoder with updated configuration. * * This function allows you to switch the acoustic model, dictionary, * or other configuration without creating an entirely new decoding * object. * * @note The decoder retains ownership of the pointer * config, so you must not attempt to free it manually. * If you wish to reuse it elsewhere, call cmd_ln_retain() on it. * * @param ps Decoder. * @param config An optional new configuration to use. If this is * NULL, the previous configuration will be reloaded, * with any changes applied. * @return 0 for success, <0 for failure. */ POCKETSPHINX_EXPORT int ps_reinit(ps_decoder_t *ps, cmd_ln_t *config); /** * Returns the argument definitions used in ps_init(). * * This is here to avoid exporting global data, which is problematic * on Win32 and Symbian (and possibly other platforms). */ POCKETSPHINX_EXPORT arg_t const *ps_args(void); /** * Retain a pointer to the decoder. * * This increments the reference count on the decoder, allowing it to * be shared between multiple parent objects. In general you will not * need to use this function, ever. It is mainly here for the * convenience of scripting language bindings. * * @return pointer to retained decoder. */ POCKETSPHINX_EXPORT ps_decoder_t *ps_retain(ps_decoder_t *ps); /** * Finalize the decoder. * * This releases all resources associated with the decoder, including * any language models or grammars which have been added to it, and * the initial configuration object passed to ps_init(). * * @param ps Decoder to be freed. * @return New reference count (0 if freed). */ POCKETSPHINX_EXPORT int ps_free(ps_decoder_t *ps); /** * Get the configuration object for this decoder. * * @return The configuration object for this decoder. The decoder * retains ownership of this pointer, so you should not * attempt to free it manually. Use cmd_ln_retain() if you * wish to reuse it elsewhere. */ POCKETSPHINX_EXPORT cmd_ln_t *ps_get_config(ps_decoder_t *ps); /** * Get the log-math computation object for this decoder. * * @return The log-math object for this decoder. The decoder retains * ownership of this pointer, so you should not attempt to * free it manually. Use logmath_retain() if you wish to * reuse it elsewhere. */ POCKETSPHINX_EXPORT logmath_t *ps_get_logmath(ps_decoder_t *ps); /** * Get the feature extraction object for this decoder. * * @return The feature extraction object for this decoder. The * decoder retains ownership of this pointer, so you should * not attempt to free it manually. Use fe_retain() if you * wish to reuse it elsewhere. */ POCKETSPHINX_EXPORT fe_t *ps_get_fe(ps_decoder_t *ps); /** * Get the dynamic feature computation object for this decoder. * * @return The dynamic feature computation object for this decoder. The * decoder retains ownership of this pointer, so you should * not attempt to free it manually. Use feat_retain() if you * wish to reuse it elsewhere. */ POCKETSPHINX_EXPORT feat_t *ps_get_feat(ps_decoder_t *ps); /** * Adapt current acoustic model using a linear transform. * * @param mllr The new transform to use, or NULL to update the existing * transform. The decoder retains ownership of this pointer, * so you should not attempt to free it manually. Use * ps_mllr_retain() if you wish to reuse it * elsewhere. * @return The updated transform object for this decoder, or * NULL on failure. */ POCKETSPHINX_EXPORT ps_mllr_t *ps_update_mllr(ps_decoder_t *ps, ps_mllr_t *mllr); /** * Reload the pronunciation dictionary from a file. * * This function replaces the current pronunciation dictionary with * the one stored in dictfile. This also causes the active search * module(s) to be reinitialized, in the same manner as calling * ps_add_word() with update=TRUE. * * @param dictfile Path to dictionary file to load. * @param fdictfile Path to filler dictionary to load, or NULL to keep * the existing filler dictionary. * @param format Format of the dictionary file, or NULL to determine * automatically (currently unused,should be NULL) */ POCKETSPHINX_EXPORT int ps_load_dict(ps_decoder_t *ps, char const *dictfile, char const *fdictfile, char const *format); /** * Dump the current pronunciation dictionary to a file. * * This function dumps the current pronunciation dictionary to a tex * * @param dictfile Path to file where dictionary will be written. * @param format Format of the dictionary file, or NULL for the * default (text) format (currently unused, should be NULL) */ POCKETSPHINX_EXPORT int ps_save_dict(ps_decoder_t *ps, char const *dictfile, char const *format); /** * Add a word to the pronunciation dictionary. * * This function adds a word to the pronunciation dictionary and the * current language model (but, obviously, not to the current FSG if * FSG mode is enabled). If the word is already present in one or the * other, it does whatever is necessary to ensure that the word can be * recognized. * * @param word Word string to add. * @param phones Whitespace-separated list of phoneme strings * describing pronunciation of word. * @param update If TRUE, update the search module (whichever one is * currently active) to recognize the newly added word. * If adding multiple words, it is more efficient to * pass FALSE here in all but the last word. * @return The internal ID (>= 0) of the newly added word, or <0 on * failure. */ POCKETSPHINX_EXPORT int ps_add_word(ps_decoder_t *ps, char const *word, char const *phones, int update); /** * Lookup for the word in the dictionary and return phone transcription * for it. * * @param ps Pocketsphinx decoder * @param word Word to look for * * @return Whitespace-spearated phone string describing the pronunciation of the word * or NULL if word is not present in the dictionary. The string is * allocated and must be freed by the user. */ POCKETSPHINX_EXPORT char *ps_lookup_word(ps_decoder_t *ps, const char *word); /** * Decode a raw audio stream. * * No headers are recognized in this files. The configuration * parameters -samprate and -input_endian are used * to determine the sampling rate and endianness of the stream, * respectively. Audio is always assumed to be 16-bit signed PCM. * * @param ps Decoder. * @param rawfh Previously opened file stream. * @param maxsamps Maximum number of samples to read from rawfh, or -1 * to read until end-of-file. * @return Number of samples of audio. */ POCKETSPHINX_EXPORT long ps_decode_raw(ps_decoder_t *ps, FILE *rawfh, long maxsamps); /** * Decode a senone score dump file. * * @param ps Decoder * @param fh Previously opened file handle positioned at start of file. * @return Number of frames read. */ POCKETSPHINX_EXPORT int ps_decode_senscr(ps_decoder_t *ps, FILE *senfh); /** * Start processing of the stream of speech. Channel parameters like * noise-level are maintained for the stream and reused among utterances. * Times returned in segment iterators are also stream-wide. * * @return 0 for success, <0 on error. */ POCKETSPHINX_EXPORT int ps_start_stream(ps_decoder_t *ps); /** * Start utterance processing. * * This function should be called before any utterance data is passed * to the decoder. It marks the start of a new utterance and * reinitializes internal data structures. * * @param ps Decoder to be started. * @return 0 for success, <0 on error. */ POCKETSPHINX_EXPORT int ps_start_utt(ps_decoder_t *ps); /** * Decode raw audio data. * * @param ps Decoder. * @param no_search If non-zero, perform feature extraction but don't * do any recognition yet. This may be necessary if * your processor has trouble doing recognition in * real-time. * @param full_utt If non-zero, this block of data is a full utterance * worth of data. This may allow the recognizer to * produce more accurate results. * @return Number of frames of data searched, or <0 for error. */ POCKETSPHINX_EXPORT int ps_process_raw(ps_decoder_t *ps, int16 const *data, size_t n_samples, int no_search, int full_utt); /** * Decode acoustic feature data. * * @param ps Decoder. * @param no_search If non-zero, perform feature extraction but don't * do any recognition yet. This may be necessary if * your processor has trouble doing recognition in * real-time. * @param full_utt If non-zero, this block of data is a full utterance * worth of data. This may allow the recognizer to * produce more accurate results. * @return Number of frames of data searched, or <0 for error. */ POCKETSPHINX_EXPORT int ps_process_cep(ps_decoder_t *ps, mfcc_t **data, int n_frames, int no_search, int full_utt); /** * Get the number of frames of data searched. * * Note that there is a delay between this and the number of frames of * audio which have been input to the system. This is due to the fact * that acoustic features are computed using a sliding window of * audio, and dynamic features are computed over a sliding window of * acoustic features. * * @param ps Decoder. * @return Number of frames of speech data which have been recognized * so far. */ POCKETSPHINX_EXPORT int ps_get_n_frames(ps_decoder_t *ps); /** * End utterance processing. * * @param ps Decoder. * @return 0 for success, <0 on error */ POCKETSPHINX_EXPORT int ps_end_utt(ps_decoder_t *ps); /** * Get hypothesis string and path score. * * @param ps Decoder. * @param out_best_score Output: path score corresponding to returned string. * @return String containing best hypothesis at this point in * decoding. NULL if no hypothesis is available. */ POCKETSPHINX_EXPORT char const *ps_get_hyp(ps_decoder_t *ps, int32 *out_best_score); /** * Get hypothesis string and final flag. * * @param ps Decoder. * @param out_is_best_score Output: if hypothesis is reached final state in the grammar. * @return String containing best hypothesis at this point in * decoding. NULL if no hypothesis is available. */ POCKETSPHINX_EXPORT char const *ps_get_hyp_final(ps_decoder_t *ps, int32 *out_is_final); /** * Get posterior probability. * * @note Unless the -bestpath option is enabled, this function will * always return zero (corresponding to a posterior probability of * 1.0). Even if -bestpath is enabled, it will also return zero when * called on a partial result. Ongoing research into effective * confidence annotation for partial hypotheses may result in these * restrictions being lifted in future versions. * * @param ps Decoder. * @return Posterior probability of the best hypothesis. */ POCKETSPHINX_EXPORT int32 ps_get_prob(ps_decoder_t *ps); /** * Get word lattice. * * There isn't much you can do with this so far, a public API will * appear in the future. * * @param ps Decoder. * @return Word lattice object containing all hypotheses so far. NULL * if no hypotheses are available. This pointer is owned by * the decoder and you should not attempt to free it manually. * It is only valid until the next utterance, unless you use * ps_lattice_retain() to retain it. */ POCKETSPHINX_EXPORT ps_lattice_t *ps_get_lattice(ps_decoder_t *ps); /** * Get an iterator over the word segmentation for the best hypothesis. * * @param ps Decoder. * @param out_best_score Output: path score corresponding to hypothesis. * @return Iterator over the best hypothesis at this point in * decoding. NULL if no hypothesis is available. */ POCKETSPHINX_EXPORT ps_seg_t *ps_seg_iter(ps_decoder_t *ps, int32 *out_best_score); /** * Get the next segment in a word segmentation. * * @param seg Segment iterator. * @return Updated iterator with the next segment. NULL at end of * utterance (the iterator will be freed in this case). */ POCKETSPHINX_EXPORT ps_seg_t *ps_seg_next(ps_seg_t *seg); /** * Get word string from a segmentation iterator. * * @param seg Segment iterator. * @return Read-only string giving string name of this segment. This * is only valid until the next call to ps_seg_next(). */ POCKETSPHINX_EXPORT char const *ps_seg_word(ps_seg_t *seg); /** * Get inclusive start and end frames from a segmentation iterator. * * @note These frame numbers are inclusive, i.e. the end frame refers * to the last frame in which the given word or other segment was * active. Therefore, the actual duration is *out_ef - *out_sf + 1. * * @param seg Segment iterator. * @param out_sf Output: First frame index in segment. * @param out_sf Output: Last frame index in segment. */ POCKETSPHINX_EXPORT void ps_seg_frames(ps_seg_t *seg, int *out_sf, int *out_ef); /** * Get language, acoustic, and posterior probabilities from a * segmentation iterator. * * @note Unless the -bestpath option is enabled, this function will * always return zero (corresponding to a posterior probability of * 1.0). Even if -bestpath is enabled, it will also return zero when * called on a partial result. Ongoing research into effective * confidence annotation for partial hypotheses may result in these * restrictions being lifted in future versions. * * @param out_ascr Output: acoustic model score for this segment. * @param out_lscr Output: language model score for this segment. * @param out_lback Output: language model backoff mode for this * segment (i.e. the number of words used in * calculating lscr). This field is, of course, only * meaningful for N-Gram models. * @return Log posterior probability of current segment. Log is * expressed in the log-base used in the decoder. To convert * to linear floating-point, use logmath_exp(ps_get_logmath(), * pprob). */ POCKETSPHINX_EXPORT int32 ps_seg_prob(ps_seg_t *seg, int32 *out_ascr, int32 *out_lscr, int32 *out_lback); /** * Finish iterating over a word segmentation early, freeing resources. */ POCKETSPHINX_EXPORT void ps_seg_free(ps_seg_t *seg); /** * Get an iterator over the best hypotheses, optionally within a * selected region of the utterance. Iterator is empty now, it must * be advanced with ps_nbest_next first. The function may also * return a NULL which means that there is no hypothesis available for this * utterance. * * @param ps Decoder. * @param sf Start frame for N-best search (0 for whole utterance) * @param ef End frame for N-best search (-1 for whole utterance) * @param ctx1 First word of trigram context (NULL for whole utterance) * @param ctx2 First word of trigram context (NULL for whole utterance) * @return Iterator over N-best hypotheses or NULL if no hypothesis is available */ POCKETSPHINX_EXPORT ps_nbest_t *ps_nbest(ps_decoder_t *ps, int sf, int ef, char const *ctx1, char const *ctx2); /** * Move an N-best list iterator forward. * * @param nbest N-best iterator. * @return Updated N-best iterator, or NULL if no more hypotheses are * available (iterator is freed ni this case). */ POCKETSPHINX_EXPORT ps_nbest_t *ps_nbest_next(ps_nbest_t *nbest); /** * Get the hypothesis string from an N-best list iterator. * * @param nbest N-best iterator. * @param out_score Output: Path score for this hypothesis. * @return String containing next best hypothesis. */ POCKETSPHINX_EXPORT char const *ps_nbest_hyp(ps_nbest_t *nbest, int32 *out_score); /** * Get the word segmentation from an N-best list iterator. * * @param nbest N-best iterator. * @param out_score Output: Path score for this hypothesis. * @return Iterator over the next best hypothesis. */ POCKETSPHINX_EXPORT ps_seg_t *ps_nbest_seg(ps_nbest_t *nbest, int32 *out_score); /** * Finish N-best search early, releasing resources. * * @param nbest N-best iterator. */ POCKETSPHINX_EXPORT void ps_nbest_free(ps_nbest_t *nbest); /** * Get performance information for the current utterance. * * @param ps Decoder. * @param out_nspeech Output: Number of seconds of speech. * @param out_ncpu Output: Number of seconds of CPU time used. * @param out_nwall Output: Number of seconds of wall time used. */ POCKETSPHINX_EXPORT void ps_get_utt_time(ps_decoder_t *ps, double *out_nspeech, double *out_ncpu, double *out_nwall); /** * Get overall performance information. * * @param ps Decoder. * @param out_nspeech Output: Number of seconds of speech. * @param out_ncpu Output: Number of seconds of CPU time used. * @param out_nwall Output: Number of seconds of wall time used. */ POCKETSPHINX_EXPORT void ps_get_all_time(ps_decoder_t *ps, double *out_nspeech, double *out_ncpu, double *out_nwall); /** * Checks if the last feed audio buffer contained speech * * @param ps Decoder. * @return 1 if last buffer contained speech, 0 - otherwise */ POCKETSPHINX_EXPORT uint8 ps_get_in_speech(ps_decoder_t *ps); /** * Sets the limit of the raw audio data to store in decoder * to retrieve it later on ps_get_rawdata. * * @param ps Decoder * @param size bytes of the utterance to store */ POCKETSPHINX_EXPORT void ps_set_rawdata_size(ps_decoder_t *ps, int32 size); /** * Retrieves the raw data collected during utterance decoding. * * @param ps Decoder * @param buffer preallocated buffer to store the data, must be within the limit * set before * @param size size of the data collected in samples (not bytes). */ POCKETSPHINX_EXPORT void ps_get_rawdata(ps_decoder_t *ps, int16 **buffer, int32 *size); /** * @mainpage PocketSphinx API Documentation * @author David Huggins-Daines * @author Alpha Cephei Inc. * @version 5prealpha * @date July, 2015 * * @section intro_sec Introduction * * This is the API documentation for the PocketSphinx speech * recognition engine. The main API calls are documented in * . */ #ifdef __cplusplus } /* extern "C" */ #endif #endif /* __POCKETSPHINX_H__ */ pocketsphinx-5prealpha/include/Makefile.am0000664000175000017500000000025312504317077016064 00000000000000pkginclude_HEADERS = \ cmdln_macro.h \ ps_lattice.h \ ps_mllr.h \ ps_search.h \ pocketsphinx_export.h \ pocketsphinx.h pocketsphinx-5prealpha/include/Makefile.in0000664000175000017500000004147612525147724016114 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@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 = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(pkginclude_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \ $(top_srcdir)/m4/ax_python_devel.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.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac 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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgincludedir)" HEADERS = $(pkginclude_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ 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@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GST_CFLAGS = @GST_CFLAGS@ GST_LIBS = @GST_LIBS@ GST_MAJORMINOR = @GST_MAJORMINOR@ GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@ GStreamer_CFLAGS = @GStreamer_CFLAGS@ GStreamer_LIBS = @GStreamer_LIBS@ 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@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ 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_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SPHINXBASE_CFLAGS = @SPHINXBASE_CFLAGS@ SPHINXBASE_LIBS = @SPHINXBASE_LIBS@ SPHINXBASE_SWIG = @SPHINXBASE_SWIG@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ plugindir = @plugindir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ 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 = \ cmdln_macro.h \ ps_lattice.h \ ps_mllr.h \ ps_search.h \ pocketsphinx_export.h \ pocketsphinx.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) --foreign include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign 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 $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-pkgincludeHEADERS: $(pkginclude_HEADERS) @$(NORMAL_INSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \ done uninstall-pkgincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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 html-am: info: info-am info-am: install-data-am: install-pkgincludeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am 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 TAGS all all-am check check-am clean clean-generic \ clean-libtool cscopelist-am ctags ctags-am 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 tags-am 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: pocketsphinx-5prealpha/include/cmdln_macro.h0000664000175000017500000005610712546074702016471 00000000000000/* -*- 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. * * ==================================================================== * */ /* cmdln_macro.h - Command line definitions for PocketSphinx */ #ifndef __PS_CMDLN_MACRO_H__ #define __PS_CMDLN_MACRO_H__ #include #include #include /** Minimal set of command-line options for PocketSphinx. */ #define POCKETSPHINX_OPTIONS \ waveform_to_cepstral_command_line_macro(), \ cepstral_to_feature_command_line_macro(), \ POCKETSPHINX_ACMOD_OPTIONS, \ POCKETSPHINX_BEAM_OPTIONS, \ POCKETSPHINX_SEARCH_OPTIONS, \ POCKETSPHINX_DICT_OPTIONS, \ POCKETSPHINX_NGRAM_OPTIONS, \ POCKETSPHINX_FSG_OPTIONS, \ POCKETSPHINX_KWS_OPTIONS, \ POCKETSPHINX_DEBUG_OPTIONS /** Options for debugging and logging. */ #define POCKETSPHINX_DEBUG_OPTIONS \ { "-logfn", \ ARG_STRING, \ NULL, \ "File to write log messages in" }, \ { "-debug", \ ARG_INT32, \ NULL, \ "Verbosity level for debugging messages" }, \ { "-mfclogdir", \ ARG_STRING, \ NULL, \ "Directory to log feature files to" \ }, \ { "-rawlogdir", \ ARG_STRING, \ NULL, \ "Directory to log raw audio files to" }, \ { "-senlogdir", \ ARG_STRING, \ NULL, \ "Directory to log senone score files to" \ } /** Options defining beam width parameters for tuning the search. */ #define POCKETSPHINX_BEAM_OPTIONS \ { "-beam", \ ARG_FLOAT64, \ "1e-48", \ "Beam width applied to every frame in Viterbi search (smaller values mean wider beam)" }, \ { "-wbeam", \ ARG_FLOAT64, \ "7e-29", \ "Beam width applied to word exits" }, \ { "-pbeam", \ ARG_FLOAT64, \ "1e-48", \ "Beam width applied to phone transitions" }, \ { "-lpbeam", \ ARG_FLOAT64, \ "1e-40", \ "Beam width applied to last phone in words" }, \ { "-lponlybeam", \ ARG_FLOAT64, \ "7e-29", \ "Beam width applied to last phone in single-phone words" }, \ { "-fwdflatbeam", \ ARG_FLOAT64, \ "1e-64", \ "Beam width applied to every frame in second-pass flat search" }, \ { "-fwdflatwbeam", \ ARG_FLOAT64, \ "7e-29", \ "Beam width applied to word exits in second-pass flat search" }, \ { "-pl_window", \ ARG_INT32, \ "5", \ "Phoneme lookahead window size, in frames" }, \ { "-pl_beam", \ ARG_FLOAT64, \ "1e-10", \ "Beam width applied to phone loop search for lookahead" }, \ { "-pl_pbeam", \ ARG_FLOAT64, \ "1e-10", \ "Beam width applied to phone loop transitions for lookahead" }, \ { "-pl_pip", \ ARG_FLOAT32, \ "1.0", \ "Phone insertion penalty for phone loop" }, \ { "-pl_weight", \ ARG_FLOAT64, \ "3.0", \ "Weight for phoneme lookahead penalties" } \ /** Options defining other parameters for tuning the search. */ #define POCKETSPHINX_SEARCH_OPTIONS \ { "-compallsen", \ ARG_BOOLEAN, \ "no", \ "Compute all senone scores in every frame (can be faster when there are many senones)" }, \ { "-fwdtree", \ ARG_BOOLEAN, \ "yes", \ "Run forward lexicon-tree search (1st pass)" }, \ { "-fwdflat", \ ARG_BOOLEAN, \ "yes", \ "Run forward flat-lexicon search over word lattice (2nd pass)" }, \ { "-bestpath", \ ARG_BOOLEAN, \ "yes", \ "Run bestpath (Dijkstra) search over word lattice (3rd pass)" }, \ { "-backtrace", \ ARG_BOOLEAN, \ "no", \ "Print results and backtraces to log file." }, \ { "-latsize", \ ARG_INT32, \ "5000", \ "Initial backpointer table size" }, \ { "-maxwpf", \ ARG_INT32, \ "-1", \ "Maximum number of distinct word exits at each frame (or -1 for no pruning)" }, \ { "-maxhmmpf", \ ARG_INT32, \ "30000", \ "Maximum number of active HMMs to maintain at each frame (or -1 for no pruning)" }, \ { "-min_endfr", \ ARG_INT32, \ "0", \ "Nodes ignored in lattice construction if they persist for fewer than N frames" }, \ { "-fwdflatefwid", \ ARG_INT32, \ "4", \ "Minimum number of end frames for a word to be searched in fwdflat search" }, \ { "-fwdflatsfwin", \ ARG_INT32, \ "25", \ "Window of frames in lattice to search for successor words in fwdflat search " } /** Command-line options for keyword spotting */ #define POCKETSPHINX_KWS_OPTIONS \ { "-keyphrase", \ ARG_STRING, \ NULL, \ "Keyphrase to spot"}, \ { "-kws", \ ARG_STRING, \ NULL, \ "A file with keyphrases to spot, one per line"}, \ { "-kws_plp", \ ARG_FLOAT64, \ "1e-1", \ "Phone loop probability for keyword spotting" }, \ { "-kws_delay", \ ARG_INT32, \ "10", \ "Delay to wait for best detection score" }, \ { "-kws_threshold", \ ARG_FLOAT64, \ "1", \ "Threshold for p(hyp)/p(alternatives) ratio" } /** Command-line options for finite state grammars. */ #define POCKETSPHINX_FSG_OPTIONS \ { "-fsg", \ ARG_STRING, \ NULL, \ "Sphinx format finite state grammar file"}, \ { "-jsgf", \ ARG_STRING, \ NULL, \ "JSGF grammar file" }, \ { "-toprule", \ ARG_STRING, \ NULL, \ "Start rule for JSGF (first public rule is default)" }, \ { "-fsgusealtpron", \ ARG_BOOLEAN, \ "yes", \ "Add alternate pronunciations to FSG"}, \ { "-fsgusefiller", \ ARG_BOOLEAN, \ "yes", \ "Insert filler words at each state."} /** Command-line options for statistical language models. */ #define POCKETSPHINX_NGRAM_OPTIONS \ { "-allphone", \ ARG_STRING, \ NULL, \ "Perform phoneme decoding with phonetic lm" }, \ { "-allphone_ci", \ ARG_BOOLEAN, \ "no", \ "Perform phoneme decoding with phonetic lm and context-independent units only" }, \ { "-lm", \ ARG_STRING, \ NULL, \ "Word trigram language model input file" }, \ { "-lmctl", \ ARG_STRING, \ NULL, \ "Specify a set of language model\n"}, \ { "-lmname", \ ARG_STRING, \ NULL, \ "Which language model in -lmctl to use by default"}, \ { "-lw", \ ARG_FLOAT32, \ "6.5", \ "Language model probability weight" }, \ { "-fwdflatlw", \ ARG_FLOAT32, \ "8.5", \ "Language model probability weight for flat lexicon (2nd pass) decoding" }, \ { "-bestpathlw", \ ARG_FLOAT32, \ "9.5", \ "Language model probability weight for bestpath search" }, \ { "-ascale", \ ARG_FLOAT32, \ "20.0", \ "Inverse of acoustic model scale for confidence score calculation" }, \ { "-wip", \ ARG_FLOAT32, \ "0.65", \ "Word insertion penalty" }, \ { "-nwpen", \ ARG_FLOAT32, \ "1.0", \ "New word transition penalty" }, \ { "-pip", \ ARG_FLOAT32, \ "1.0", \ "Phone insertion penalty" }, \ { "-uw", \ ARG_FLOAT32, \ "1.0", \ "Unigram weight" }, \ { "-silprob", \ ARG_FLOAT32, \ "0.005", \ "Silence word transition probability" }, \ { "-fillprob", \ ARG_FLOAT32, \ "1e-8", \ "Filler word transition probability" } \ /** Command-line options for dictionaries. */ #define POCKETSPHINX_DICT_OPTIONS \ { "-dict", \ REQARG_STRING, \ NULL, \ "Main pronunciation dictionary (lexicon) input file" }, \ { "-fdict", \ ARG_STRING, \ NULL, \ "Noise word pronunciation dictionary input file" }, \ { "-dictcase", \ ARG_BOOLEAN, \ "no", \ "Dictionary is case sensitive (NOTE: case insensitivity applies to ASCII characters only)" } \ /** Command-line options for acoustic modeling */ #define POCKETSPHINX_ACMOD_OPTIONS \ { "-hmm", \ ARG_STRING, \ NULL, \ "Directory containing acoustic model files."}, \ { "-featparams", \ ARG_STRING, \ NULL, \ "File containing feature extraction parameters."}, \ { "-mdef", \ ARG_STRING, \ NULL, \ "Model definition input file" }, \ { "-senmgau", \ ARG_STRING, \ NULL, \ "Senone to codebook mapping input file (usually not needed)" }, \ { "-tmat", \ ARG_STRING, \ NULL, \ "HMM state transition matrix input file" }, \ { "-tmatfloor", \ ARG_FLOAT32, \ "0.0001", \ "HMM state transition probability floor (applied to -tmat file)" }, \ { "-mean", \ ARG_STRING, \ NULL, \ "Mixture gaussian means input file" }, \ { "-var", \ ARG_STRING, \ NULL, \ "Mixture gaussian variances input file" }, \ { "-varfloor", \ ARG_FLOAT32, \ "0.0001", \ "Mixture gaussian variance floor (applied to data from -var file)" }, \ { "-mixw", \ ARG_STRING, \ NULL, \ "Senone mixture weights input file (uncompressed)" }, \ { "-mixwfloor", \ ARG_FLOAT32, \ "0.0000001", \ "Senone mixture weights floor (applied to data from -mixw file)" }, \ { "-aw", \ ARG_INT32, \ "1", \ "Inverse weight applied to acoustic scores." }, \ { "-sendump", \ ARG_STRING, \ NULL, \ "Senone dump (compressed mixture weights) input file" }, \ { "-mllr", \ ARG_STRING, \ NULL, \ "MLLR transformation to apply to means and variances" }, \ { "-mmap", \ ARG_BOOLEAN, \ "yes", \ "Use memory-mapped I/O (if possible) for model files" }, \ { "-ds", \ ARG_INT32, \ "1", \ "Frame GMM computation downsampling ratio" }, \ { "-topn", \ ARG_INT32, \ "4", \ "Maximum number of top Gaussians to use in scoring." }, \ { "-topn_beam", \ ARG_STRING, \ "0", \ "Beam width used to determine top-N Gaussians (or a list, per-feature)" },\ { "-logbase", \ ARG_FLOAT32, \ "1.0001", \ "Base in which all log-likelihoods calculated" } #define CMDLN_EMPTY_OPTION { NULL, 0, NULL, NULL } #endif /* __PS_CMDLN_MACRO_H__ */ pocketsphinx-5prealpha/include/ps_mllr.h0000664000175000017500000000502212504317077015650 00000000000000/* -*- 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 ps_mllr.h Model-space linear transforms for speaker adaptation */ #ifndef __PS_MLLR_H__ #define __PS_MLLR_H__ /* SphinxBase headers. */ #include #include /* PocketSphinx headers. */ #include /** * Feature space linear transform object. */ typedef struct ps_mllr_s ps_mllr_t; /** * Read a speaker-adaptive linear transform from a file. */ POCKETSPHINX_EXPORT ps_mllr_t *ps_mllr_read(char const *file); /** * Retain a pointer to a linear transform. */ POCKETSPHINX_EXPORT ps_mllr_t *ps_mllr_retain(ps_mllr_t *mllr); /** * Release a pointer to a linear transform. */ POCKETSPHINX_EXPORT int ps_mllr_free(ps_mllr_t *mllr); #endif /* __PS_MLLR_H__ */ pocketsphinx-5prealpha/AUTHORS0000664000175000017500000000032212504317100013435 00000000000000Fil Alleva Robert Brennan Hsiao-wen Hon Ravishankar Mosur Eric Thayer Kevin Lenzo Alan W Black Evandro Gouvea David Huggins-Daines Alexander Solovets Vyacheslav Klimkov More! please help us get all the names. pocketsphinx-5prealpha/src/0000775000175000017500000000000012560377662013264 500000000000000pocketsphinx-5prealpha/src/gst-plugin/0000775000175000017500000000000012560377662015355 500000000000000pocketsphinx-5prealpha/src/gst-plugin/livedemo.c0000664000175000017500000000514312533616355017243 00000000000000#include #include static gboolean bus_call(GstBus * bus, GstMessage * msg, gpointer data) { GMainLoop *loop = (GMainLoop *) data; switch (GST_MESSAGE_TYPE(msg)) { case GST_MESSAGE_EOS: g_print("End of stream\n"); g_main_loop_quit(loop); break; case GST_MESSAGE_ERROR:{ gchar *debug; GError *error; gst_message_parse_error(msg, &error, &debug); g_free(debug); g_printerr("Error: %s\n", error->message); g_error_free(error); g_main_loop_quit(loop); break; } default: break; } return TRUE; } int main(int argc, char *argv[]) { GMainLoop *loop; GstElement *pipeline, *source, *decoder, *sink; GstBus *bus; guint bus_watch_id; /* Initialisation */ gst_init(&argc, &argv); loop = g_main_loop_new(NULL, FALSE); /* Check input arguments */ if (argc != 2) { g_printerr("Usage: %s \n", argv[0]); return -1; } /* Create gstreamer elements */ pipeline = gst_pipeline_new("test"); source = gst_element_factory_make("filesrc", "file-source"); decoder = gst_element_factory_make("pocketsphinx", "asr"); sink = gst_element_factory_make("fakesink", "output"); if (!pipeline || !source || !decoder || !sink) { g_printerr("One element could not be created. Exiting.\n"); return -1; } /* Set up the pipeline */ /* we set the input filename to the source element */ g_object_set(G_OBJECT(source), "location", argv[1], NULL); g_object_set(G_OBJECT(decoder), "lmctl", "test.lmctl", NULL); g_object_set(G_OBJECT(decoder), "lmname", "tidigits", NULL); g_object_set(G_OBJECT(decoder), "configured", TRUE, NULL); /* we add a message handler */ bus = gst_pipeline_get_bus(GST_PIPELINE(pipeline)); bus_watch_id = gst_bus_add_watch(bus, bus_call, loop); gst_object_unref(bus); /* we add all elements into the pipeline */ gst_bin_add_many(GST_BIN(pipeline), source, decoder, sink, NULL); /* we link the elements together */ gst_element_link_many(source, decoder, sink, NULL); gst_element_set_state(pipeline, GST_STATE_PLAYING); /* Iterate */ g_print("Running...\n"); g_main_loop_run(loop); /* Out of the main loop, clean up nicely */ g_print("Returned, stopping playback\n"); gst_element_set_state(pipeline, GST_STATE_NULL); g_print("Deleting pipeline\n"); gst_object_unref(GST_OBJECT(pipeline)); g_source_remove(bus_watch_id); g_main_loop_unref(loop); return 0; } pocketsphinx-5prealpha/src/gst-plugin/gstpocketsphinx.c0000664000175000017500000005676712551302736020711 00000000000000/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* ==================================================================== * Copyright (c) 2014 Alpha Cephei Inc. * 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. * * ==================================================================== * * Author: David Huggins-Daines */ /** * SECTION:element-pocketsphix * * The element runs the speech recohgnition on incomming audio buffers and * generates an element messages named "pocketsphinx" * for each hypothesis and one for the final result. The message's structure * contains these fields: * * * * * #GstClockTime * "timestamp": * the timestamp of the buffer that triggered the message. * * * * * #gboolean * "final": * %FALSE for intermediate messages. * * * * * #gin32 * "confidence": * posterior probability (confidence) of the result in log domain * * * * * #gchar * "hypothesis": * the recognized text * * * * * * Example pipeline * |[ * gst-launch-1.0 -m autoaudiosrc ! audioconvert ! audioresample ! pocketsphinx configured=true ! fakesink * ]| * */ #ifdef HAVE_CONFIG_H #include #endif #include #include #include #include #include "gstpocketsphinx.h" GST_DEBUG_CATEGORY_STATIC(pocketsphinx_debug); #define GST_CAT_DEFAULT pocketsphinx_debug static void gst_pocketsphinx_set_property(GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec); static void gst_pocketsphinx_get_property(GObject * object, guint prop_id, GValue * value, GParamSpec * pspec); static GstFlowReturn gst_pocketsphinx_chain(GstPad * pad, GstObject *parent, GstBuffer * buffer); static gboolean gst_pocketsphinx_event(GstPad *pad, GstObject *parent, GstEvent *event); static void gst_pocketsphinx_finalize_utt(GstPocketSphinx *ps); static void gst_pocketsphinx_finalize(GObject * gobject); enum { PROP_0, PROP_HMM_DIR, PROP_LM_FILE, PROP_LMCTL_FILE, PROP_LM_NAME, PROP_DICT_FILE, PROP_MLLR_FILE, PROP_FSG_FILE, PROP_FSG_MODEL, PROP_FWDFLAT, PROP_BESTPATH, PROP_MAXHMMPF, PROP_MAXWPF, PROP_BEAM, PROP_WBEAM, PROP_PBEAM, PROP_DSRATIO, PROP_LATDIR, PROP_DECODER, PROP_CONFIGURED }; /* * Static data. */ /* Default command line. (will go away soon and be constructed using properties) */ static char *default_argv[] = { "gst-pocketsphinx", }; static const int default_argc = sizeof(default_argv)/sizeof(default_argv[0]); static GstStaticPadTemplate sink_factory = GST_STATIC_PAD_TEMPLATE("sink", GST_PAD_SINK, GST_PAD_ALWAYS, GST_STATIC_CAPS("audio/x-raw, " "format = (string) { S16LE }, " "channels = (int) 1, " "rate = (int) 16000") ); static GstStaticPadTemplate src_factory = GST_STATIC_PAD_TEMPLATE("src", GST_PAD_SRC, GST_PAD_ALWAYS, GST_STATIC_CAPS("text/plain") ); /* * Boxing of ps_decoder_t. */ GType ps_decoder_get_type(void) { static GType ps_decoder_type = 0; if (G_UNLIKELY(ps_decoder_type == 0)) { ps_decoder_type = g_boxed_type_register_static ("PSDecoder", /* Conveniently, these should just work. */ (GBoxedCopyFunc) ps_retain, (GBoxedFreeFunc) ps_free); } return ps_decoder_type; } G_DEFINE_TYPE(GstPocketSphinx, gst_pocketsphinx, GST_TYPE_ELEMENT); static void gst_pocketsphinx_class_init(GstPocketSphinxClass * klass) { GObjectClass *gobject_class; GstElementClass *element_class;; gobject_class =(GObjectClass *) klass; element_class = (GstElementClass *)klass; gobject_class->set_property = gst_pocketsphinx_set_property; gobject_class->get_property = gst_pocketsphinx_get_property; gobject_class->finalize = gst_pocketsphinx_finalize; /* TODO: We will bridge cmd_ln.h properties to GObject * properties here somehow eventually. */ g_object_class_install_property (gobject_class, PROP_HMM_DIR, g_param_spec_string("hmm", "HMM Directory", "Directory containing acoustic model parameters", NULL, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_LM_FILE, g_param_spec_string("lm", "LM File", "Language model file", NULL, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_LMCTL_FILE, g_param_spec_string("lmctl", "LM Control File", "Language model control file (for class LMs)", NULL, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_LM_NAME, g_param_spec_string("lmname", "LM Name", "Language model name (to select LMs from lmctl)", NULL, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_FSG_FILE, g_param_spec_string("fsg", "FSG File", "Finite state grammar file", NULL, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_FSG_MODEL, g_param_spec_pointer("fsg_model", "FSG Model", "Finite state grammar object (fsg_model_t *)", G_PARAM_WRITABLE)); g_object_class_install_property (gobject_class, PROP_DICT_FILE, g_param_spec_string("dict", "Dictionary File", "Dictionary File", NULL, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_FWDFLAT, g_param_spec_boolean("fwdflat", "Flat Lexicon Search", "Enable Flat Lexicon Search", FALSE, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_BESTPATH, g_param_spec_boolean("bestpath", "Graph Search", "Enable Graph Search", FALSE, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_LATDIR, g_param_spec_string("latdir", "Lattice Directory", "Output Directory for Lattices", NULL, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_MAXHMMPF, g_param_spec_int("maxhmmpf", "Maximum HMMs per frame", "Maximum number of HMMs searched per frame", 1, 100000, 1000, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_MAXWPF, g_param_spec_int("maxwpf", "Maximum words per frame", "Maximum number of words searched per frame", 1, 100000, 10, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_BEAM, g_param_spec_double("beam", "Beam width applied to every frame in Viterbi search", "Beam width applied to every frame in Viterbi search", -1, 1, 1e-48, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_PBEAM, g_param_spec_double("pbeam", "Beam width applied to phone transitions", "Beam width applied to phone transitions", -1, 1, 1e-48, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_WBEAM, g_param_spec_double("wbeam", "Beam width applied to word exits", "Beam width applied to phone transitions", -1, 1, 7e-29, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_DSRATIO, g_param_spec_int("dsratio", "Frame downsampling ratio", "Evaluate acoustic model every N frames", 1, 10, 1, G_PARAM_READWRITE)); g_object_class_install_property (gobject_class, PROP_DECODER, g_param_spec_boxed("decoder", "Decoder object", "The underlying decoder", PS_DECODER_TYPE, G_PARAM_READABLE)); g_object_class_install_property (gobject_class, PROP_CONFIGURED, g_param_spec_boolean("configured", "Finalize configuration", "Set this to finalize configuration", FALSE, G_PARAM_READWRITE)); GST_DEBUG_CATEGORY_INIT(pocketsphinx_debug, "pocketsphinx", 0, "Automatic Speech Recognition"); gst_element_class_add_pad_template(element_class, gst_static_pad_template_get(&sink_factory)); gst_element_class_add_pad_template(element_class, gst_static_pad_template_get(&src_factory)); gst_element_class_set_static_metadata(element_class, "PocketSphinx", "Filter/Audio", "Convert speech to text", "CMUSphinx-devel "); } static void gst_pocketsphinx_set_string(GstPocketSphinx *ps, const gchar *key, const GValue *value) { if (value != NULL) { cmd_ln_set_str_r(ps->config, key, g_value_get_string(value)); } else { cmd_ln_set_str_r(ps->config, key, NULL); } } static void gst_pocketsphinx_set_int(GstPocketSphinx *ps, const gchar *key, const GValue *value) { cmd_ln_set_int32_r(ps->config, key, g_value_get_int(value)); } static void gst_pocketsphinx_set_boolean(GstPocketSphinx *ps, const gchar *key, const GValue *value) { cmd_ln_set_boolean_r(ps->config, key, g_value_get_boolean(value)); } static void gst_pocketsphinx_set_double(GstPocketSphinx *ps, const gchar *key, const GValue *value) { cmd_ln_set_float_r(ps->config, key, g_value_get_double(value)); } static void gst_pocketsphinx_set_property(GObject * object, guint prop_id, const GValue * value, GParamSpec * pspec) { GstPocketSphinx *ps = GST_POCKETSPHINX(object); switch (prop_id) { case PROP_CONFIGURED: ps_reinit(ps->ps, ps->config); break; case PROP_HMM_DIR: gst_pocketsphinx_set_string(ps, "-hmm", value); break; case PROP_LM_FILE: /* FSG and LM are mutually exclusive. */ gst_pocketsphinx_set_string(ps, "-fsg", NULL); gst_pocketsphinx_set_string(ps, "-lmctl", NULL); gst_pocketsphinx_set_string(ps, "-lm", value); break; case PROP_LMCTL_FILE: /* FSG and LM are mutually exclusive. */ gst_pocketsphinx_set_string(ps, "-fsg", NULL); gst_pocketsphinx_set_string(ps, "-lmctl", value); gst_pocketsphinx_set_string(ps, "-lm", NULL); break; case PROP_LM_NAME: gst_pocketsphinx_set_string(ps, "-fsg", NULL); gst_pocketsphinx_set_string(ps, "-lm", NULL); gst_pocketsphinx_set_string(ps, "-lmname", value); /** * Chances are that lmctl is already loaded and all * corresponding searches are configured, so we simply * try to set the search */ if (value != NULL) { ps_set_search(ps->ps, g_value_get_string(value)); } break; case PROP_DICT_FILE: gst_pocketsphinx_set_string(ps, "-dict", value); break; case PROP_MLLR_FILE: gst_pocketsphinx_set_string(ps, "-mllr", value); break; case PROP_FSG_MODEL: { fsg_model_t *fsg = g_value_get_pointer(value); const char *name = fsg_model_name(fsg); ps_set_fsg(ps->ps, name, fsg); ps_set_search(ps->ps, name); } break; case PROP_FSG_FILE: /* FSG and LM are mutually exclusive */ gst_pocketsphinx_set_string(ps, "-lm", NULL); gst_pocketsphinx_set_string(ps, "-fsg", value); break; case PROP_FWDFLAT: gst_pocketsphinx_set_boolean(ps, "-fwdflat", value); break; case PROP_BESTPATH: gst_pocketsphinx_set_boolean(ps, "-bestpath", value); break; case PROP_LATDIR: if (ps->latdir) g_free(ps->latdir); ps->latdir = g_strdup(g_value_get_string(value)); break; case PROP_MAXHMMPF: gst_pocketsphinx_set_int(ps, "-maxhmmpf", value); break; case PROP_MAXWPF: gst_pocketsphinx_set_int(ps, "-maxwpf", value); break; case PROP_BEAM: gst_pocketsphinx_set_double(ps, "-beam", value); break; case PROP_PBEAM: gst_pocketsphinx_set_double(ps, "-pbeam", value); break; case PROP_WBEAM: gst_pocketsphinx_set_double(ps, "-wbeam", value); break; case PROP_DSRATIO: gst_pocketsphinx_set_int(ps, "-ds", value); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); return; } } static void gst_pocketsphinx_get_property(GObject * object, guint prop_id, GValue * value, GParamSpec * pspec) { GstPocketSphinx *ps = GST_POCKETSPHINX(object); switch (prop_id) { case PROP_DECODER: g_value_set_boxed(value, ps->ps); break; case PROP_CONFIGURED: g_value_set_boolean(value, ps->ps != NULL); break; case PROP_HMM_DIR: g_value_set_string(value, cmd_ln_str_r(ps->config, "-hmm")); break; case PROP_LM_FILE: g_value_set_string(value, cmd_ln_str_r(ps->config, "-lm")); break; case PROP_LMCTL_FILE: g_value_set_string(value, cmd_ln_str_r(ps->config, "-lmctl")); break; case PROP_LM_NAME: g_value_set_string(value, cmd_ln_str_r(ps->config, "-lmname")); break; case PROP_DICT_FILE: g_value_set_string(value, cmd_ln_str_r(ps->config, "-dict")); break; case PROP_MLLR_FILE: g_value_set_string(value, cmd_ln_str_r(ps->config, "-mllr")); break; case PROP_FSG_FILE: g_value_set_string(value, cmd_ln_str_r(ps->config, "-fsg")); break; case PROP_FWDFLAT: g_value_set_boolean(value, cmd_ln_boolean_r(ps->config, "-fwdflat")); break; case PROP_BESTPATH: g_value_set_boolean(value, cmd_ln_boolean_r(ps->config, "-bestpath")); break; case PROP_LATDIR: g_value_set_string(value, ps->latdir); break; case PROP_MAXHMMPF: g_value_set_int(value, cmd_ln_int32_r(ps->config, "-maxhmmpf")); break; case PROP_MAXWPF: g_value_set_int(value, cmd_ln_int32_r(ps->config, "-maxwpf")); break; case PROP_BEAM: g_value_set_double(value, cmd_ln_float_r(ps->config, "-beam")); break; case PROP_PBEAM: g_value_set_double(value, cmd_ln_float_r(ps->config, "-pbeam")); break; case PROP_WBEAM: g_value_set_double(value, cmd_ln_float_r(ps->config, "-wbeam")); break; case PROP_DSRATIO: g_value_set_int(value, cmd_ln_int32_r(ps->config, "-ds")); break; default: G_OBJECT_WARN_INVALID_PROPERTY_ID(object, prop_id, pspec); break; } } static void gst_pocketsphinx_finalize(GObject * gobject) { GstPocketSphinx *ps = GST_POCKETSPHINX(gobject); ps_free(ps->ps); cmd_ln_free_r(ps->config); g_free(ps->last_result); G_OBJECT_CLASS(gst_pocketsphinx_parent_class)->finalize(gobject); } static void gst_pocketsphinx_init(GstPocketSphinx * ps) { ps->sinkpad = gst_pad_new_from_static_template(&sink_factory, "sink"); ps->srcpad = gst_pad_new_from_static_template(&src_factory, "src"); /* Parse default command-line options. */ ps->config = cmd_ln_parse_r(NULL, ps_args(), default_argc, default_argv, FALSE); ps_default_search_args(ps->config); ps->ps = ps_init(ps->config); if (ps->ps == NULL) { GST_ELEMENT_ERROR(GST_ELEMENT(ps), LIBRARY, INIT, ("Failed to initialize PocketSphinx"), ("Failed to initialize PocketSphinx")); } /* Set up pads. */ gst_element_add_pad(GST_ELEMENT(ps), ps->sinkpad); gst_pad_set_chain_function(ps->sinkpad, gst_pocketsphinx_chain); gst_pad_set_event_function(ps->sinkpad, gst_pocketsphinx_event); gst_pad_use_fixed_caps(ps->sinkpad); gst_element_add_pad(GST_ELEMENT(ps), ps->srcpad); gst_pad_use_fixed_caps(ps->srcpad); /* Initialize time. */ ps->last_result_time = 0; ps->last_result = NULL; } static void gst_pocketsphinx_post_message(GstPocketSphinx *ps, gboolean final, GstClockTime timestamp, gint32 prob, const gchar *hyp) { GstStructure *s = gst_structure_new ("pocketsphinx", "timestamp", G_TYPE_UINT64, timestamp, "final", G_TYPE_BOOLEAN, final, "confidence", G_TYPE_LONG, prob, "hypothesis", G_TYPE_STRING, hyp, NULL); gst_element_post_message (GST_ELEMENT (ps), gst_message_new_element (GST_OBJECT (ps), s)); } static GstFlowReturn gst_pocketsphinx_chain(GstPad * pad, GstObject *parent, GstBuffer * buffer) { GstPocketSphinx *ps; GstMapInfo info; gboolean in_speech; ps = GST_POCKETSPHINX(parent); /* Start an utterance for the first buffer we get */ if (!ps->listening_started) { ps->listening_started = TRUE; ps->utt_started = FALSE; ps_start_utt(ps->ps); } gst_buffer_map (buffer, &info, GST_MAP_READ); ps_process_raw(ps->ps, (short*) info.data, info.size / sizeof(short), FALSE, FALSE); gst_buffer_unmap (buffer, &info); in_speech = ps_get_in_speech(ps->ps); if (in_speech && !ps->utt_started) { ps->utt_started = TRUE; } if (!in_speech && ps->utt_started) { gst_pocketsphinx_finalize_utt(ps); } else if (ps->last_result_time == 0 /* Get a partial result every now and then, see if it is different. */ /* Check every 100 milliseconds. */ || (GST_BUFFER_TIMESTAMP(buffer) - ps->last_result_time) > 100*10*1000) { int32 score; char const *hyp; hyp = ps_get_hyp(ps->ps, &score); ps->last_result_time = GST_BUFFER_TIMESTAMP(buffer); if (hyp && strlen(hyp) > 0) { if (ps->last_result == NULL || 0 != strcmp(ps->last_result, hyp)) { g_free(ps->last_result); ps->last_result = g_strdup(hyp); gst_pocketsphinx_post_message(ps, FALSE, ps->last_result_time, ps_get_prob(ps->ps), hyp); } } } gst_buffer_unref(buffer); return GST_FLOW_OK; } static void gst_pocketsphinx_finalize_utt(GstPocketSphinx *ps) { GstBuffer *buffer; char const *hyp; int32 score; hyp = NULL; if (!ps->listening_started || !ps->utt_started) return; ps_end_utt(ps->ps); ps->listening_started = FALSE; hyp = ps_get_hyp(ps->ps, &score); /* Dump the lattice if requested. */ if (ps->latdir) { char *latfile; char uttid[16]; sprintf(uttid, "%09u", ps->uttno); ps->uttno++; latfile = string_join(ps->latdir, "/", uttid, ".lat", NULL); ps_lattice_t *dag; if ((dag = ps_get_lattice(ps->ps))) ps_lattice_write(dag, latfile); ckd_free(latfile); } if (hyp) { gst_pocketsphinx_post_message(ps, TRUE, GST_CLOCK_TIME_NONE, ps_get_prob(ps->ps), hyp); buffer = gst_buffer_new_and_alloc(strlen(hyp) + 1); gst_buffer_fill(buffer, 0, hyp, strlen(hyp)); gst_buffer_fill(buffer, strlen(hyp), "\n", 1); gst_pad_push(ps->srcpad, buffer); } } static gboolean gst_pocketsphinx_event(GstPad *pad, GstObject *parent, GstEvent *event) { GstPocketSphinx *ps; ps = GST_POCKETSPHINX(parent); switch (event->type) { case GST_EVENT_EOS: { gst_pocketsphinx_finalize_utt(ps); return gst_pad_event_default(pad, parent, event); } default: return gst_pad_event_default(pad, parent, event); } } static void gst_pocketsphinx_log(void *user_data, err_lvl_t lvl, const char *fmt, ...) { static const int gst_level[ERR_MAX] = {GST_LEVEL_DEBUG, GST_LEVEL_INFO, GST_LEVEL_INFO, GST_LEVEL_WARNING, GST_LEVEL_ERROR, GST_LEVEL_ERROR}; va_list ap; va_start(ap, fmt); gst_debug_log_valist(pocketsphinx_debug, gst_level[lvl], "", "", 0, NULL, fmt, ap); va_end(ap); } static gboolean plugin_init(GstPlugin * plugin) { err_set_callback(gst_pocketsphinx_log, NULL); if (!gst_element_register(plugin, "pocketsphinx", GST_RANK_NONE, GST_TYPE_POCKETSPHINX)) return FALSE; return TRUE; } #define PACKAGE PACKAGE_NAME GST_PLUGIN_DEFINE(GST_VERSION_MAJOR, GST_VERSION_MINOR, pocketsphinx, "PocketSphinx plugin", plugin_init, PACKAGE_VERSION, "BSD", "PocketSphinx", "http://cmusphinx.sourceforge.net/") pocketsphinx-5prealpha/src/gst-plugin/livedemo.py0000664000175000017500000000651412551303105017436 00000000000000#!/usr/bin/env python # Copyright (c) 2008 Carnegie Mellon University. # # You may modify and redistribute this file under the same terms as # the CMU Sphinx system. See # http://cmusphinx.sourceforge.net/html/LICENSE for more information. import pygtk pygtk.require('2.0') import gtk import gobject import pygst pygst.require('1.0') gobject.threads_init() import gst class DemoApp(object): """GStreamer/PocketSphinx Demo Application""" def __init__(self): """Initialize a DemoApp object""" self.init_gui() self.init_gst() def init_gui(self): """Initialize the GUI components""" self.window = gtk.Window() self.window.connect("delete-event", gtk.main_quit) self.window.set_default_size(400,200) self.window.set_border_width(10) vbox = gtk.VBox() self.textbuf = gtk.TextBuffer() self.text = gtk.TextView(self.textbuf) self.text.set_wrap_mode(gtk.WRAP_WORD) vbox.pack_start(self.text) self.button = gtk.ToggleButton("Speak") self.button.connect('clicked', self.button_clicked) vbox.pack_start(self.button, False, False, 5) self.window.add(vbox) self.window.show_all() def init_gst(self): """Initialize the speech components""" self.pipeline = gst.parse_launch('gconfaudiosrc ! audioconvert ! audioresample ' + '! pocketsphinx configured=true ! fakesink') bus = self.pipeline.get_bus() bus.add_signal_watch() bus.connect('message::element', self.element_message) self.pipeline.set_state(gst.STATE_PAUSED) def element_message(self, bus, msg): """Receive element messages from the bus.""" msgtype = msg.structure.get_name() if msgtype != 'pocketsphinx': return if msg.structure['final']: self.final_result(msg.structure['hypothesis'], msg.structure['confidence']) self.pipeline.set_state(gst.STATE_PAUSED) self.button.set_active(False) elif msgtype == 'result': self.partial_result(msg.structure['hypothesis']) def partial_result(self, hyp): """Delete any previous selection, insert text and select it.""" # All this stuff appears as one single action self.textbuf.begin_user_action() self.textbuf.delete_selection(True, self.text.get_editable()) self.textbuf.insert_at_cursor(hyp) ins = self.textbuf.get_insert() iter = self.textbuf.get_iter_at_mark(ins) iter.backward_chars(len(hyp)) self.textbuf.move_mark(ins, iter) self.textbuf.end_user_action() def final_result(self, hyp, confidence): """Insert the final result.""" # All this stuff appears as one single action self.textbuf.begin_user_action() self.textbuf.delete_selection(True, self.text.get_editable()) self.textbuf.insert_at_cursor(hyp) self.textbuf.end_user_action() def button_clicked(self, button): """Handle button presses.""" if button.get_active(): button.set_label("Stop") self.pipeline.set_state(gst.STATE_PLAYING) else: button.set_label("Speak") vader = self.pipeline.get_by_name('vad') vader.set_property('silent', True) app = DemoApp() gtk.main() pocketsphinx-5prealpha/src/gst-plugin/Makefile.am0000664000175000017500000000111212533620201017300 00000000000000my_plugins = my_headers = my_files = if BUILD_GST my_plugins += libgstpocketsphinx.la endif plugin_LTLIBRARIES = $(my_plugins) libgstpocketsphinx_la_SOURCES = gstpocketsphinx.c libgstpocketsphinx_la_LIBADD = \ $(GST_LIBS) \ -lgstaudio-$(GST_MAJORMINOR) \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la \ -lsphinxbase libgstpocketsphinx_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) noinst_HEADERS = gstpocketsphinx.h AM_CFLAGS = \ -I$(top_srcdir)/include \ -I$(top_builddir)/include \ $(GST_CFLAGS) \ -DMODELDIR=\"$(pkgdatadir)/model\" EXTRA_DIST = livedemo.py livedemo.c pocketsphinx-5prealpha/src/gst-plugin/gstpocketsphinx.h0000664000175000017500000000704612504317100020665 00000000000000/* -*- 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. * * ==================================================================== * * Author: David Huggins-Daines */ #ifndef __GST_POCKETSPHINX_H__ #define __GST_POCKETSPHINX_H__ #include #include G_BEGIN_DECLS #define GST_TYPE_POCKETSPHINX \ (gst_pocketsphinx_get_type()) #define GST_POCKETSPHINX(obj) \ (G_TYPE_CHECK_INSTANCE_CAST((obj),GST_TYPE_POCKETSPHINX,GstPocketSphinx)) #define GST_POCKETSPHINX_CLASS(klass) \ (G_TYPE_CHECK_CLASS_CAST((klass),GST_TYPE_POCKETSPHINX,GstPocketSphinxClass)) #define GST_IS_POCKETSPHINX(obj) \ (G_TYPE_CHECK_INSTANCE_TYPE((obj),GST_TYPE_POCKETSPHINX)) #define GST_IS_POCKETSPHINX_CLASS(klass) \ (G_TYPE_CHECK_CLASS_TYPE((klass),GST_TYPE_POCKETSPHINX)) typedef struct _GstPocketSphinx GstPocketSphinx; typedef struct _GstPocketSphinxClass GstPocketSphinxClass; struct _GstPocketSphinx { GstElement element; GstPad *sinkpad, *srcpad; ps_decoder_t *ps; cmd_ln_t *config; gchar *latdir; /**< Output directory for word lattices. */ gboolean utt_started; gboolean listening_started; gint uttno; GstClockTime last_result_time; /**< Timestamp of last partial result. */ char *last_result; /**< String of last partial result. */ }; struct _GstPocketSphinxClass { GstElementClass parent_class; void (*partial_result) (GstElement *element, const gchar *hyp_str); void (*result) (GstElement *element, const gchar *hyp_str); }; GType gst_pocketsphinx_get_type(void); /* * Boxing of decoder. */ #define PS_DECODER_TYPE (ps_decoder_get_type()) GType ps_decoder_get_type(void); G_END_DECLS #endif /* __GST_POCKETSPHINX_H__ */ pocketsphinx-5prealpha/src/gst-plugin/Makefile.in0000664000175000017500000005236112533620203017327 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@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@ @BUILD_GST_TRUE@am__append_1 = libgstpocketsphinx.la subdir = src/gst-plugin DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \ $(top_srcdir)/m4/ax_python_devel.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.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(plugindir)" LTLIBRARIES = $(plugin_LTLIBRARIES) am__DEPENDENCIES_1 = libgstpocketsphinx_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la am_libgstpocketsphinx_la_OBJECTS = gstpocketsphinx.lo libgstpocketsphinx_la_OBJECTS = $(am_libgstpocketsphinx_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libgstpocketsphinx_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(libgstpocketsphinx_la_LDFLAGS) \ $(LDFLAGS) -o $@ @BUILD_GST_TRUE@am_libgstpocketsphinx_la_rpath = -rpath $(plugindir) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgstpocketsphinx_la_SOURCES) DIST_SOURCES = $(libgstpocketsphinx_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ 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@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GST_CFLAGS = @GST_CFLAGS@ GST_LIBS = @GST_LIBS@ GST_MAJORMINOR = @GST_MAJORMINOR@ GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@ GStreamer_CFLAGS = @GStreamer_CFLAGS@ GStreamer_LIBS = @GStreamer_LIBS@ 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@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ 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_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SPHINXBASE_CFLAGS = @SPHINXBASE_CFLAGS@ SPHINXBASE_LIBS = @SPHINXBASE_LIBS@ SPHINXBASE_SWIG = @SPHINXBASE_SWIG@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ plugindir = @plugindir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ 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@ my_plugins = $(am__append_1) my_headers = my_files = plugin_LTLIBRARIES = $(my_plugins) libgstpocketsphinx_la_SOURCES = gstpocketsphinx.c libgstpocketsphinx_la_LIBADD = \ $(GST_LIBS) \ -lgstaudio-$(GST_MAJORMINOR) \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la \ -lsphinxbase libgstpocketsphinx_la_LDFLAGS = $(GST_PLUGIN_LDFLAGS) noinst_HEADERS = gstpocketsphinx.h AM_CFLAGS = \ -I$(top_srcdir)/include \ -I$(top_builddir)/include \ $(GST_CFLAGS) \ -DMODELDIR=\"$(pkgdatadir)/model\" EXTRA_DIST = livedemo.py livedemo.c 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) --foreign src/gst-plugin/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/gst-plugin/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 $(am__aclocal_m4_deps): install-pluginLTLIBRARIES: $(plugin_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(plugindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(plugindir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(plugindir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(plugindir)"; \ } uninstall-pluginLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(plugin_LTLIBRARIES)'; test -n "$(plugindir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(plugindir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(plugindir)/$$f"; \ done clean-pluginLTLIBRARIES: -test -z "$(plugin_LTLIBRARIES)" || rm -f $(plugin_LTLIBRARIES) @list='$(plugin_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgstpocketsphinx.la: $(libgstpocketsphinx_la_OBJECTS) $(libgstpocketsphinx_la_DEPENDENCIES) $(EXTRA_libgstpocketsphinx_la_DEPENDENCIES) $(AM_V_CCLD)$(libgstpocketsphinx_la_LINK) $(am_libgstpocketsphinx_la_rpath) $(libgstpocketsphinx_la_OBJECTS) $(libgstpocketsphinx_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gstpocketsphinx.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$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: for dir in "$(DESTDIR)$(plugindir)"; 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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-pluginLTLIBRARIES \ 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 html-am: info: info-am info-am: install-data-am: install-pluginLTLIBRARIES install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am 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-pluginLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-pluginLTLIBRARIES cscopelist-am ctags \ ctags-am 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-pluginLTLIBRARIES 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 tags-am uninstall uninstall-am \ uninstall-pluginLTLIBRARIES # 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: pocketsphinx-5prealpha/src/libpocketsphinx/0000775000175000017500000000000012560377662016472 500000000000000pocketsphinx-5prealpha/src/libpocketsphinx/ngram_search.c0000664000175000017500000013773512520771215021213 00000000000000/* -*- 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_search.c N-Gram based multi-pass search ("FBS") */ /* System headers. */ #include #include /* SphinxBase headers. */ #include #include #include /* Local headers. */ #include "pocketsphinx_internal.h" #include "ps_lattice_internal.h" #include "ngram_search.h" #include "ngram_search_fwdtree.h" #include "ngram_search_fwdflat.h" static int ngram_search_start(ps_search_t *search); static int ngram_search_step(ps_search_t *search, int frame_idx); static int ngram_search_finish(ps_search_t *search); static int ngram_search_reinit(ps_search_t *search, dict_t *dict, dict2pid_t *d2p); static char const *ngram_search_hyp(ps_search_t *search, int32 *out_score, int32 *out_is_final); static int32 ngram_search_prob(ps_search_t *search); static ps_seg_t *ngram_search_seg_iter(ps_search_t *search, int32 *out_score); static ps_searchfuncs_t ngram_funcs = { /* start: */ ngram_search_start, /* step: */ ngram_search_step, /* finish: */ ngram_search_finish, /* reinit: */ ngram_search_reinit, /* free: */ ngram_search_free, /* lattice: */ ngram_search_lattice, /* hyp: */ ngram_search_hyp, /* prob: */ ngram_search_prob, /* seg_iter: */ ngram_search_seg_iter, }; static ngram_model_t *default_lm; static void ngram_search_update_widmap(ngram_search_t *ngs) { char const **words; int32 i, n_words; /* It's okay to include fillers since they won't be in the LM */ n_words = ps_search_n_words(ngs); words = (char const**)ckd_calloc(n_words, sizeof(*words)); /* This will include alternates, again, that's okay since they aren't in the LM */ for (i = 0; i < n_words; ++i) words[i] = dict_wordstr(ps_search_dict(ngs), i); ngram_model_set_map_words(ngs->lmset, words, n_words); ckd_free(words); } static void ngram_search_calc_beams(ngram_search_t *ngs) { cmd_ln_t *config; acmod_t *acmod; config = ps_search_config(ngs); acmod = ps_search_acmod(ngs); /* Log beam widths. */ ngs->beam = logmath_log(acmod->lmath, cmd_ln_float64_r(config, "-beam"))>>SENSCR_SHIFT; ngs->wbeam = logmath_log(acmod->lmath, cmd_ln_float64_r(config, "-wbeam"))>>SENSCR_SHIFT; ngs->pbeam = logmath_log(acmod->lmath, cmd_ln_float64_r(config, "-pbeam"))>>SENSCR_SHIFT; ngs->lpbeam = logmath_log(acmod->lmath, cmd_ln_float64_r(config, "-lpbeam"))>>SENSCR_SHIFT; ngs->lponlybeam = logmath_log(acmod->lmath, cmd_ln_float64_r(config, "-lponlybeam"))>>SENSCR_SHIFT; ngs->fwdflatbeam = logmath_log(acmod->lmath, cmd_ln_float64_r(config, "-fwdflatbeam"))>>SENSCR_SHIFT; ngs->fwdflatwbeam = logmath_log(acmod->lmath, cmd_ln_float64_r(config, "-fwdflatwbeam"))>>SENSCR_SHIFT; /* Absolute pruning parameters. */ ngs->maxwpf = cmd_ln_int32_r(config, "-maxwpf"); ngs->maxhmmpf = cmd_ln_int32_r(config, "-maxhmmpf"); /* Various penalties which may or may not be useful. */ ngs->wip = logmath_log(acmod->lmath, cmd_ln_float32_r(config, "-wip")) >>SENSCR_SHIFT; ngs->nwpen = logmath_log(acmod->lmath, cmd_ln_float32_r(config, "-nwpen")) >>SENSCR_SHIFT; ngs->pip = logmath_log(acmod->lmath, cmd_ln_float32_r(config, "-pip")) >>SENSCR_SHIFT; ngs->silpen = ngs->pip + (logmath_log(acmod->lmath, cmd_ln_float32_r(config, "-silprob"))>>SENSCR_SHIFT); ngs->fillpen = ngs->pip + (logmath_log(acmod->lmath, cmd_ln_float32_r(config, "-fillprob"))>>SENSCR_SHIFT); /* Language weight ratios for fwdflat and bestpath search. */ ngs->fwdflat_fwdtree_lw_ratio = cmd_ln_float32_r(config, "-fwdflatlw") / cmd_ln_float32_r(config, "-lw"); ngs->bestpath_fwdtree_lw_ratio = cmd_ln_float32_r(config, "-bestpathlw") / cmd_ln_float32_r(config, "-lw"); /* Acoustic score scale for posterior probabilities. */ ngs->ascale = 1.0 / cmd_ln_float32_r(config, "-ascale"); } ps_search_t * ngram_search_init(const char *name, ngram_model_t *lm, cmd_ln_t *config, acmod_t *acmod, dict_t *dict, dict2pid_t *d2p) { ngram_search_t *ngs; static char *lmname = "default"; /* Make the acmod's feature buffer growable if we are doing two-pass * search. */ acmod_set_grow(acmod, cmd_ln_boolean_r(config, "-fwdflat") && cmd_ln_boolean_r(config, "-fwdtree")); ngs = ckd_calloc(1, sizeof(*ngs)); ps_search_init(&ngs->base, &ngram_funcs, PS_SEARCH_TYPE_NGRAM, name, config, acmod, dict, d2p); ngs->hmmctx = hmm_context_init(bin_mdef_n_emit_state(acmod->mdef), acmod->tmat->tp, NULL, acmod->mdef->sseq); if (ngs->hmmctx == NULL) { ps_search_free(ps_search_base(ngs)); return NULL; } ngs->chan_alloc = listelem_alloc_init(sizeof(chan_t)); ngs->root_chan_alloc = listelem_alloc_init(sizeof(root_chan_t)); ngs->latnode_alloc = listelem_alloc_init(sizeof(ps_latnode_t)); /* Calculate various beam widths and such. */ ngram_search_calc_beams(ngs); /* Allocate a billion different tables for stuff. */ ngs->word_chan = ckd_calloc(dict_size(dict), sizeof(*ngs->word_chan)); ngs->word_lat_idx = ckd_calloc(dict_size(dict), sizeof(*ngs->word_lat_idx)); ngs->word_active = bitvec_alloc(dict_size(dict)); ngs->last_ltrans = ckd_calloc(dict_size(dict), sizeof(*ngs->last_ltrans)); /* FIXME: All these structures need to be made dynamic with * garbage collection. */ ngs->bp_table_size = cmd_ln_int32_r(config, "-latsize"); ngs->bp_table = ckd_calloc(ngs->bp_table_size, sizeof(*ngs->bp_table)); /* FIXME: This thing is frickin' huge. */ ngs->bscore_stack_size = ngs->bp_table_size * 20; ngs->bscore_stack = ckd_calloc(ngs->bscore_stack_size, sizeof(*ngs->bscore_stack)); ngs->n_frame_alloc = 256; ngs->bp_table_idx = ckd_calloc(ngs->n_frame_alloc + 1, sizeof(*ngs->bp_table_idx)); ++ngs->bp_table_idx; /* Make bptableidx[-1] valid */ /* Allocate active word list array */ ngs->active_word_list = ckd_calloc_2d(2, dict_size(dict), sizeof(**ngs->active_word_list)); ngs->lmset = ngram_model_set_init(config, &lm, &lmname, NULL, 1); if (!ngs->lmset) goto error_out; if (ngram_wid(ngs->lmset, S3_FINISH_WORD) == ngram_unknown_wid(ngs->lmset)) { E_ERROR("Language model/set does not contain , " "recognition will fail\n"); goto error_out; } /* Create word mappings. */ ngram_search_update_widmap(ngs); /* Initialize fwdtree, fwdflat, bestpath modules if necessary. */ if (cmd_ln_boolean_r(config, "-fwdtree")) { ngram_fwdtree_init(ngs); ngs->fwdtree = TRUE; ngs->fwdtree_perf.name = "fwdtree"; ptmr_init(&ngs->fwdtree_perf); } if (cmd_ln_boolean_r(config, "-fwdflat")) { ngram_fwdflat_init(ngs); ngs->fwdflat = TRUE; ngs->fwdflat_perf.name = "fwdflat"; ptmr_init(&ngs->fwdflat_perf); } if (cmd_ln_boolean_r(config, "-bestpath")) { ngs->bestpath = TRUE; ngs->bestpath_perf.name = "bestpath"; ptmr_init(&ngs->bestpath_perf); } return (ps_search_t *)ngs; error_out: ngram_search_free((ps_search_t *)ngs); return NULL; } static int ngram_search_reinit(ps_search_t *search, dict_t *dict, dict2pid_t *d2p) { ngram_search_t *ngs = (ngram_search_t *)search; int old_n_words; int rv = 0; /* Update the number of words. */ old_n_words = search->n_words; if (old_n_words != dict_size(dict)) { search->n_words = dict_size(dict); /* Reallocate these temporary arrays. */ ckd_free(ngs->word_lat_idx); ckd_free(ngs->word_active); ckd_free(ngs->last_ltrans); ckd_free_2d(ngs->active_word_list); ngs->word_lat_idx = ckd_calloc(search->n_words, sizeof(*ngs->word_lat_idx)); ngs->word_active = bitvec_alloc(search->n_words); ngs->last_ltrans = ckd_calloc(search->n_words, sizeof(*ngs->last_ltrans)); ngs->active_word_list = ckd_calloc_2d(2, search->n_words, sizeof(**ngs->active_word_list)); } /* Free old dict2pid, dict */ ps_search_base_reinit(search, dict, d2p); if (ngs->lmset == NULL) return 0; /* Update beam widths. */ ngram_search_calc_beams(ngs); /* Update word mappings. */ ngram_search_update_widmap(ngs); /* Now rebuild lextrees. */ if (ngs->fwdtree) { if ((rv = ngram_fwdtree_reinit(ngs)) < 0) return rv; } if (ngs->fwdflat) { if ((rv = ngram_fwdflat_reinit(ngs)) < 0) return rv; } return rv; } void ngram_search_free(ps_search_t *search) { ngram_search_t *ngs = (ngram_search_t *)search; if (ngs->fwdtree) ngram_fwdtree_deinit(ngs); if (ngs->fwdflat) ngram_fwdflat_deinit(ngs); if (ngs->bestpath) { double n_speech = (double)ngs->n_tot_frame / cmd_ln_int32_r(ps_search_config(ngs), "-frate"); E_INFO("TOTAL bestpath %.2f CPU %.3f xRT\n", ngs->bestpath_perf.t_tot_cpu, ngs->bestpath_perf.t_tot_cpu / n_speech); E_INFO("TOTAL bestpath %.2f wall %.3f xRT\n", ngs->bestpath_perf.t_tot_elapsed, ngs->bestpath_perf.t_tot_elapsed / n_speech); } ps_search_base_free(search); hmm_context_free(ngs->hmmctx); listelem_alloc_free(ngs->chan_alloc); listelem_alloc_free(ngs->root_chan_alloc); listelem_alloc_free(ngs->latnode_alloc); ngram_model_free(ngs->lmset); ckd_free(ngs->word_chan); ckd_free(ngs->word_lat_idx); bitvec_free(ngs->word_active); ckd_free(ngs->bp_table); ckd_free(ngs->bscore_stack); if (ngs->bp_table_idx != NULL) ckd_free(ngs->bp_table_idx - 1); ckd_free_2d(ngs->active_word_list); ckd_free(ngs->last_ltrans); ckd_free(ngs); } int ngram_search_mark_bptable(ngram_search_t *ngs, int frame_idx) { if (frame_idx >= ngs->n_frame_alloc) { ngs->n_frame_alloc *= 2; ngs->bp_table_idx = ckd_realloc(ngs->bp_table_idx - 1, (ngs->n_frame_alloc + 1) * sizeof(*ngs->bp_table_idx)); if (ngs->frm_wordlist) { ngs->frm_wordlist = ckd_realloc(ngs->frm_wordlist, ngs->n_frame_alloc * sizeof(*ngs->frm_wordlist)); } ++ngs->bp_table_idx; /* Make bptableidx[-1] valid */ } ngs->bp_table_idx[frame_idx] = ngs->bpidx; return ngs->bpidx; } static void set_real_wid(ngram_search_t *ngs, int32 bp) { bptbl_t *ent, *prev; assert(bp != NO_BP); ent = ngs->bp_table + bp; if (ent->bp == NO_BP) prev = NULL; else prev = ngs->bp_table + ent->bp; /* Propagate lm state for fillers, rotate it for words. */ if (dict_filler_word(ps_search_dict(ngs), ent->wid)) { if (prev != NULL) { ent->real_wid = prev->real_wid; ent->prev_real_wid = prev->prev_real_wid; } else { ent->real_wid = dict_basewid(ps_search_dict(ngs), ent->wid); ent->prev_real_wid = BAD_S3WID; } } else { ent->real_wid = dict_basewid(ps_search_dict(ngs), ent->wid); if (prev != NULL) ent->prev_real_wid = prev->real_wid; else ent->prev_real_wid = BAD_S3WID; } } #define NGRAM_HISTORY_LONG_WORD 2000 /* 20s */ void ngram_search_save_bp(ngram_search_t *ngs, int frame_idx, int32 w, int32 score, int32 path, int32 rc) { int32 bp; /* Look for an existing exit for this word in this frame. The * only reason one would exist is from a different right context * triphone, but of course that happens quite frequently. */ bp = ngs->word_lat_idx[w]; if (bp != NO_BP) { if (frame_idx - ngs->bp_table[path].frame > NGRAM_HISTORY_LONG_WORD) { E_WARN("Word '%s' survived for %d frames, potential overpruning\n", dict_wordstr(ps_search_dict(ngs), w), frame_idx - ngs->bp_table[path].frame); } /* Keep only the best scoring one, we will reconstruct the * others from the right context scores - usually the history * is not lost. */ if (ngs->bp_table[bp].score WORSE_THAN score) { assert(path != bp); /* Pathological. */ if (ngs->bp_table[bp].bp != path) { int32 bplh[2], newlh[2]; /* But, sometimes, the history *is* lost. If we wanted to * do exact language model scoring we'd have to preserve * these alternate histories. */ E_DEBUG(2,("Updating path history %d => %d frame %d\n", ngs->bp_table[bp].bp, path, frame_idx)); bplh[0] = ngs->bp_table[bp].bp == -1 ? -1 : ngs->bp_table[ngs->bp_table[bp].bp].prev_real_wid; bplh[1] = ngs->bp_table[bp].bp == -1 ? -1 : ngs->bp_table[ngs->bp_table[bp].bp].real_wid; newlh[0] = path == -1 ? -1 : ngs->bp_table[path].prev_real_wid; newlh[1] = path == -1 ? -1 : ngs->bp_table[path].real_wid; /* Actually it's worth checking how often the actual * language model state changes. */ if (bplh[0] != newlh[0] || bplh[1] != newlh[1]) { /* It's fairly rare that the actual language model * state changes, but it does happen some * times. */ E_DEBUG(1, ("Updating language model state %s,%s => %s,%s frame %d\n", dict_wordstr(ps_search_dict(ngs), bplh[0]), dict_wordstr(ps_search_dict(ngs), bplh[1]), dict_wordstr(ps_search_dict(ngs), newlh[0]), dict_wordstr(ps_search_dict(ngs), newlh[1]), frame_idx)); set_real_wid(ngs, bp); } ngs->bp_table[bp].bp = path; } ngs->bp_table[bp].score = score; } /* But do keep track of scores for all right contexts, since * we need them to determine the starting path scores for any * successors of this word exit. */ if (ngs->bp_table[bp].s_idx != -1) ngs->bscore_stack[ngs->bp_table[bp].s_idx + rc] = score; } else { int32 i, rcsize; bptbl_t *be; /* This might happen if recognition fails. */ if (ngs->bpidx == NO_BP) { E_ERROR("No entries in backpointer table!"); return; } /* Expand the backpointer tables if necessary. */ if (ngs->bpidx >= ngs->bp_table_size) { ngs->bp_table_size *= 2; ngs->bp_table = ckd_realloc(ngs->bp_table, ngs->bp_table_size * sizeof(*ngs->bp_table)); E_INFO("Resized backpointer table to %d entries\n", ngs->bp_table_size); } if (ngs->bss_head >= ngs->bscore_stack_size - bin_mdef_n_ciphone(ps_search_acmod(ngs)->mdef)) { ngs->bscore_stack_size *= 2; ngs->bscore_stack = ckd_realloc(ngs->bscore_stack, ngs->bscore_stack_size * sizeof(*ngs->bscore_stack)); E_INFO("Resized score stack to %d entries\n", ngs->bscore_stack_size); } ngs->word_lat_idx[w] = ngs->bpidx; be = &(ngs->bp_table[ngs->bpidx]); be->wid = w; be->frame = frame_idx; be->bp = path; be->score = score; be->s_idx = ngs->bss_head; be->valid = TRUE; assert(path != ngs->bpidx); /* DICT2PID */ /* Get diphone ID for final phone and number of ssids corresponding to it. */ be->last_phone = dict_last_phone(ps_search_dict(ngs),w); if (dict_is_single_phone(ps_search_dict(ngs), w)) { be->last2_phone = -1; be->s_idx = -1; rcsize = 0; } else { be->last2_phone = dict_second_last_phone(ps_search_dict(ngs),w); rcsize = dict2pid_rssid(ps_search_dict2pid(ngs), be->last_phone, be->last2_phone)->n_ssid; } /* Allocate some space on the bscore_stack for all of these triphones. */ for (i = 0; i < rcsize; ++i) ngs->bscore_stack[ngs->bss_head + i] = WORST_SCORE; if (rcsize) ngs->bscore_stack[ngs->bss_head + rc] = score; set_real_wid(ngs, ngs->bpidx); ngs->bpidx++; ngs->bss_head += rcsize; } } int ngram_search_find_exit(ngram_search_t *ngs, int frame_idx, int32 *out_best_score, int32 *out_is_final) { /* End of backpointers for this frame. */ int end_bpidx; int best_exit, bp; int32 best_score; /* No hypothesis means no exit node! */ if (ngs->n_frame == 0) return NO_BP; if (frame_idx == -1 || frame_idx >= ngs->n_frame) frame_idx = ngs->n_frame - 1; end_bpidx = ngs->bp_table_idx[frame_idx]; best_score = WORST_SCORE; best_exit = NO_BP; /* Scan back to find a frame with some backpointers in it. */ while (frame_idx >= 0 && ngs->bp_table_idx[frame_idx] == end_bpidx) --frame_idx; /* This is NOT an error, it just means there is no hypothesis yet. */ if (frame_idx < 0) return NO_BP; /* Now find the entry for OR the best scoring entry. */ assert(end_bpidx < ngs->bp_table_size); for (bp = ngs->bp_table_idx[frame_idx]; bp < end_bpidx; ++bp) { if (ngs->bp_table[bp].wid == ps_search_finish_wid(ngs) || ngs->bp_table[bp].score BETTER_THAN best_score) { best_score = ngs->bp_table[bp].score; best_exit = bp; } if (ngs->bp_table[bp].wid == ps_search_finish_wid(ngs)) break; } if (out_best_score) { *out_best_score = best_score; } if (out_is_final) { *out_is_final = (ngs->bp_table[bp].wid == ps_search_finish_wid(ngs)); } return best_exit; } char const * ngram_search_bp_hyp(ngram_search_t *ngs, int bpidx) { ps_search_t *base = ps_search_base(ngs); char *c; size_t len; int bp; if (bpidx == NO_BP) return NULL; bp = bpidx; len = 0; while (bp != NO_BP) { bptbl_t *be = &ngs->bp_table[bp]; bp = be->bp; if (dict_real_word(ps_search_dict(ngs), be->wid)) len += strlen(dict_basestr(ps_search_dict(ngs), be->wid)) + 1; } ckd_free(base->hyp_str); if (len == 0) { base->hyp_str = NULL; return base->hyp_str; } base->hyp_str = ckd_calloc(1, len); bp = bpidx; c = base->hyp_str + len - 1; while (bp != NO_BP) { bptbl_t *be = &ngs->bp_table[bp]; size_t len; bp = be->bp; if (dict_real_word(ps_search_dict(ngs), be->wid)) { len = strlen(dict_basestr(ps_search_dict(ngs), be->wid)); c -= len; memcpy(c, dict_basestr(ps_search_dict(ngs), be->wid), len); if (c > base->hyp_str) { --c; *c = ' '; } } } return base->hyp_str; } void ngram_search_alloc_all_rc(ngram_search_t *ngs, int32 w) { chan_t *hmm, *thmm; xwdssid_t *rssid; int32 i, tmatid, ciphone; /* DICT2PID */ /* Get pointer to array of triphones for final diphone. */ assert(!dict_is_single_phone(ps_search_dict(ngs), w)); ciphone = dict_last_phone(ps_search_dict(ngs),w); rssid = dict2pid_rssid(ps_search_dict2pid(ngs), ciphone, dict_second_last_phone(ps_search_dict(ngs),w)); tmatid = bin_mdef_pid2tmatid(ps_search_acmod(ngs)->mdef, ciphone); hmm = ngs->word_chan[w]; if ((hmm == NULL) || (hmm_nonmpx_ssid(&hmm->hmm) != rssid->ssid[0])) { hmm = listelem_malloc(ngs->chan_alloc); hmm->next = ngs->word_chan[w]; ngs->word_chan[w] = hmm; hmm->info.rc_id = 0; hmm->ciphone = ciphone; hmm_init(ngs->hmmctx, &hmm->hmm, FALSE, rssid->ssid[0], tmatid); E_DEBUG(3,("allocated rc_id 0 ssid %d ciphone %d lc %d word %s\n", rssid->ssid[0], hmm->ciphone, dict_second_last_phone(ps_search_dict(ngs),w), dict_wordstr(ps_search_dict(ngs),w))); } for (i = 1; i < rssid->n_ssid; ++i) { if ((hmm->next == NULL) || (hmm_nonmpx_ssid(&hmm->next->hmm) != rssid->ssid[i])) { thmm = listelem_malloc(ngs->chan_alloc); thmm->next = hmm->next; hmm->next = thmm; hmm = thmm; hmm->info.rc_id = i; hmm->ciphone = ciphone; hmm_init(ngs->hmmctx, &hmm->hmm, FALSE, rssid->ssid[i], tmatid); E_DEBUG(3,("allocated rc_id %d ssid %d ciphone %d lc %d word %s\n", i, rssid->ssid[i], hmm->ciphone, dict_second_last_phone(ps_search_dict(ngs),w), dict_wordstr(ps_search_dict(ngs),w))); } else hmm = hmm->next; } } void ngram_search_free_all_rc(ngram_search_t *ngs, int32 w) { chan_t *hmm, *thmm; for (hmm = ngs->word_chan[w]; hmm; hmm = thmm) { thmm = hmm->next; hmm_deinit(&hmm->hmm); listelem_free(ngs->chan_alloc, hmm); } ngs->word_chan[w] = NULL; } int32 ngram_search_exit_score(ngram_search_t *ngs, bptbl_t *pbe, int rcphone) { /* DICT2PID */ /* Get the mapping from right context phone ID to index in the * right context table and the bscore_stack. */ if (pbe->last2_phone == -1) { /* No right context for single phone predecessor words. */ return pbe->score; } else { xwdssid_t *rssid; /* Find the index for the last diphone of the previous word + * the first phone of the current word. */ rssid = dict2pid_rssid(ps_search_dict2pid(ngs), pbe->last_phone, pbe->last2_phone); /* This may be WORST_SCORE, which means that there was no exit * with rcphone as right context. */ return ngs->bscore_stack[pbe->s_idx + rssid->cimap[rcphone]]; } } /* * Compute acoustic and LM scores for a BPTable entry (segment). */ void ngram_compute_seg_score(ngram_search_t *ngs, bptbl_t *be, float32 lwf, int32 *out_ascr, int32 *out_lscr) { bptbl_t *pbe; int32 start_score; /* Start of utterance. */ if (be->bp == NO_BP) { *out_ascr = be->score; *out_lscr = 0; return; } /* Otherwise, calculate lscr and ascr. */ pbe = ngs->bp_table + be->bp; start_score = ngram_search_exit_score(ngs, pbe, dict_first_phone(ps_search_dict(ngs),be->wid)); assert(start_score BETTER_THAN WORST_SCORE); /* FIXME: These result in positive acoustic scores when filler words have non-filler pronunciations. That whole business is still pretty much broken but at least it doesn't segfault. */ if (be->wid == ps_search_silence_wid(ngs)) { *out_lscr = ngs->silpen; } else if (dict_filler_word(ps_search_dict(ngs), be->wid)) { *out_lscr = ngs->fillpen; } else { int32 n_used; *out_lscr = ngram_tg_score(ngs->lmset, be->real_wid, pbe->real_wid, pbe->prev_real_wid, &n_used)>>SENSCR_SHIFT; *out_lscr = *out_lscr * lwf; } *out_ascr = be->score - start_score - *out_lscr; } static int ngram_search_start(ps_search_t *search) { ngram_search_t *ngs = (ngram_search_t *)search; ngs->done = FALSE; ngram_model_flush(ngs->lmset); if (ngs->fwdtree) ngram_fwdtree_start(ngs); else if (ngs->fwdflat) ngram_fwdflat_start(ngs); else return -1; return 0; } static int ngram_search_step(ps_search_t *search, int frame_idx) { ngram_search_t *ngs = (ngram_search_t *)search; if (ngs->fwdtree) return ngram_fwdtree_search(ngs, frame_idx); else if (ngs->fwdflat) return ngram_fwdflat_search(ngs, frame_idx); else return -1; } void dump_bptable(ngram_search_t *ngs) { int i; E_INFO("Backpointer table (%d entries):\n", ngs->bpidx); for (i = 0; i < ngs->bpidx; ++i) { bptbl_t *bpe = ngs->bp_table + i; int j, rcsize; E_INFO_NOFN("%-5d %-10s start %-3d end %-3d score %-8d bp %-3d real_wid %-5d prev_real_wid %-5d", i, dict_wordstr(ps_search_dict(ngs), bpe->wid), (bpe->bp == -1 ? 0 : ngs->bp_table[bpe->bp].frame + 1), bpe->frame, bpe->score, bpe->bp, bpe->real_wid, bpe->prev_real_wid); if (bpe->last2_phone == -1) rcsize = 0; else rcsize = dict2pid_rssid(ps_search_dict2pid(ngs), bpe->last_phone, bpe->last2_phone)->n_ssid; if (rcsize) { E_INFOCONT("\tbss"); for (j = 0; j < rcsize; ++j) if (ngs->bscore_stack[bpe->s_idx + j] != WORST_SCORE) E_INFOCONT(" %d", bpe->score - ngs->bscore_stack[bpe->s_idx + j]); } E_INFOCONT("\n"); } } static int ngram_search_finish(ps_search_t *search) { ngram_search_t *ngs = (ngram_search_t *)search; ngs->n_tot_frame += ngs->n_frame; if (ngs->fwdtree) { ngram_fwdtree_finish(ngs); /* dump_bptable(ngs); */ /* Now do fwdflat search in its entirety, if requested. */ if (ngs->fwdflat) { int i; /* Rewind the acoustic model. */ if (acmod_rewind(ps_search_acmod(ngs)) < 0) return -1; /* Now redo search. */ ngram_fwdflat_start(ngs); i = 0; while (ps_search_acmod(ngs)->n_feat_frame > 0) { int nfr; if ((nfr = ngram_fwdflat_search(ngs, i)) < 0) return nfr; acmod_advance(ps_search_acmod(ngs)); ++i; } ngram_fwdflat_finish(ngs); /* And now, we should have a result... */ /* dump_bptable(ngs); */ } } else if (ngs->fwdflat) { ngram_fwdflat_finish(ngs); } /* Mark the current utterance as done. */ ngs->done = TRUE; return 0; } static ps_latlink_t * ngram_search_bestpath(ps_search_t *search, int32 *out_score, int backward) { ngram_search_t *ngs = (ngram_search_t *)search; if (search->last_link == NULL) { search->last_link = ps_lattice_bestpath(search->dag, ngs->lmset, ngs->bestpath_fwdtree_lw_ratio, ngs->ascale); if (search->last_link == NULL) return NULL; /* Also calculate betas so we can fill in the posterior * probability field in the segmentation. */ if (search->post == 0) search->post = ps_lattice_posterior(search->dag, ngs->lmset, ngs->ascale); } if (out_score) *out_score = search->last_link->path_scr + search->dag->final_node_ascr; return search->last_link; } static char const * ngram_search_hyp(ps_search_t *search, int32 *out_score, int32 *out_is_final) { ngram_search_t *ngs = (ngram_search_t *)search; /* Only do bestpath search if the utterance is complete. */ if (ngs->bestpath && ngs->done) { ps_lattice_t *dag; ps_latlink_t *link; char const *hyp; double n_speech; ptmr_reset(&ngs->bestpath_perf); ptmr_start(&ngs->bestpath_perf); if ((dag = ngram_search_lattice(search)) == NULL) return NULL; if ((link = ngram_search_bestpath(search, out_score, FALSE)) == NULL) return NULL; hyp = ps_lattice_hyp(dag, link); ptmr_stop(&ngs->bestpath_perf); n_speech = (double)dag->n_frames / cmd_ln_int32_r(ps_search_config(ngs), "-frate"); E_INFO("bestpath %.2f CPU %.3f xRT\n", ngs->bestpath_perf.t_cpu, ngs->bestpath_perf.t_cpu / n_speech); E_INFO("bestpath %.2f wall %.3f xRT\n", ngs->bestpath_perf.t_elapsed, ngs->bestpath_perf.t_elapsed / n_speech); return hyp; } else { int32 bpidx; /* fwdtree and fwdflat use same backpointer table. */ bpidx = ngram_search_find_exit(ngs, -1, out_score, out_is_final); if (bpidx != NO_BP) return ngram_search_bp_hyp(ngs, bpidx); } return NULL; } static void ngram_search_bp2itor(ps_seg_t *seg, int bp) { ngram_search_t *ngs = (ngram_search_t *)seg->search; bptbl_t *be, *pbe; be = &ngs->bp_table[bp]; pbe = be->bp == -1 ? NULL : &ngs->bp_table[be->bp]; seg->word = dict_wordstr(ps_search_dict(ngs), be->wid); seg->ef = be->frame; seg->sf = pbe ? pbe->frame + 1 : 0; seg->prob = 0; /* Bogus value... */ /* Compute acoustic and LM scores for this segment. */ if (pbe == NULL) { seg->ascr = be->score; seg->lscr = 0; seg->lback = 0; } else { int32 start_score; /* Find ending path score of previous word. */ start_score = ngram_search_exit_score(ngs, pbe, dict_first_phone(ps_search_dict(ngs), be->wid)); assert(start_score BETTER_THAN WORST_SCORE); if (be->wid == ps_search_silence_wid(ngs)) { seg->lscr = ngs->silpen; } else if (dict_filler_word(ps_search_dict(ngs), be->wid)) { seg->lscr = ngs->fillpen; } else { seg->lscr = ngram_tg_score(ngs->lmset, be->real_wid, pbe->real_wid, pbe->prev_real_wid, &seg->lback)>>SENSCR_SHIFT; seg->lscr = (int32)(seg->lscr * seg->lwf); } seg->ascr = be->score - start_score - seg->lscr; } } static void ngram_bp_seg_free(ps_seg_t *seg) { bptbl_seg_t *itor = (bptbl_seg_t *)seg; ckd_free(itor->bpidx); ckd_free(itor); } static ps_seg_t * ngram_bp_seg_next(ps_seg_t *seg) { bptbl_seg_t *itor = (bptbl_seg_t *)seg; if (++itor->cur == itor->n_bpidx) { ngram_bp_seg_free(seg); return NULL; } ngram_search_bp2itor(seg, itor->bpidx[itor->cur]); return seg; } static ps_segfuncs_t ngram_bp_segfuncs = { /* seg_next */ ngram_bp_seg_next, /* seg_free */ ngram_bp_seg_free }; static ps_seg_t * ngram_search_bp_iter(ngram_search_t *ngs, int bpidx, float32 lwf) { bptbl_seg_t *itor; int bp, cur; /* Calling this an "iterator" is a bit of a misnomer since we have * to get the entire backtrace in order to produce it. On the * other hand, all we actually need is the bptbl IDs, and we can * allocate a fixed-size array of them. */ itor = ckd_calloc(1, sizeof(*itor)); itor->base.vt = &ngram_bp_segfuncs; itor->base.search = ps_search_base(ngs); itor->base.lwf = lwf; itor->n_bpidx = 0; bp = bpidx; while (bp != NO_BP) { bptbl_t *be = &ngs->bp_table[bp]; bp = be->bp; ++itor->n_bpidx; } if (itor->n_bpidx == 0) { ckd_free(itor); return NULL; } itor->bpidx = ckd_calloc(itor->n_bpidx, sizeof(*itor->bpidx)); cur = itor->n_bpidx - 1; bp = bpidx; while (bp != NO_BP) { bptbl_t *be = &ngs->bp_table[bp]; itor->bpidx[cur] = bp; bp = be->bp; --cur; } /* Fill in relevant fields for first element. */ ngram_search_bp2itor((ps_seg_t *)itor, itor->bpidx[0]); return (ps_seg_t *)itor; } static ps_seg_t * ngram_search_seg_iter(ps_search_t *search, int32 *out_score) { ngram_search_t *ngs = (ngram_search_t *)search; /* Only do bestpath search if the utterance is done. */ if (ngs->bestpath && ngs->done) { ps_lattice_t *dag; ps_latlink_t *link; double n_speech; ps_seg_t *itor; ptmr_reset(&ngs->bestpath_perf); ptmr_start(&ngs->bestpath_perf); if ((dag = ngram_search_lattice(search)) == NULL) return NULL; if ((link = ngram_search_bestpath(search, out_score, TRUE)) == NULL) return NULL; itor = ps_lattice_seg_iter(dag, link, ngs->bestpath_fwdtree_lw_ratio); ptmr_stop(&ngs->bestpath_perf); n_speech = (double)dag->n_frames / cmd_ln_int32_r(ps_search_config(ngs), "-frate"); E_INFO("bestpath %.2f CPU %.3f xRT\n", ngs->bestpath_perf.t_cpu, ngs->bestpath_perf.t_cpu / n_speech); E_INFO("bestpath %.2f wall %.3f xRT\n", ngs->bestpath_perf.t_elapsed, ngs->bestpath_perf.t_elapsed / n_speech); return itor; } else { int32 bpidx; /* fwdtree and fwdflat use same backpointer table. */ bpidx = ngram_search_find_exit(ngs, -1, out_score, NULL); return ngram_search_bp_iter(ngs, bpidx, /* but different language weights... */ (ngs->done && ngs->fwdflat) ? ngs->fwdflat_fwdtree_lw_ratio : 1.0); } return NULL; } static int32 ngram_search_prob(ps_search_t *search) { ngram_search_t *ngs = (ngram_search_t *)search; /* Only do bestpath search if the utterance is done. */ if (ngs->bestpath && ngs->done) { ps_lattice_t *dag; ps_latlink_t *link; if ((dag = ngram_search_lattice(search)) == NULL) return 0; if ((link = ngram_search_bestpath(search, NULL, TRUE)) == NULL) return 0; return search->post; } else { /* FIXME: Give some kind of good estimate here, eventually. */ return 0; } } static void create_dag_nodes(ngram_search_t *ngs, ps_lattice_t *dag) { bptbl_t *bp_ptr; int32 i; for (i = 0, bp_ptr = ngs->bp_table; i < ngs->bpidx; ++i, ++bp_ptr) { int32 sf, ef, wid; ps_latnode_t *node; /* Skip invalid backpointers (these result from -maxwpf pruning) */ if (!bp_ptr->valid) continue; sf = (bp_ptr->bp < 0) ? 0 : ngs->bp_table[bp_ptr->bp].frame + 1; ef = bp_ptr->frame; wid = bp_ptr->wid; assert(ef < dag->n_frames); /* Skip non-final entries. */ if ((wid == ps_search_finish_wid(ngs)) && (ef < dag->n_frames - 1)) continue; /* Skip if word not in LM */ if ((!dict_filler_word(ps_search_dict(ngs), wid)) && (!ngram_model_set_known_wid(ngs->lmset, dict_basewid(ps_search_dict(ngs), wid)))) continue; /* See if bptbl entry already in lattice */ for (node = dag->nodes; node; node = node->next) { if ((node->wid == wid) && (node->sf == sf)) break; } /* For the moment, store bptbl indices in node.{fef,lef} */ if (node) node->lef = i; else { /* New node; link to head of list */ node = listelem_malloc(dag->latnode_alloc); node->wid = wid; node->sf = sf; /* This is a frame index. */ node->fef = node->lef = i; /* These are backpointer indices (argh) */ node->reachable = FALSE; node->entries = NULL; node->exits = NULL; /* NOTE: This creates the list of nodes in reverse * topological order, i.e. a node always precedes its * antecedents in this list. */ node->next = dag->nodes; dag->nodes = node; ++dag->n_nodes; } } } static ps_latnode_t * find_start_node(ngram_search_t *ngs, ps_lattice_t *dag) { ps_latnode_t *node; /* Find start node .0 */ for (node = dag->nodes; node; node = node->next) { if ((node->wid == ps_search_start_wid(ngs)) && (node->sf == 0)) break; } if (!node) { /* This is probably impossible. */ E_ERROR("Couldn't find in first frame\n"); return NULL; } return node; } static ps_latnode_t * find_end_node(ngram_search_t *ngs, ps_lattice_t *dag, float32 lwf) { ps_latnode_t *node; int32 ef, bestbp, bp, bestscore; /* Find final node .last_frame; nothing can follow this node */ for (node = dag->nodes; node; node = node->next) { int32 lef = ngs->bp_table[node->lef].frame; if ((node->wid == ps_search_finish_wid(ngs)) && (lef == dag->n_frames - 1)) break; } if (node != NULL) return node; /* It is quite likely that no exited in the last frame. So, * find the node corresponding to the best exit. */ /* Find the last frame containing a word exit. */ for (ef = dag->n_frames - 1; ef >= 0 && ngs->bp_table_idx[ef] == ngs->bpidx; --ef); if (ef < 0) { E_ERROR("Empty backpointer table: can not build DAG.\n"); return NULL; } /* Find best word exit in that frame. */ bestscore = WORST_SCORE; bestbp = NO_BP; for (bp = ngs->bp_table_idx[ef]; bp < ngs->bp_table_idx[ef + 1]; ++bp) { int32 n_used, l_scr, wid, prev_wid; wid = ngs->bp_table[bp].real_wid; prev_wid = ngs->bp_table[bp].prev_real_wid; /* Always prefer , of which there will only be one per frame. */ if (wid == ps_search_finish_wid(ngs)) { bestbp = bp; break; } l_scr = ngram_tg_score(ngs->lmset, ps_search_finish_wid(ngs), wid, prev_wid, &n_used) >>SENSCR_SHIFT; l_scr = l_scr * lwf; if (ngs->bp_table[bp].score + l_scr BETTER_THAN bestscore) { bestscore = ngs->bp_table[bp].score + l_scr; bestbp = bp; } } if (bestbp == NO_BP) { E_ERROR("No word exits found in last frame (%d), assuming no recognition\n", ef); return NULL; } E_INFO(" not found in last frame, using %s.%d instead\n", dict_basestr(ps_search_dict(ngs), ngs->bp_table[bestbp].wid), ef); /* Now find the node that corresponds to it. */ for (node = dag->nodes; node; node = node->next) { if (node->lef == bestbp) return node; } /* FIXME: This seems to happen a lot! */ E_ERROR("Failed to find DAG node corresponding to %s\n", dict_basestr(ps_search_dict(ngs), ngs->bp_table[bestbp].wid)); return NULL; } /* * Build lattice from bptable. */ ps_lattice_t * ngram_search_lattice(ps_search_t *search) { int32 i, score, ascr, lscr; ps_latnode_t *node, *from, *to; ngram_search_t *ngs; ps_lattice_t *dag; int min_endfr, nlink; float lwf; ngs = (ngram_search_t *)search; min_endfr = cmd_ln_int32_r(ps_search_config(search), "-min_endfr"); /* If the best score is WORST_SCORE or worse, there is no way to * make a lattice. */ if (ngs->best_score == WORST_SCORE || ngs->best_score WORSE_THAN WORST_SCORE) return NULL; /* Check to see if a lattice has previously been created over the * same number of frames, and reuse it if so. */ if (search->dag && search->dag->n_frames == ngs->n_frame) return search->dag; /* Nope, create a new one. */ ps_lattice_free(search->dag); search->dag = NULL; dag = ps_lattice_init_search(search, ngs->n_frame); /* Compute these such that they agree with the fwdtree language weight. */ lwf = ngs->fwdflat ? ngs->fwdflat_fwdtree_lw_ratio : 1.0; create_dag_nodes(ngs, dag); if ((dag->start = find_start_node(ngs, dag)) == NULL) goto error_out; if ((dag->end = find_end_node(ngs, dag, ngs->bestpath_fwdtree_lw_ratio)) == NULL) goto error_out; E_INFO("lattice start node %s.%d end node %s.%d\n", dict_wordstr(search->dict, dag->start->wid), dag->start->sf, dict_wordstr(search->dict, dag->end->wid), dag->end->sf); ngram_compute_seg_score(ngs, ngs->bp_table + dag->end->lef, lwf, &dag->final_node_ascr, &lscr); /* * At this point, dag->nodes is ordered such that nodes earlier in * the list can follow (in time) those later in the list, but not * vice versa (see above - also note that adjacency is purely * determined by time which is why we can make this claim). Now * create precedence links and simultanesously mark all nodes that * can reach dag->end. (All nodes are reached from dag->start * simply by definition - they were created that way). * * Note that this also means that any nodes before dag->end in the * list can be discarded, meaning that dag->end will always be * equal to dag->nodes (FIXME: except when loading from a file but * we can fix that...) */ i = 0; while (dag->nodes && dag->nodes != dag->end) { ps_latnode_t *next = dag->nodes->next; listelem_free(dag->latnode_alloc, dag->nodes); dag->nodes = next; ++i; } E_INFO("Eliminated %d nodes before end node\n", i); dag->end->reachable = TRUE; nlink = 0; for (to = dag->end; to; to = to->next) { int fef, lef; /* Skip if not reachable; it will never be reachable from dag->end */ if (!to->reachable) continue; /* Prune nodes with too few endpoints - heuristic borrowed from Sphinx3 */ fef = ngs->bp_table[to->fef].frame; lef = ngs->bp_table[to->lef].frame; if (to != dag->end && lef - fef < min_endfr) { to->reachable = FALSE; continue; } /* Find predecessors of to : from->fef+1 <= to->sf <= from->lef+1 */ for (from = to->next; from; from = from->next) { bptbl_t *from_bpe; fef = ngs->bp_table[from->fef].frame; lef = ngs->bp_table[from->lef].frame; if ((to->sf <= fef) || (to->sf > lef + 1)) continue; if (lef - fef < min_endfr) { assert(!from->reachable); continue; } /* Find bptable entry for "from" that exactly precedes "to" */ i = from->fef; from_bpe = ngs->bp_table + i; for (; i <= from->lef; i++, from_bpe++) { if (from_bpe->wid != from->wid) continue; if (from_bpe->frame >= to->sf - 1) break; } if ((i > from->lef) || (from_bpe->frame != to->sf - 1)) continue; /* Find acoustic score from.sf->to.sf-1 with right context = to */ /* This gives us from_bpe's best acoustic score. */ ngram_compute_seg_score(ngs, from_bpe, lwf, &ascr, &lscr); /* Now find the exact path score for from->to, including * the appropriate final triphone. In fact this might not * exist. */ score = ngram_search_exit_score(ngs, from_bpe, dict_first_phone(ps_search_dict(ngs), to->wid)); /* Does not exist. Can't create a link here. */ if (score == WORST_SCORE) continue; /* Adjust the arc score to match the correct triphone. */ else score = ascr + (score - from_bpe->score); if (score BETTER_THAN 0) { /* Scores must be negative, or Bad Things will happen. In general, they are, except in corner cases involving filler words. We don't want to throw any links away so we'll keep these, but with some arbitrarily improbable but recognizable score. */ ps_lattice_link(dag, from, to, -424242, from_bpe->frame); ++nlink; from->reachable = TRUE; } else if (score BETTER_THAN WORST_SCORE) { ps_lattice_link(dag, from, to, score, from_bpe->frame); ++nlink; from->reachable = TRUE; } } } /* There must be at least one path between dag->start and dag->end */ if (!dag->start->reachable) { E_ERROR("End node of lattice isolated; unreachable\n"); goto error_out; } for (node = dag->nodes; node; node = node->next) { /* Change node->{fef,lef} from bptbl indices to frames. */ node->fef = ngs->bp_table[node->fef].frame; node->lef = ngs->bp_table[node->lef].frame; /* Find base wid for nodes. */ node->basewid = dict_basewid(search->dict, node->wid); } /* Link nodes with alternate pronunciations at the same timepoint. */ for (node = dag->nodes; node; node = node->next) { ps_latnode_t *alt; /* Scan forward to find the next alternate, then stop. */ for (alt = node->next; alt && alt->sf == node->sf; alt = alt->next) { if (alt->basewid == node->basewid) { alt->alt = node->alt; node->alt = alt; break; } } } E_INFO("Lattice has %d nodes, %d links\n", dag->n_nodes, nlink); /* Minor hack: If the final node is a filler word and not , * then set its base word ID to , so that the language model * scores won't be screwed up. */ if (dict_filler_word(ps_search_dict(ngs), dag->end->wid)) dag->end->basewid = ps_search_finish_wid(ngs); /* Free nodes unreachable from dag->end and their links */ ps_lattice_delete_unreachable(dag); /* Add silprob and fillprob to corresponding links */ ps_lattice_penalize_fillers(dag, ngs->silpen, ngs->fillpen); search->dag = dag; return dag; error_out: ps_lattice_free(dag); return NULL; } void ngram_search_set_lm(ngram_model_t *lm) { default_lm = ngram_model_retain(lm); } pocketsphinx-5prealpha/src/libpocketsphinx/ms_senone.c0000664000175000017500000003344212504317100020525 00000000000000/* -*- 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. * * ==================================================================== * */ /* System headers. */ #include #include #include /* SphinxBase headers. */ #include /* Local headers. */ #include "ms_senone.h" #define MIXW_PARAM_VERSION "1.0" #define SPDEF_PARAM_VERSION "1.2" static int32 senone_mgau_map_read(senone_t * s, char const *file_name) { FILE *fp; int32 byteswap, chksum_present, n_gauden_present; uint32 chksum; int32 i; char eofchk; char **argname, **argval; void *ptr; float32 v; E_INFO("Reading senone gauden-codebook map file: %s\n", file_name); if ((fp = fopen(file_name, "rb")) == NULL) E_FATAL_SYSTEM("Failed to open map file '%s' for reading", file_name); /* Read header, including argument-value info and 32-bit byteorder magic */ if (bio_readhdr(fp, &argname, &argval, &byteswap) < 0) E_FATAL("Failed to read header from file '%s'\n", file_name); /* Parse argument-value list */ chksum_present = 0; n_gauden_present = 0; for (i = 0; argname[i]; i++) { if (strcmp(argname[i], "version") == 0) { if (strcmp(argval[i], SPDEF_PARAM_VERSION) != 0) { E_WARN("Version mismatch(%s): %s, expecting %s\n", file_name, argval[i], SPDEF_PARAM_VERSION); } /* HACK!! Convert version# to float32 and take appropriate action */ if (sscanf(argval[i], "%f", &v) != 1) E_FATAL("%s: Bad version no. string: %s\n", file_name, argval[i]); n_gauden_present = (v > 1.1) ? 1 : 0; } else if (strcmp(argname[i], "chksum0") == 0) { chksum_present = 1; /* Ignore the associated value */ } } bio_hdrarg_free(argname, argval); argname = argval = NULL; chksum = 0; /* Read #gauden (if version matches) */ if (n_gauden_present) { E_INFO("Reading number of codebooks from %s\n", file_name); if (bio_fread (&(s->n_gauden), sizeof(int32), 1, fp, byteswap, &chksum) != 1) E_FATAL("fread(%s) (#gauden) failed\n", file_name); } /* Read 1d array data */ if (bio_fread_1d(&ptr, sizeof(uint32), &(s->n_sen), fp, byteswap, &chksum) < 0) { E_FATAL("bio_fread_1d(%s) failed\n", file_name); } s->mgau = ptr; E_INFO("Mapping %d senones to %d codebooks\n", s->n_sen, s->n_gauden); /* Infer n_gauden if not present in this version */ if (!n_gauden_present) { s->n_gauden = 1; for (i = 0; i < s->n_sen; i++) if (s->mgau[i] >= s->n_gauden) s->n_gauden = s->mgau[i] + 1; } if (chksum_present) bio_verify_chksum(fp, byteswap, chksum); if (fread(&eofchk, 1, 1, fp) == 1) E_FATAL("More data than expected in %s: %d\n", file_name, eofchk); fclose(fp); E_INFO("Read %d->%d senone-codebook mappings\n", s->n_sen, s->n_gauden); return 1; } static int32 senone_mixw_read(senone_t * s, char const *file_name, logmath_t *lmath) { char eofchk; FILE *fp; int32 byteswap, chksum_present; uint32 chksum; float32 *pdf; int32 i, f, c, p, n_err; char **argname, **argval; E_INFO("Reading senone mixture weights: %s\n", file_name); if ((fp = fopen(file_name, "rb")) == NULL) E_FATAL_SYSTEM("Failed to open mixture weights file '%s' for reading", file_name); /* Read header, including argument-value info and 32-bit byteorder magic */ if (bio_readhdr(fp, &argname, &argval, &byteswap) < 0) E_FATAL("Failed to read header from file '%s'\n", file_name); /* Parse argument-value list */ chksum_present = 0; for (i = 0; argname[i]; i++) { if (strcmp(argname[i], "version") == 0) { if (strcmp(argval[i], MIXW_PARAM_VERSION) != 0) E_WARN("Version mismatch(%s): %s, expecting %s\n", file_name, argval[i], MIXW_PARAM_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; /* Read #senones, #features, #codewords, arraysize */ if ((bio_fread(&(s->n_sen), sizeof(int32), 1, fp, byteswap, &chksum) != 1) || (bio_fread(&(s->n_feat), sizeof(int32), 1, fp, byteswap, &chksum) != 1) || (bio_fread(&(s->n_cw), sizeof(int32), 1, fp, byteswap, &chksum) != 1) || (bio_fread(&i, sizeof(int32), 1, fp, byteswap, &chksum) != 1)) { E_FATAL("bio_fread(%s) (arraysize) failed\n", file_name); } if (i != s->n_sen * s->n_feat * s->n_cw) { E_FATAL ("%s: #float32s(%d) doesn't match dimensions: %d x %d x %d\n", file_name, i, s->n_sen, s->n_feat, s->n_cw); } /* * Compute #LSB bits to be dropped to represent mixwfloor with 8 bits. * All PDF values will be truncated (in the LSB positions) by these many bits. */ if ((s->mixwfloor <= 0.0) || (s->mixwfloor >= 1.0)) E_FATAL("mixwfloor (%e) not in range (0, 1)\n", s->mixwfloor); /* Use a fixed shift for compatibility with everything else. */ E_INFO("Truncating senone logs3(pdf) values by %d bits\n", SENSCR_SHIFT); /* * Allocate memory for senone PDF data. Organize normally or transposed depending on * s->n_gauden. */ if (s->n_gauden > 1) { E_INFO("Not transposing mixture weights in memory\n"); s->pdf = (senprob_t ***) ckd_calloc_3d(s->n_sen, s->n_feat, s->n_cw, sizeof(senprob_t)); } else { E_INFO("Transposing mixture weights in memory\n"); s->pdf = (senprob_t ***) ckd_calloc_3d(s->n_feat, s->n_cw, s->n_sen, sizeof(senprob_t)); } /* Temporary structure to read in floats */ pdf = (float32 *) ckd_calloc(s->n_cw, sizeof(float32)); /* Read senone probs data, normalize, floor, convert to logs3, truncate to 8 bits */ n_err = 0; for (i = 0; i < s->n_sen; i++) { for (f = 0; f < s->n_feat; f++) { if (bio_fread ((void *) pdf, sizeof(float32), s->n_cw, fp, byteswap, &chksum) != s->n_cw) { E_FATAL("bio_fread(%s) (arraydata) failed\n", file_name); } /* Normalize and floor */ if (vector_sum_norm(pdf, s->n_cw) <= 0.0) n_err++; vector_floor(pdf, s->n_cw, s->mixwfloor); vector_sum_norm(pdf, s->n_cw); /* Convert to logs3, truncate to 8 bits, and store in s->pdf */ for (c = 0; c < s->n_cw; c++) { p = -(logmath_log(lmath, pdf[c])); p += (1 << (SENSCR_SHIFT - 1)) - 1; /* Rounding before truncation */ if (s->n_gauden > 1) s->pdf[i][f][c] = (p < (255 << SENSCR_SHIFT)) ? (p >> SENSCR_SHIFT) : 255; else s->pdf[f][c][i] = (p < (255 << SENSCR_SHIFT)) ? (p >> SENSCR_SHIFT) : 255; } } } if (n_err > 0) E_WARN("Weight normalization failed for %d mixture weights components\n", n_err); ckd_free(pdf); if (chksum_present) bio_verify_chksum(fp, byteswap, chksum); if (fread(&eofchk, 1, 1, fp) == 1) E_FATAL("More data than expected in %s\n", file_name); fclose(fp); E_INFO ("Read mixture weights for %d senones: %d features x %d codewords\n", s->n_sen, s->n_feat, s->n_cw); return 1; } senone_t * senone_init(gauden_t *g, char const *mixwfile, char const *sen2mgau_map_file, float32 mixwfloor, logmath_t *lmath, bin_mdef_t *mdef) { senone_t *s; int32 n = 0, i; s = (senone_t *) ckd_calloc(1, sizeof(senone_t)); s->lmath = logmath_init(logmath_get_base(lmath), SENSCR_SHIFT, TRUE); s->mixwfloor = mixwfloor; s->n_gauden = g->n_mgau; if (sen2mgau_map_file) { if (!(strcmp(sen2mgau_map_file, ".semi.") == 0 || strcmp(sen2mgau_map_file, ".ptm.") == 0 || strcmp(sen2mgau_map_file, ".cont.") == 0)) { senone_mgau_map_read(s, sen2mgau_map_file); n = s->n_sen; } } else { if (s->n_gauden == 1) sen2mgau_map_file = ".semi."; else if (s->n_gauden == bin_mdef_n_ciphone(mdef)) sen2mgau_map_file = ".ptm."; else sen2mgau_map_file = ".cont."; } senone_mixw_read(s, mixwfile, lmath); if (strcmp(sen2mgau_map_file, ".semi.") == 0) { /* All-to-1 senones-codebook mapping */ E_INFO("Mapping all senones to one codebook\n"); s->mgau = (uint32 *) ckd_calloc(s->n_sen, sizeof(*s->mgau)); } else if (strcmp(sen2mgau_map_file, ".ptm.") == 0) { /* All-to-ciphone-id senones-codebook mapping */ E_INFO("Mapping senones to context-independent phone codebooks\n"); s->mgau = (uint32 *) ckd_calloc(s->n_sen, sizeof(*s->mgau)); for (i = 0; i < s->n_sen; i++) s->mgau[i] = bin_mdef_sen2cimap(mdef, i); } else if (strcmp(sen2mgau_map_file, ".cont.") == 0 || strcmp(sen2mgau_map_file, ".s3cont.") == 0) { /* 1-to-1 senone-codebook mapping */ E_INFO("Mapping senones to individual codebooks\n"); if (s->n_sen <= 1) E_FATAL("#senone=%d; must be >1\n", s->n_sen); s->mgau = (uint32 *) ckd_calloc(s->n_sen, sizeof(*s->mgau)); for (i = 0; i < s->n_sen; i++) s->mgau[i] = i; /* Not sure why this is here, it probably does nothing. */ s->n_gauden = s->n_sen; } else { if (s->n_sen != n) E_FATAL("#senones inconsistent: %d in %s; %d in %s\n", n, sen2mgau_map_file, s->n_sen, mixwfile); } s->featscr = NULL; return s; } void senone_free(senone_t * s) { if (s == NULL) return; if (s->pdf) ckd_free_3d((void *) s->pdf); if (s->mgau) ckd_free(s->mgau); if (s->featscr) ckd_free(s->featscr); logmath_free(s->lmath); ckd_free(s); } /* * Compute senone score for one senone. * NOTE: Remember that senone PDF tables contain SCALED, NEGATED logs3 values. * NOTE: Remember also that PDF data may be transposed or not depending on s->n_gauden. */ int32 senone_eval(senone_t * s, int id, gauden_dist_t ** dist, int32 n_top) { int32 scr; /* total senone score */ int32 fden; /* Gaussian density */ int32 fscr; /* senone score for one feature */ int32 fwscr; /* senone score for one feature, one codeword */ int32 f, t; gauden_dist_t *fdist; assert((id >= 0) && (id < s->n_sen)); assert((n_top > 0) && (n_top <= s->n_cw)); scr = 0; for (f = 0; f < s->n_feat; f++) { #ifdef SPHINX_DEBUG int top; #endif fdist = dist[f]; /* Top codeword for feature f */ #ifdef SPHINX_DEBUG top = #endif fden = ((int32)fdist[0].dist + ((1<> SENSCR_SHIFT; fscr = (s->n_gauden > 1) ? (fden + -s->pdf[id][f][fdist[0].id]) /* untransposed */ : (fden + -s->pdf[f][fdist[0].id][id]); /* transposed */ E_DEBUG(1, ("fden[%d][%d] l+= %d + %d = %d\n", id, f, -(fscr - fden), -(fden-top), -(fscr-top))); /* Remaining of n_top codewords for feature f */ for (t = 1; t < n_top; t++) { fden = ((int32)fdist[t].dist + ((1<> SENSCR_SHIFT; fwscr = (s->n_gauden > 1) ? (fden + -s->pdf[id][f][fdist[t].id]) : (fden + -s->pdf[f][fdist[t].id][id]); fscr = logmath_add(s->lmath, fscr, fwscr); E_DEBUG(1, ("fden[%d][%d] l+= %d + %d = %d\n", id, f, -(fwscr - fden), -(fden-top), -(fscr-top))); } /* Senone scores are also scaled, negated logs3 values. Hence * we have to negate the stuff we calculated above. */ scr -= fscr; } /* Downscale scores. */ scr /= s->aw; /* Avoid overflowing int16 */ if (scr > 32767) scr = 32767; if (scr < -32768) scr = -32768; return scr; } pocketsphinx-5prealpha/src/libpocketsphinx/s3types.h0000664000175000017500000000664512504317100020163 00000000000000/* -*- 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 _S3_S3TYPES_H_ #define _S3_S3TYPES_H_ #include #include #include #include #include /** \file s3types.h * \brief Size definition of semantically units. Common for both s3 and s3.X decoder. */ #ifdef __cplusplus extern "C" { #endif /** * Size definitions for more semantially meaningful units. * Illegal value definitions, limits, and tests for specific types. * NOTE: Types will be either int32 or smaller; only smaller ones may be unsigned (i.e., * no type will be uint32). */ typedef int16 s3cipid_t; /** Ci phone id */ #define BAD_S3CIPID ((s3cipid_t) -1) #define NOT_S3CIPID(p) ((p)<0) #define IS_S3CIPID(p) ((p)>=0) #define MAX_S3CIPID 32767 /*#define MAX_S3CIPID 127*/ typedef int32 s3pid_t; /** Phone id (triphone or ciphone) */ #define BAD_S3PID ((s3pid_t) -1) #define NOT_S3PID(p) ((p)<0) #define IS_S3PID(p) ((p)>=0) #define MAX_S3PID ((int32)0x7ffffffe) typedef uint16 s3ssid_t; /** Senone sequence id (triphone or ciphone) */ #define BAD_S3SSID ((s3ssid_t) 0xffff) #define NOT_S3SSID(p) ((p) == BAD_S3SSID) #define IS_S3SSID(p) ((p) != BAD_S3SSID) #define MAX_S3SSID ((s3ssid_t)0xfffe) typedef int32 s3tmatid_t; /** Transition matrix id; there can be as many as pids */ #define BAD_S3TMATID ((s3tmatid_t) -1) #define NOT_S3TMATID(t) ((t)<0) #define IS_S3TMATID(t) ((t)>=0) #define MAX_S3TMATID ((int32)0x7ffffffe) typedef int32 s3wid_t; /** Dictionary word id */ #define BAD_S3WID ((s3wid_t) -1) #define NOT_S3WID(w) ((w)<0) #define IS_S3WID(w) ((w)>=0) #define MAX_S3WID ((int32)0x7ffffffe) #ifdef __cplusplus } #endif #endif pocketsphinx-5prealpha/src/libpocketsphinx/fsg_lextree.c0000664000175000017500000007420412504317100021047 00000000000000/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* ==================================================================== * Copyright (c) 1999-2010 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. * * ==================================================================== * */ /** * @file fsg_lextree.c * @brief The collection of all the lextrees for the entire FSM. * @author M K Ravishankar * @author Bhiksha Raj */ /* System headers. */ #include #include #include /* SphinxBase headers. */ #include #include /* Local headers. */ #include "fsg_lextree.h" #define __FSG_DBG__ 0 /* A linklist structure that is actually used to build local lextrees at grammar nodes */ typedef struct fsg_glist_linklist_t { int32 ci, rc; glist_t glist; struct fsg_glist_linklist_t *next; } fsg_glist_linklist_t; /** * Build the phone lextree for all transitions out of state from_state. * Return the root node of this tree. * Also, return a linear linked list of all allocated fsg_pnode_t nodes in * *alloc_head (for memory management purposes). */ static fsg_pnode_t *fsg_psubtree_init(fsg_lextree_t *tree, fsg_model_t *fsg, int32 from_state, fsg_pnode_t **alloc_head); /** * Free the given lextree. alloc_head: head of linear list of allocated * nodes updated by fsg_psubtree_init(). */ static void fsg_psubtree_free(fsg_pnode_t *alloc_head); /** * Dump the list of nodes in the given lextree to the given file. alloc_head: * head of linear list of allocated nodes updated by fsg_psubtree_init(). */ static void fsg_psubtree_dump(fsg_lextree_t *tree, fsg_pnode_t *root, FILE *fp); /** * Compute the left and right context CIphone sets for each state. */ static void fsg_lextree_lc_rc(fsg_lextree_t *lextree) { int32 s, i, j; int32 n_ci; fsg_model_t *fsg; int32 silcipid; int32 len; silcipid = bin_mdef_silphone(lextree->mdef); assert(silcipid >= 0); n_ci = bin_mdef_n_ciphone(lextree->mdef); fsg = lextree->fsg; /* * lextree->lc[s] = set of left context CIphones for state s. Similarly, rc[s] * for right context CIphones. */ lextree->lc = ckd_calloc_2d(fsg->n_state, n_ci + 1, sizeof(**lextree->lc)); lextree->rc = ckd_calloc_2d(fsg->n_state, n_ci + 1, sizeof(**lextree->rc)); E_INFO("Allocated %d bytes (%d KiB) for left and right context phones\n", fsg->n_state * (n_ci + 1) * 2, fsg->n_state * (n_ci + 1) * 2 / 1024); for (s = 0; s < fsg->n_state; s++) { fsg_arciter_t *itor; for (itor = fsg_model_arcs(fsg, s); itor; itor = fsg_arciter_next(itor)) { fsg_link_t *l = fsg_arciter_get(itor); int32 dictwid; /**< Dictionary (not FSG) word ID!! */ if (fsg_link_wid(l) >= 0) { dictwid = dict_wordid(lextree->dict, fsg_model_word_str(lextree->fsg, l->wid)); /* * Add the first CIphone of l->wid to the rclist of state s, and * the last CIphone to lclist of state d. * (Filler phones are a pain to deal with. There is no direct * marking of a filler phone; but only filler words are supposed to * use such phones, so we use that fact. HACK!! FRAGILE!!) * * UPD: tests carsh here if .fsg model used with wrong hmm and * dictionary */ if (fsg_model_is_filler(fsg, fsg_link_wid(l))) { /* Filler phone; use silence phone as context */ lextree->rc[fsg_link_from_state(l)][silcipid] = 1; lextree->lc[fsg_link_to_state(l)][silcipid] = 1; } else { len = dict_pronlen(lextree->dict, dictwid); lextree->rc[fsg_link_from_state(l)][dict_pron(lextree->dict, dictwid, 0)] = 1; lextree->lc[fsg_link_to_state(l)][dict_pron(lextree->dict, dictwid, len - 1)] = 1; } } } } for (s = 0; s < fsg->n_state; s++) { /* * Add SIL phone to the lclist and rclist of each state. Strictly * speaking, only needed at start and final states, respectively, but * all states considered since the user may change the start and final * states. In any case, most applications would have a silence self * loop at each state, hence these would be needed anyway. */ lextree->lc[s][silcipid] = 1; lextree->rc[s][silcipid] = 1; } /* * Propagate lc and rc lists past null transitions. (Since FSG contains * null transitions closure, no need to worry about a chain of successive * null transitions. Right??) * * This can't be joined with the previous loop because we first calculate * contexts and only then we can propagate them. */ for (s = 0; s < fsg->n_state; s++) { fsg_arciter_t *itor; for (itor = fsg_model_arcs(fsg, s); itor; itor = fsg_arciter_next(itor)) { fsg_link_t *l = fsg_arciter_get(itor); if (fsg_link_wid(l) < 0) { /* * lclist(d) |= lclist(s), because all the words ending up at s, can * now also end at d, becoming the left context for words leaving d. */ for (i = 0; i < n_ci; i++) lextree->lc[fsg_link_to_state(l)][i] |= lextree->lc[fsg_link_from_state(l)][i]; /* * Similarly, rclist(s) |= rclist(d), because all the words leaving d * can equivalently leave s, becoming the right context for words * ending up at s. */ for (i = 0; i < n_ci; i++) lextree->rc[fsg_link_from_state(l)][i] |= lextree->rc[fsg_link_to_state(l)][i]; } } } /* Convert the bit-vector representation into a list */ for (s = 0; s < fsg->n_state; s++) { j = 0; for (i = 0; i < n_ci; i++) { if (lextree->lc[s][i]) { lextree->lc[s][j] = i; j++; } } lextree->lc[s][j] = -1; /* Terminate the list */ j = 0; for (i = 0; i < n_ci; i++) { if (lextree->rc[s][i]) { lextree->rc[s][j] = i; j++; } } lextree->rc[s][j] = -1; /* Terminate the list */ } } /* * For now, allocate the entire lextree statically. */ fsg_lextree_t * fsg_lextree_init(fsg_model_t * fsg, dict_t *dict, dict2pid_t *d2p, bin_mdef_t *mdef, hmm_context_t *ctx, int32 wip, int32 pip) { int32 s, n_leaves; fsg_lextree_t *lextree; fsg_pnode_t *pn; lextree = ckd_calloc(1, sizeof(fsg_lextree_t)); lextree->fsg = fsg; lextree->root = ckd_calloc(fsg_model_n_state(fsg), sizeof(fsg_pnode_t *)); lextree->alloc_head = ckd_calloc(fsg_model_n_state(fsg), sizeof(fsg_pnode_t *)); lextree->ctx = ctx; lextree->dict = dict; lextree->d2p = d2p; lextree->mdef = mdef; lextree->wip = wip; lextree->pip = pip; /* Compute lc and rc for fsg. */ fsg_lextree_lc_rc(lextree); /* Create lextree for each state, i.e. an HMM network that * represents words for all arcs exiting that state. Note that * for a dense grammar such as an N-gram model, this will * rapidly exhaust all available memory. */ lextree->n_pnode = 0; n_leaves = 0; for (s = 0; s < fsg_model_n_state(fsg); s++) { lextree->root[s] = fsg_psubtree_init(lextree, fsg, s, &(lextree->alloc_head[s])); for (pn = lextree->alloc_head[s]; pn; pn = pn->alloc_next) { lextree->n_pnode++; if (pn->leaf) ++n_leaves; } } E_INFO("%d HMM nodes in lextree (%d leaves)\n", lextree->n_pnode, n_leaves); E_INFO("Allocated %d bytes (%d KiB) for all lextree nodes\n", lextree->n_pnode * sizeof(fsg_pnode_t), lextree->n_pnode * sizeof(fsg_pnode_t) / 1024); E_INFO("Allocated %d bytes (%d KiB) for lextree leafnodes\n", n_leaves * sizeof(fsg_pnode_t), n_leaves * sizeof(fsg_pnode_t) / 1024); #if __FSG_DBG__ fsg_lextree_dump(lextree, stdout); #endif return lextree; } void fsg_lextree_dump(fsg_lextree_t * lextree, FILE * fp) { int32 s; for (s = 0; s < fsg_model_n_state(lextree->fsg); s++) { fprintf(fp, "State %5d root %p\n", s, lextree->root[s]); fsg_psubtree_dump(lextree, lextree->root[s], fp); } fflush(fp); } void fsg_lextree_free(fsg_lextree_t * lextree) { int32 s; if (lextree == NULL) return; if (lextree->fsg) for (s = 0; s < fsg_model_n_state(lextree->fsg); s++) fsg_psubtree_free(lextree->alloc_head[s]); ckd_free_2d(lextree->lc); ckd_free_2d(lextree->rc); ckd_free(lextree->root); ckd_free(lextree->alloc_head); ckd_free(lextree); } /****************************** * psubtree stuff starts here * ******************************/ void fsg_glist_linklist_free(fsg_glist_linklist_t *glist) { if (glist) { fsg_glist_linklist_t *nxtglist; if (glist->glist) glist_free(glist->glist); nxtglist = glist->next; while (nxtglist) { ckd_free(glist); glist = nxtglist; if (glist->glist) glist_free(glist->glist); nxtglist = glist->next; } ckd_free(glist); } return; } void fsg_pnode_add_all_ctxt(fsg_pnode_ctxt_t * ctxt) { int32 i; for (i = 0; i < FSG_PNODE_CTXT_BVSZ; i++) ctxt->bv[i] = 0xffffffff; } uint32 fsg_pnode_ctxt_sub_generic(fsg_pnode_ctxt_t *src, fsg_pnode_ctxt_t *sub) { int32 i; uint32 res = 0; for (i = 0; i < FSG_PNODE_CTXT_BVSZ; i++) res |= (src->bv[i] = ~(sub->bv[i]) & src->bv[i]); return res; } /* * fsg_pnode_ctxt_sub(fsg_pnode_ctxt_t * src, fsg_pnode_ctxt_t * sub) * This has been moved into a macro in fsg_psubtree.h * because it is called so frequently! */ /* * Add the word emitted by the given transition (fsglink) to the given lextree * (rooted at root), and return the new lextree root. (There may actually be * several root nodes, maintained in a linked list via fsg_pnode_t.sibling. * "root" is the head of this list.) * lclist, rclist: sets of left and right context phones for this link. * alloc_head: head of a linear list of all allocated pnodes for the parent * FSG state, kept elsewhere and updated by this routine. */ static fsg_pnode_t * psubtree_add_trans(fsg_lextree_t *lextree, fsg_pnode_t * root, fsg_glist_linklist_t **curglist, fsg_link_t * fsglink, int16 *lclist, int16 *rclist, fsg_pnode_t ** alloc_head) { int32 silcipid; /* Silence CI phone ID */ int32 pronlen; /* Pronunciation length */ int32 wid; /* FSG (not dictionary!!) word ID */ int32 dictwid; /* Dictionary (not FSG!!) word ID */ int32 ssid; /* Senone Sequence ID */ int32 tmatid; gnode_t *gn; fsg_pnode_t *pnode, *pred, *head; int32 n_ci, p, lc, rc; glist_t lc_pnodelist; /* Temp pnodes list for different left contexts */ glist_t rc_pnodelist; /* Temp pnodes list for different right contexts */ int32 i, j; int n_lc_alloc = 0, n_int_alloc = 0, n_rc_alloc = 0; silcipid = bin_mdef_silphone(lextree->mdef); n_ci = bin_mdef_n_ciphone(lextree->mdef); wid = fsg_link_wid(fsglink); assert(wid >= 0); /* Cannot be a null transition */ dictwid = dict_wordid(lextree->dict, fsg_model_word_str(lextree->fsg, wid)); pronlen = dict_pronlen(lextree->dict, dictwid); assert(pronlen >= 1); assert(lclist[0] >= 0); /* At least one phonetic context provided */ assert(rclist[0] >= 0); head = *alloc_head; pred = NULL; if (pronlen == 1) { /* Single-phone word */ int ci = dict_first_phone(lextree->dict, dictwid); /* Only non-filler words are mpx */ if (!dict_filler_word(lextree->dict, dictwid)) { /* * Left diphone ID for single-phone words already assumes SIL is right * context; only left contexts need to be handled. */ lc_pnodelist = NULL; for (i = 0; lclist[i] >= 0; i++) { lc = lclist[i]; ssid = dict2pid_lrdiph_rc(lextree->d2p, ci, lc, silcipid); tmatid = bin_mdef_pid2tmatid(lextree->mdef, dict_first_phone(lextree->dict, dictwid)); /* Check if this ssid already allocated for some other context */ for (gn = lc_pnodelist; gn; gn = gnode_next(gn)) { pnode = (fsg_pnode_t *) gnode_ptr(gn); if (hmm_nonmpx_ssid(&pnode->hmm) == ssid) { /* already allocated; share it for this context phone */ fsg_pnode_add_ctxt(pnode, lc); break; } } if (!gn) { /* ssid not already allocated */ pnode = (fsg_pnode_t *) ckd_calloc(1, sizeof(fsg_pnode_t)); pnode->ctx = lextree->ctx; pnode->next.fsglink = fsglink; pnode->logs2prob = (fsg_link_logs2prob(fsglink) >> SENSCR_SHIFT) + lextree->wip + lextree->pip; pnode->ci_ext = dict_first_phone(lextree->dict, dictwid); pnode->ppos = 0; pnode->leaf = TRUE; pnode->sibling = root; /* All root nodes linked together */ fsg_pnode_add_ctxt(pnode, lc); /* Initially zeroed by calloc above */ pnode->alloc_next = head; head = pnode; root = pnode; ++n_lc_alloc; hmm_init(lextree->ctx, &pnode->hmm, FALSE, ssid, tmatid); lc_pnodelist = glist_add_ptr(lc_pnodelist, (void *) pnode); } } glist_free(lc_pnodelist); } else { /* Filler word; no context modelled */ ssid = bin_mdef_pid2ssid(lextree->mdef, ci); /* probably the same... */ tmatid = bin_mdef_pid2tmatid(lextree->mdef, ci); pnode = (fsg_pnode_t *) ckd_calloc(1, sizeof(fsg_pnode_t)); pnode->ctx = lextree->ctx; pnode->next.fsglink = fsglink; pnode->logs2prob = (fsg_link_logs2prob(fsglink) >> SENSCR_SHIFT) + lextree->wip + lextree->pip; pnode->ci_ext = silcipid; /* Presents SIL as context to neighbors */ pnode->ppos = 0; pnode->leaf = TRUE; pnode->sibling = root; fsg_pnode_add_all_ctxt(&(pnode->ctxt)); pnode->alloc_next = head; head = pnode; root = pnode; ++n_int_alloc; hmm_init(lextree->ctx, &pnode->hmm, FALSE, ssid, tmatid); } } else { /* Multi-phone word */ fsg_pnode_t **ssid_pnode_map; /* Temp array of ssid->pnode mapping */ ssid_pnode_map = (fsg_pnode_t **) ckd_calloc(n_ci, sizeof(fsg_pnode_t *)); lc_pnodelist = NULL; rc_pnodelist = NULL; for (p = 0; p < pronlen; p++) { int ci = dict_pron(lextree->dict, dictwid, p); if (p == 0) { /* Root phone, handle required left contexts */ /* Find if we already have an lc_pnodelist for the first phone of this word */ fsg_glist_linklist_t *glist; rc = dict_pron(lextree->dict, dictwid, 1); for (glist = *curglist; glist && glist->glist; glist = glist->next) { if (glist->ci == ci && glist->rc == rc) break; } if (glist && glist->glist) { assert(glist->ci == ci && glist->rc == rc); /* We've found a valid glist. Hook to it and move to next phoneme */ E_DEBUG(2,("Found match for (%d,%d)\n", ci, rc)); lc_pnodelist = glist->glist; /* Set the predecessor node for the future tree first */ pred = (fsg_pnode_t *) gnode_ptr(lc_pnodelist); continue; } else { /* Two cases that can bring us here * a. glist == NULL, i.e. end of current list. Create new entry. * b. glist->glist == NULL, i.e. first entry into list. */ if (glist == NULL) { /* Case a; reduce it to case b by allocing glist */ glist = (fsg_glist_linklist_t*) ckd_calloc(1, sizeof(fsg_glist_linklist_t)); glist->next = *curglist; *curglist = glist; } glist->ci = ci; glist->rc = rc; lc_pnodelist = glist->glist = NULL; /* Gets created below */ } for (i = 0; lclist[i] >= 0; i++) { lc = lclist[i]; ssid = dict2pid_ldiph_lc(lextree->d2p, ci, rc, lc); tmatid = bin_mdef_pid2tmatid(lextree->mdef, dict_first_phone(lextree->dict, dictwid)); /* Compression is not done by d2p, so we do it * here. This might be slow, but it might not * be... we'll see. */ pnode = ssid_pnode_map[0]; for (j = 0; j < n_ci && ssid_pnode_map[j] != NULL; ++j) { pnode = ssid_pnode_map[j]; if (hmm_nonmpx_ssid(&pnode->hmm) == ssid) break; } assert(j < n_ci); if (!pnode) { /* Allocate pnode for this new ssid */ pnode = (fsg_pnode_t *) ckd_calloc(1, sizeof (fsg_pnode_t)); pnode->ctx = lextree->ctx; /* This bit is tricky! For now we'll put the prob in the final link only */ /* pnode->logs2prob = (fsg_link_logs2prob(fsglink) >> SENSCR_SHIFT) + lextree->wip + lextree->pip; */ pnode->logs2prob = lextree->wip + lextree->pip; pnode->ci_ext = dict_first_phone(lextree->dict, dictwid); pnode->ppos = 0; pnode->leaf = FALSE; pnode->sibling = root; /* All root nodes linked together */ pnode->alloc_next = head; head = pnode; root = pnode; ++n_lc_alloc; hmm_init(lextree->ctx, &pnode->hmm, FALSE, ssid, tmatid); lc_pnodelist = glist_add_ptr(lc_pnodelist, (void *) pnode); ssid_pnode_map[j] = pnode; } fsg_pnode_add_ctxt(pnode, lc); } /* Put the lc_pnodelist back into glist */ glist->glist = lc_pnodelist; /* The predecessor node for the future tree is the root */ pred = root; } else if (p != pronlen - 1) { /* Word internal phone */ fsg_pnode_t *pnodeyoungest; ssid = dict2pid_internal(lextree->d2p, dictwid, p); tmatid = bin_mdef_pid2tmatid(lextree->mdef, dict_pron (lextree->dict, dictwid, p)); /* First check if we already have this ssid in our tree */ pnode = pred->next.succ; pnodeyoungest = pnode; /* The youngest sibling */ while (pnode && (hmm_nonmpx_ssid(&pnode->hmm) != ssid || pnode->leaf)) { pnode = pnode->sibling; } if (pnode && (hmm_nonmpx_ssid(&pnode->hmm) == ssid && !pnode->leaf)) { /* Found the ssid; go to next phoneme */ E_DEBUG(2,("Found match for %d\n", ci)); pred = pnode; continue; } /* pnode not found, allocate it */ pnode = (fsg_pnode_t *) ckd_calloc(1, sizeof(fsg_pnode_t)); pnode->ctx = lextree->ctx; pnode->logs2prob = lextree->pip; pnode->ci_ext = dict_pron(lextree->dict, dictwid, p); pnode->ppos = p; pnode->leaf = FALSE; pnode->sibling = pnodeyoungest; /* May be NULL */ if (p == 1) { /* Predecessor = set of root nodes for left ctxts */ for (gn = lc_pnodelist; gn; gn = gnode_next(gn)) { pred = (fsg_pnode_t *) gnode_ptr(gn); pred->next.succ = pnode; } } else { /* Predecessor = word internal node */ pred->next.succ = pnode; } pnode->alloc_next = head; head = pnode; ++n_int_alloc; hmm_init(lextree->ctx, &pnode->hmm, FALSE, ssid, tmatid); pred = pnode; } else { /* Leaf phone, handle required right contexts */ /* Note, leaf phones are not part of the tree */ xwdssid_t *rssid; memset((void *) ssid_pnode_map, 0, n_ci * sizeof(fsg_pnode_t *)); lc = dict_pron(lextree->dict, dictwid, p-1); rssid = dict2pid_rssid(lextree->d2p, ci, lc); tmatid = bin_mdef_pid2tmatid(lextree->mdef, dict_pron (lextree->dict, dictwid, p)); for (i = 0; rclist[i] >= 0; i++) { rc = rclist[i]; j = rssid->cimap[rc]; ssid = rssid->ssid[j]; pnode = ssid_pnode_map[j]; if (!pnode) { /* Allocate pnode for this new ssid */ pnode = (fsg_pnode_t *) ckd_calloc(1, sizeof (fsg_pnode_t)); pnode->ctx = lextree->ctx; /* We are plugging the word prob here. Ugly */ /* pnode->logs2prob = lextree->pip; */ pnode->logs2prob = (fsg_link_logs2prob(fsglink) >> SENSCR_SHIFT) + lextree->pip; pnode->ci_ext = dict_pron(lextree->dict, dictwid, p); pnode->ppos = p; pnode->leaf = TRUE; pnode->sibling = rc_pnodelist ? (fsg_pnode_t *) gnode_ptr(rc_pnodelist) : NULL; pnode->next.fsglink = fsglink; pnode->alloc_next = head; head = pnode; ++n_rc_alloc; hmm_init(lextree->ctx, &pnode->hmm, FALSE, ssid, tmatid); rc_pnodelist = glist_add_ptr(rc_pnodelist, (void *) pnode); ssid_pnode_map[j] = pnode; } else { assert(hmm_nonmpx_ssid(&pnode->hmm) == ssid); } fsg_pnode_add_ctxt(pnode, rc); } if (p == 1) { /* Predecessor = set of root nodes for left ctxts */ for (gn = lc_pnodelist; gn; gn = gnode_next(gn)) { pred = (fsg_pnode_t *) gnode_ptr(gn); if (!pred->next.succ) pred->next.succ = (fsg_pnode_t *) gnode_ptr(rc_pnodelist); else { /* Link to the end of the sibling chain */ fsg_pnode_t *succ = pred->next.succ; while (succ->sibling) succ = succ->sibling; succ->sibling = (fsg_pnode_t*) gnode_ptr(rc_pnodelist); /* Since all entries of lc_pnodelist point to the same array, sufficient to update it once */ break; } } } else { /* Predecessor = word internal node */ if (!pred->next.succ) pred->next.succ = (fsg_pnode_t *) gnode_ptr(rc_pnodelist); else { /* Link to the end of the sibling chain */ fsg_pnode_t *succ = pred->next.succ; while (succ->sibling) succ = succ->sibling; succ->sibling = (fsg_pnode_t *) gnode_ptr(rc_pnodelist); } } } } ckd_free((void *) ssid_pnode_map); /* glist_free(lc_pnodelist); Nope; this gets freed outside */ glist_free(rc_pnodelist); } E_DEBUG(2,("Allocated %d HMMs (%d lc, %d rc, %d internal)\n", n_lc_alloc + n_rc_alloc + n_int_alloc, n_lc_alloc, n_rc_alloc, n_int_alloc)); *alloc_head = head; return root; } static fsg_pnode_t * fsg_psubtree_init(fsg_lextree_t *lextree, fsg_model_t * fsg, int32 from_state, fsg_pnode_t ** alloc_head) { fsg_arciter_t *itor; fsg_link_t *fsglink; fsg_pnode_t *root; int32 n_ci, n_arc; fsg_glist_linklist_t *glist = NULL; root = NULL; assert(*alloc_head == NULL); n_ci = bin_mdef_n_ciphone(lextree->mdef); if (n_ci > (FSG_PNODE_CTXT_BVSZ * 32)) { E_FATAL ("#phones > %d; increase FSG_PNODE_CTXT_BVSZ and recompile\n", FSG_PNODE_CTXT_BVSZ * 32); } n_arc = 0; for (itor = fsg_model_arcs(fsg, from_state); itor; itor = fsg_arciter_next(itor)) { int32 dst; fsglink = fsg_arciter_get(itor); dst = fsglink->to_state; if (fsg_link_wid(fsglink) < 0) continue; E_DEBUG(2,("Building lextree for arc from %d to %d: %s\n", from_state, dst, fsg_model_word_str(fsg, fsg_link_wid(fsglink)))); root = psubtree_add_trans(lextree, root, &glist, fsglink, lextree->lc[from_state], lextree->rc[dst], alloc_head); ++n_arc; } E_DEBUG(2,("State %d has %d outgoing arcs\n", from_state, n_arc)); fsg_glist_linklist_free(glist); return root; } static void fsg_psubtree_free(fsg_pnode_t * head) { fsg_pnode_t *next; while (head) { next = head->alloc_next; hmm_deinit(&head->hmm); ckd_free(head); head = next; } } void fsg_psubtree_dump_node(fsg_lextree_t *tree, fsg_pnode_t *node, FILE *fp) { int32 i; fsg_link_t *tl; /* Indentation */ for (i = 0; i <= node->ppos; i++) fprintf(fp, " "); fprintf(fp, "%p.@", node); /* Pointer used as node * ID */ fprintf(fp, " %5d.SS", hmm_nonmpx_ssid(&node->hmm)); fprintf(fp, " %10d.LP", node->logs2prob); fprintf(fp, " %p.SIB", node->sibling); fprintf(fp, " %s.%d", bin_mdef_ciphone_str(tree->mdef, node->ci_ext), node->ppos); if ((node->ppos == 0) || node->leaf) { fprintf(fp, " ["); for (i = 0; i < FSG_PNODE_CTXT_BVSZ; i++) fprintf(fp, "%08x", node->ctxt.bv[i]); fprintf(fp, "]"); } if (node->leaf) { tl = node->next.fsglink; fprintf(fp, " {%s[%d->%d](%d)}", fsg_model_word_str(tree->fsg, tl->wid), tl->from_state, tl->to_state, tl->logs2prob); } else { fprintf(fp, " %p.NXT", node->next.succ); } fprintf(fp, "\n"); return; } void fsg_psubtree_dump(fsg_lextree_t *tree, fsg_pnode_t *root, FILE * fp) { fsg_pnode_t *succ; if (root == NULL) return; if (root->ppos == 0) { while(root->sibling && root->sibling->next.succ == root->next.succ) { fsg_psubtree_dump_node(tree, root, fp); root = root->sibling; } fflush(fp); } fsg_psubtree_dump_node(tree, root, fp); if (root->leaf) { if (root->ppos == 0 && root->sibling) { /* For single-phone words */ fsg_psubtree_dump(tree, root->sibling,fp); } return; } succ = root->next.succ; while(succ) { fsg_psubtree_dump(tree, succ,fp); succ = succ->sibling; } if (root->ppos == 0) { fsg_psubtree_dump(tree, root->sibling,fp); fflush(fp); } return; } void fsg_psubtree_pnode_deactivate(fsg_pnode_t * pnode) { hmm_clear(&pnode->hmm); } pocketsphinx-5prealpha/src/libpocketsphinx/ngram_search_fwdflat.h0000664000175000017500000000525712504317100022707 00000000000000/* -*- 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_search_fwdflat.h Flat lexicon based Viterbi search. */ #ifndef __NGRAM_SEARCH_FWDFLAT_H__ #define __NGRAM_SEARCH_FWDFLAT_H__ /* SphinxBase headers. */ /* Local headers. */ #include "ngram_search.h" /** * Initialize N-Gram search for fwdflat decoding. */ void ngram_fwdflat_init(ngram_search_t *ngs); /** * Release memory associated with fwdflat decoding. */ void ngram_fwdflat_deinit(ngram_search_t *ngs); /** * Rebuild search structures for updated language models. */ int ngram_fwdflat_reinit(ngram_search_t *ngs); /** * Start fwdflat decoding for an utterance. */ void ngram_fwdflat_start(ngram_search_t *ngs); /** * Search one frame forward in an utterance. */ int ngram_fwdflat_search(ngram_search_t *ngs, int frame_idx); /** * Finish fwdflat decoding for an utterance. */ void ngram_fwdflat_finish(ngram_search_t *ngs); #endif /* __NGRAM_SEARCH_FWDFLAT_H__ */ pocketsphinx-5prealpha/src/libpocketsphinx/fsg_history.h0000664000175000017500000001771312504317100021107 00000000000000/* -*- 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_history.h -- FSG Viterbi decode history * * ********************************************** * CMU ARPA Speech Project * * Copyright (c) 1999 Carnegie Mellon University. * ALL RIGHTS RESERVED. * ********************************************** * * HISTORY * * $Log: fsg_history.h,v $ * Revision 1.1.1.1 2006/05/23 18:45:02 dhuggins * re-importation * * Revision 1.1 2004/07/16 00:57:12 egouvea * Added Ravi's implementation of FSG support. * * Revision 1.7 2004/07/07 22:30:35 rkm * *** empty log message *** * * Revision 1.6 2004/07/07 13:56:33 rkm * Added reporting of (acoustic score - best senone score)/frame * * Revision 1.5 2004/06/25 14:49:08 rkm * Optimized size of history table and speed of word transitions by maintaining only best scoring word exits at each state * * Revision 1.4 2004/06/23 20:32:16 rkm * *** empty log message *** * * Revision 1.3 2004/05/27 15:16:08 rkm * *** empty log message *** * * * 25-Feb-2004 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University * Started, based on S3.3 version. */ #ifndef __S2_FSG_HISTORY_H__ #define __S2_FSG_HISTORY_H__ /* SphinxBase headers. */ #include #include /* Local headers. */ #include "blkarray_list.h" #include "fsg_lextree.h" #include "dict.h" /* * The Viterbi history structure. This is a tree, with the root at the * FSG start state, at frame 0, with a null predecessor. */ /* * A single Viterbi history entry */ typedef struct fsg_hist_entry_s { fsg_link_t *fsglink; /* Link taken result in this entry */ int32 score; /* Total path score at the end of this transition */ int32 pred; /* Predecessor entry; -1 if none */ frame_idx_t frame; /* Ending frame for this entry */ int16 lc; /* Left context provided by this entry to succeeding words */ fsg_pnode_ctxt_t rc; /* Possible right contexts to which this entry applies */ } fsg_hist_entry_t; /* Access macros */ #define fsg_hist_entry_fsglink(v) ((v)->fsglink) #define fsg_hist_entry_frame(v) ((v)->frame) #define fsg_hist_entry_score(v) ((v)->score) #define fsg_hist_entry_pred(v) ((v)->pred) #define fsg_hist_entry_lc(v) ((v)->lc) #define fsg_hist_entry_rc(v) ((v)->rc) /* * The entire tree of history entries (fsg_history_t.entries). * Optimization: In a given frame, there may be several history entries, with * the same left and right phonetic context, terminating in a particular state. * Only the best scoring one of these needs to be saved, since everything else * will be pruned according to the Viterbi algorithm. frame_entries is used * temporarily in each frame to determine these best scoring entries in that * frame. Only the ones not pruned are transferred to entries at the end of * the frame. However, null transitions are a problem since they create * entries that depend on entries created in the CURRENT frame. Hence, this * pruning is done in two stages: first for the non-null transitions, and then * for the null transitions alone. (This solution is sub-optimal, and can be * improved with a little more work. SMOP.) * Why is frame_entries a list? Each entry has a unique terminating state, * and has a unique lc CIphone. But it has a SET of rc CIphones. * frame_entries[s][lc] is an ordered list of entries created in the current * frame, terminating in state s, and with left context lc. The list is in * descending order of path score. When a new entry with (s,lc) arrives, * its position in the list is determined. Then its rc set is modified by * subtracting the union of the rc's of all its predecessors (i.e., better * scoring entries). If the resulting rc set is empty, the entry is discarded. * Otherwise, it is inserted, and the rc sets of all downstream entries in the * list are updated by subtracting the new entry's rc. If any of them becomes * empty, it is also discarded. * As mentioned earlier, this procedure is applied in two stages, for the * non-null transitions, and the null transitions, separately. */ typedef struct fsg_history_s { fsg_model_t *fsg; /* The FSG for which this object applies */ blkarray_list_t *entries; /* A list of history table entries; the root entry is the first element of the list */ glist_t **frame_entries; int n_ciphone; } fsg_history_t; /* * One-time intialization: Allocate and return an initially empty history * module. */ fsg_history_t *fsg_history_init(fsg_model_t *fsg, dict_t *dict); void fsg_history_utt_start(fsg_history_t *h); void fsg_history_utt_end(fsg_history_t *h); /* * Create a history entry recording the completion of the given FSG * transition, at the end of the given frame, with the given score, and * the given predecessor history entry. * The entry is initially temporary, and may be superseded by another * with a higher score. The surviving entries must be transferred to * the main history table, via fsg_history_end_frame(). */ void fsg_history_entry_add (fsg_history_t *h, fsg_link_t *l, /* FSG transition */ int32 frame, int32 score, int32 pred, int32 lc, fsg_pnode_ctxt_t rc); /* * Transfer the surviving history entries for this frame into the permanent * history table. This function can be called several times during a frame. * Each time, the entries surviving so far are transferred, and the temporary * lists cleared. This feature is used to handle the entries due to non-null * transitions and null transitions separately. */ void fsg_history_end_frame (fsg_history_t *h); /* Clear the hitory table */ void fsg_history_reset (fsg_history_t *h); /* Return the number of valid entries in the given history table */ int32 fsg_history_n_entries (fsg_history_t *h); /* * Return a ptr to the history entry for the given ID; NULL if there is no * such entry. */ fsg_hist_entry_t *fsg_history_entry_get(fsg_history_t *h, int32 id); /* * Switch the FSG associated with the given history module. Should be done * when the history list is empty. If not empty, the list is cleared. */ void fsg_history_set_fsg (fsg_history_t *h, fsg_model_t *fsg, dict_t *dict); /* Free the given Viterbi search history object */ void fsg_history_free (fsg_history_t *h); /* Print the entire history */ void fsg_history_print(fsg_history_t *h, dict_t *dict); #endif pocketsphinx-5prealpha/src/libpocketsphinx/ptm_mgau.c0000664000175000017500000007352112504317100020352 00000000000000/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* ==================================================================== * Copyright (c) 1999-2010 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. * * ==================================================================== * */ /* System headers */ #include #include #include #include #include #include #if defined(__ADSPBLACKFIN__) #elif !defined(_WIN32_WCE) #include #endif /* SphinxBase headers */ #include #include #include #include #include #include #include /* Local headers */ #include "tied_mgau_common.h" #include "ptm_mgau.h" static ps_mgaufuncs_t ptm_mgau_funcs = { "ptm", ptm_mgau_frame_eval, /* frame_eval */ ptm_mgau_mllr_transform, /* transform */ ptm_mgau_free /* free */ }; #define COMPUTE_GMM_MAP(_idx) \ diff[_idx] = obs[_idx] - mean[_idx]; \ sqdiff[_idx] = MFCCMUL(diff[_idx], diff[_idx]); \ compl[_idx] = MFCCMUL(sqdiff[_idx], var[_idx]); #define COMPUTE_GMM_REDUCE(_idx) \ d = GMMSUB(d, compl[_idx]); static void insertion_sort_topn(ptm_topn_t *topn, int i, int32 d) { ptm_topn_t vtmp; int j; topn[i].score = d; if (i == 0) return; vtmp = topn[i]; for (j = i - 1; j >= 0 && d > topn[j].score; j--) { topn[j + 1] = topn[j]; } topn[j + 1] = vtmp; } static int eval_topn(ptm_mgau_t *s, int cb, int feat, mfcc_t *z) { ptm_topn_t *topn; int i, ceplen; topn = s->f->topn[cb][feat]; ceplen = s->g->featlen[feat]; for (i = 0; i < s->max_topn; i++) { mfcc_t *mean, diff[4], sqdiff[4], compl[4]; /* diff, diff^2, component likelihood */ mfcc_t *var, d; mfcc_t *obs; int32 cw, j; cw = topn[i].cw; mean = s->g->mean[cb][feat][0] + cw * ceplen; var = s->g->var[cb][feat][0] + cw * ceplen; d = s->g->det[cb][feat][cw]; obs = z; for (j = 0; j < ceplen % 4; ++j) { diff[0] = *obs++ - *mean++; sqdiff[0] = MFCCMUL(diff[0], diff[0]); compl[0] = MFCCMUL(sqdiff[0], *var); d = GMMSUB(d, compl[0]); ++var; } /* We could vectorize this but it's unlikely to make much * difference as the outer loop here isn't very big. */ for (;j < ceplen; j += 4) { COMPUTE_GMM_MAP(0); COMPUTE_GMM_MAP(1); COMPUTE_GMM_MAP(2); COMPUTE_GMM_MAP(3); COMPUTE_GMM_REDUCE(0); COMPUTE_GMM_REDUCE(1); COMPUTE_GMM_REDUCE(2); COMPUTE_GMM_REDUCE(3); var += 4; obs += 4; mean += 4; } insertion_sort_topn(topn, i, (int32)d); } return topn[0].score; } /* This looks bad, but it actually isn't. Less than 1% of eval_cb's * time is spent doing this. */ static void insertion_sort_cb(ptm_topn_t **cur, ptm_topn_t *worst, ptm_topn_t *best, int cw, int32 intd) { for (*cur = worst - 1; *cur >= best && intd >= (*cur)->score; --*cur) memcpy(*cur + 1, *cur, sizeof(**cur)); ++*cur; (*cur)->cw = cw; (*cur)->score = intd; } static int eval_cb(ptm_mgau_t *s, int cb, int feat, mfcc_t *z) { ptm_topn_t *worst, *best, *topn; mfcc_t *mean; mfcc_t *var, *det, *detP, *detE; int32 i, ceplen; best = topn = s->f->topn[cb][feat]; worst = topn + (s->max_topn - 1); mean = s->g->mean[cb][feat][0]; var = s->g->var[cb][feat][0]; det = s->g->det[cb][feat]; detE = det + s->g->n_density; ceplen = s->g->featlen[feat]; for (detP = det; detP < detE; ++detP) { mfcc_t diff[4], sqdiff[4], compl[4]; /* diff, diff^2, component likelihood */ mfcc_t d, thresh; mfcc_t *obs; ptm_topn_t *cur; int32 cw, j; d = *detP; thresh = (mfcc_t) worst->score; /* Avoid int-to-float conversions */ obs = z; cw = (int)(detP - det); /* Unroll the loop starting with the first dimension(s). In * theory this might be a bit faster if this Gaussian gets * "knocked out" by C0. In practice not. */ for (j = 0; (j < ceplen % 4) && (d >= thresh); ++j) { diff[0] = *obs++ - *mean++; sqdiff[0] = MFCCMUL(diff[0], diff[0]); compl[0] = MFCCMUL(sqdiff[0], *var++); d = GMMSUB(d, compl[0]); } /* Now do 4 dimensions at a time. You'd think that GCC would * vectorize this? Apparently not. And it's right, because * that won't make this any faster, at least on x86-64. */ for (; j < ceplen && d >= thresh; j += 4) { COMPUTE_GMM_MAP(0); COMPUTE_GMM_MAP(1); COMPUTE_GMM_MAP(2); COMPUTE_GMM_MAP(3); COMPUTE_GMM_REDUCE(0); COMPUTE_GMM_REDUCE(1); COMPUTE_GMM_REDUCE(2); COMPUTE_GMM_REDUCE(3); var += 4; obs += 4; mean += 4; } if (j < ceplen) { /* terminated early, so not in topn */ mean += (ceplen - j); var += (ceplen - j); continue; } if (d < thresh) continue; for (i = 0; i < s->max_topn; i++) { /* already there, so don't need to insert */ if (topn[i].cw == cw) break; } if (i < s->max_topn) continue; /* already there. Don't insert */ insertion_sort_cb(&cur, worst, best, cw, (int32)d); } return best->score; } /** * Compute top-N densities for active codebooks (and prune) */ static int ptm_mgau_codebook_eval(ptm_mgau_t *s, mfcc_t **z, int frame) { int i, j; /* First evaluate top-N from previous frame. */ for (i = 0; i < s->g->n_mgau; ++i) for (j = 0; j < s->g->n_feat; ++j) eval_topn(s, i, j, z[j]); /* If frame downsampling is in effect, possibly do nothing else. */ if (frame % s->ds_ratio) return 0; /* Evaluate remaining codebooks. */ for (i = 0; i < s->g->n_mgau; ++i) { if (bitvec_is_clear(s->f->mgau_active, i)) continue; for (j = 0; j < s->g->n_feat; ++j) { eval_cb(s, i, j, z[j]); } } return 0; } /** * Normalize densities to produce "posterior probabilities", * i.e. things with a reasonable dynamic range, then scale and * clamp them to the acceptable range. This is actually done * solely to ensure that we can use fast_logmath_add(). Note that * unless we share the same normalizer across all codebooks for * each feature stream we get defective scores (that's why these * loops are inside out - doing it per-feature should give us * greater precision). */ static int ptm_mgau_codebook_norm(ptm_mgau_t *s, mfcc_t **z, int frame) { int i, j; for (j = 0; j < s->g->n_feat; ++j) { int32 norm = WORST_SCORE; for (i = 0; i < s->g->n_mgau; ++i) { if (bitvec_is_clear(s->f->mgau_active, i)) continue; if (norm < s->f->topn[i][j][0].score >> SENSCR_SHIFT) norm = s->f->topn[i][j][0].score >> SENSCR_SHIFT; } assert(norm != WORST_SCORE); for (i = 0; i < s->g->n_mgau; ++i) { int32 k; if (bitvec_is_clear(s->f->mgau_active, i)) continue; for (k = 0; k < s->max_topn; ++k) { s->f->topn[i][j][k].score >>= SENSCR_SHIFT; s->f->topn[i][j][k].score -= norm; s->f->topn[i][j][k].score = -s->f->topn[i][j][k].score; if (s->f->topn[i][j][k].score > MAX_NEG_ASCR) s->f->topn[i][j][k].score = MAX_NEG_ASCR; } } } return 0; } static int ptm_mgau_calc_cb_active(ptm_mgau_t *s, uint8 *senone_active, int32 n_senone_active, int compallsen) { int i, lastsen; if (compallsen) { bitvec_set_all(s->f->mgau_active, s->g->n_mgau); return 0; } bitvec_clear_all(s->f->mgau_active, s->g->n_mgau); for (lastsen = i = 0; i < n_senone_active; ++i) { int sen = senone_active[i] + lastsen; int cb = s->sen2cb[sen]; bitvec_set(s->f->mgau_active, cb); lastsen = sen; } E_DEBUG(1, ("Active codebooks:")); for (i = 0; i < s->g->n_mgau; ++i) { if (bitvec_is_clear(s->f->mgau_active, i)) continue; E_DEBUGCONT(1, (" %d", i)); } E_DEBUGCONT(1, ("\n")); return 0; } /** * Compute senone scores from top-N densities for active codebooks. */ static int ptm_mgau_senone_eval(ptm_mgau_t *s, int16 *senone_scores, uint8 *senone_active, int32 n_senone_active, int compall) { int i, lastsen, bestscore; memset(senone_scores, 0, s->n_sen * sizeof(*senone_scores)); /* FIXME: This is the non-cache-efficient way to do this. We want * to evaluate one codeword at a time but this requires us to have * a reverse codebook to senone mapping, which we don't have * (yet), since different codebooks have different top-N * codewords. */ if (compall) n_senone_active = s->n_sen; bestscore = 0x7fffffff; for (lastsen = i = 0; i < n_senone_active; ++i) { int sen, f, cb; int ascore; if (compall) sen = i; else sen = senone_active[i] + lastsen; lastsen = sen; cb = s->sen2cb[sen]; if (bitvec_is_clear(s->f->mgau_active, cb)) { int j; /* Because senone_active is deltas we can't really "knock * out" senones from pruned codebooks, and in any case, * it wouldn't make any difference to the search code, * which doesn't expect senone_active to change. */ for (f = 0; f < s->g->n_feat; ++f) { for (j = 0; j < s->max_topn; ++j) { s->f->topn[cb][f][j].score = MAX_NEG_ASCR; } } } /* For each feature, log-sum codeword scores + mixw to get * feature density, then sum (multiply) to get ascore */ ascore = 0; for (f = 0; f < s->g->n_feat; ++f) { ptm_topn_t *topn; int j, fden = 0; topn = s->f->topn[cb][f]; for (j = 0; j < s->max_topn; ++j) { int mixw; /* Find mixture weight for this codeword. */ if (s->mixw_cb) { int dcw = s->mixw[f][topn[j].cw][sen/2]; dcw = (dcw & 1) ? dcw >> 4 : dcw & 0x0f; mixw = s->mixw_cb[dcw]; } else { mixw = s->mixw[f][topn[j].cw][sen]; } if (j == 0) fden = mixw + topn[j].score; else fden = fast_logmath_add(s->lmath_8b, fden, mixw + topn[j].score); E_DEBUG(3, ("fden[%d][%d] l+= %d + %d = %d\n", sen, f, mixw, topn[j].score, fden)); } ascore += fden; } if (ascore < bestscore) bestscore = ascore; senone_scores[sen] = ascore; } /* Normalize the scores again (finishing the job we started above * in ptm_mgau_codebook_eval...) */ for (i = 0; i < s->n_sen; ++i) { senone_scores[i] -= bestscore; } return 0; } /** * Compute senone scores for the active senones. */ int32 ptm_mgau_frame_eval(ps_mgau_t *ps, int16 *senone_scores, uint8 *senone_active, int32 n_senone_active, mfcc_t ** featbuf, int32 frame, int32 compallsen) { ptm_mgau_t *s = (ptm_mgau_t *)ps; int fast_eval_idx; /* Find the appropriate frame in the rotating history buffer * corresponding to the requested input frame. No bounds checking * is done here, which just means you'll get semi-random crap if * you request a frame in the future or one that's too far in the * past. Since the history buffer is just used for fast match * that might not be fatal. */ fast_eval_idx = frame % s->n_fast_hist; s->f = s->hist + fast_eval_idx; /* Compute the top-N codewords for every codebook, unless this * is a past frame, in which case we already have them (we * hope!) */ if (frame >= ps_mgau_base(ps)->frame_idx) { ptm_fast_eval_t *lastf; /* Get the previous frame's top-N information (on the * first frame of the input this is just all WORST_DIST, * no harm in that) */ if (fast_eval_idx == 0) lastf = s->hist + s->n_fast_hist - 1; else lastf = s->hist + fast_eval_idx - 1; /* Copy in initial top-N info */ memcpy(s->f->topn[0][0], lastf->topn[0][0], s->g->n_mgau * s->g->n_feat * s->max_topn * sizeof(ptm_topn_t)); /* Generate initial active codebook list (this might not be * necessary) */ ptm_mgau_calc_cb_active(s, senone_active, n_senone_active, compallsen); /* Now evaluate top-N, prune, and evaluate remaining codebooks. */ ptm_mgau_codebook_eval(s, featbuf, frame); ptm_mgau_codebook_norm(s, featbuf, frame); } /* Evaluate intersection of active senones and active codebooks. */ ptm_mgau_senone_eval(s, senone_scores, senone_active, n_senone_active, compallsen); return 0; } static int32 read_sendump(ptm_mgau_t *s, bin_mdef_t *mdef, char const *file) { FILE *fp; char line[1000]; int32 i, n, r, c; int32 do_swap, do_mmap; size_t offset; int n_clust = 0; int n_feat = s->g->n_feat; int n_density = s->g->n_density; int n_sen = bin_mdef_n_sen(mdef); int n_bits = 8; s->n_sen = n_sen; /* FIXME: Should have been done earlier */ do_mmap = cmd_ln_boolean_r(s->config, "-mmap"); if ((fp = fopen(file, "rb")) == NULL) return -1; E_INFO("Loading senones from dump file %s\n", file); /* Read title size, title */ if (fread(&n, sizeof(int32), 1, fp) != 1) { E_ERROR_SYSTEM("Failed to read title size from %s", file); goto error_out; } /* This is extremely bogus */ do_swap = 0; if (n < 1 || n > 999) { SWAP_INT32(&n); if (n < 1 || n > 999) { E_ERROR("Title length %x in dump file %s out of range\n", n, file); goto error_out; } do_swap = 1; } if (fread(line, sizeof(char), n, fp) != n) { E_ERROR_SYSTEM("Cannot read title"); goto error_out; } if (line[n - 1] != '\0') { E_ERROR("Bad title in dump file\n"); goto error_out; } E_INFO("%s\n", line); /* Read header size, header */ if (fread(&n, sizeof(n), 1, fp) != 1) { E_ERROR_SYSTEM("Failed to read header size from %s", file); goto error_out; } if (do_swap) SWAP_INT32(&n); if (fread(line, sizeof(char), n, fp) != n) { E_ERROR_SYSTEM("Cannot read header"); goto error_out; } if (line[n - 1] != '\0') { E_ERROR("Bad header in dump file\n"); goto error_out; } /* Read other header strings until string length = 0 */ for (;;) { if (fread(&n, sizeof(n), 1, fp) != 1) { E_ERROR_SYSTEM("Failed to read header string size from %s", file); goto error_out; } if (do_swap) SWAP_INT32(&n); if (n == 0) break; if (fread(line, sizeof(char), n, fp) != n) { E_ERROR_SYSTEM("Cannot read header"); goto error_out; } /* Look for a cluster count, if present */ if (!strncmp(line, "feature_count ", strlen("feature_count "))) { n_feat = atoi(line + strlen("feature_count ")); } if (!strncmp(line, "mixture_count ", strlen("mixture_count "))) { n_density = atoi(line + strlen("mixture_count ")); } if (!strncmp(line, "model_count ", strlen("model_count "))) { n_sen = atoi(line + strlen("model_count ")); } if (!strncmp(line, "cluster_count ", strlen("cluster_count "))) { n_clust = atoi(line + strlen("cluster_count ")); } if (!strncmp(line, "cluster_bits ", strlen("cluster_bits "))) { n_bits = atoi(line + strlen("cluster_bits ")); } } /* Defaults for #rows, #columns in mixw array. */ c = n_sen; r = n_density; if (n_clust == 0) { /* Older mixw files have them here, and they might be padded. */ if (fread(&r, sizeof(r), 1, fp) != 1) { E_ERROR_SYSTEM("Cannot read #rows"); goto error_out; } if (do_swap) SWAP_INT32(&r); if (fread(&c, sizeof(c), 1, fp) != 1) { E_ERROR_SYSTEM("Cannot read #columns"); goto error_out; } if (do_swap) SWAP_INT32(&c); E_INFO("Rows: %d, Columns: %d\n", r, c); } if (n_feat != s->g->n_feat) { E_ERROR("Number of feature streams mismatch: %d != %d\n", n_feat, s->g->n_feat); goto error_out; } if (n_density != s->g->n_density) { E_ERROR("Number of densities mismatch: %d != %d\n", n_density, s->g->n_density); goto error_out; } if (n_sen != s->n_sen) { E_ERROR("Number of senones mismatch: %d != %d\n", n_sen, s->n_sen); goto error_out; } if (!((n_clust == 0) || (n_clust == 15) || (n_clust == 16))) { E_ERROR("Cluster count must be 0, 15, or 16\n"); goto error_out; } if (n_clust == 15) ++n_clust; if (!((n_bits == 8) || (n_bits == 4))) { E_ERROR("Cluster count must be 4 or 8\n"); goto error_out; } if (do_mmap) { E_INFO("Using memory-mapped I/O for senones\n"); } offset = ftell(fp); /* Allocate memory for pdfs (or memory map them) */ if (do_mmap) { s->sendump_mmap = mmio_file_read(file); /* Get cluster codebook if any. */ if (n_clust) { s->mixw_cb = ((uint8 *) mmio_file_ptr(s->sendump_mmap)) + offset; offset += n_clust; } } else { /* Get cluster codebook if any. */ if (n_clust) { s->mixw_cb = ckd_calloc(1, n_clust); if (fread(s->mixw_cb, 1, n_clust, fp) != (size_t) n_clust) { E_ERROR("Failed to read %d bytes from sendump\n", n_clust); goto error_out; } } } /* Set up pointers, or read, or whatever */ if (s->sendump_mmap) { s->mixw = ckd_calloc_2d(n_feat, n_density, sizeof(*s->mixw)); for (n = 0; n < n_feat; n++) { int step = c; if (n_bits == 4) step = (step + 1) / 2; for (i = 0; i < r; i++) { s->mixw[n][i] = ((uint8 *) mmio_file_ptr(s->sendump_mmap)) + offset; offset += step; } } } else { s->mixw = ckd_calloc_3d(n_feat, n_density, n_sen, sizeof(***s->mixw)); /* Read pdf values and ids */ for (n = 0; n < n_feat; n++) { int step = c; if (n_bits == 4) step = (step + 1) / 2; for (i = 0; i < r; i++) { if (fread(s->mixw[n][i], sizeof(***s->mixw), step, fp) != (size_t) step) { E_ERROR("Failed to read %d bytes from sendump\n", step); goto error_out; } } } } fclose(fp); return 0; error_out: fclose(fp); return -1; } static int32 read_mixw(ptm_mgau_t * s, char const *file_name, double SmoothMin) { char **argname, **argval; char eofchk; FILE *fp; int32 byteswap, chksum_present; uint32 chksum; float32 *pdf; int32 i, f, c, n; int32 n_sen; int32 n_feat; int32 n_comp; int32 n_err; E_INFO("Reading mixture weights file '%s'\n", file_name); if ((fp = fopen(file_name, "rb")) == NULL) E_FATAL_SYSTEM("Failed to open mixture file '%s' for reading", file_name); /* Read header, including argument-value info and 32-bit byteorder magic */ if (bio_readhdr(fp, &argname, &argval, &byteswap) < 0) E_FATAL("Failed to read header from '%s'\n", file_name); /* Parse argument-value list */ chksum_present = 0; for (i = 0; argname[i]; i++) { if (strcmp(argname[i], "version") == 0) { if (strcmp(argval[i], MGAU_MIXW_VERSION) != 0) E_WARN("Version mismatch(%s): %s, expecting %s\n", file_name, argval[i], MGAU_MIXW_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; /* Read #senones, #features, #codewords, arraysize */ if ((bio_fread(&n_sen, sizeof(int32), 1, fp, byteswap, &chksum) != 1) || (bio_fread(&n_feat, sizeof(int32), 1, fp, byteswap, &chksum) != 1) || (bio_fread(&n_comp, sizeof(int32), 1, fp, byteswap, &chksum) != 1) || (bio_fread(&n, sizeof(int32), 1, fp, byteswap, &chksum) != 1)) { E_FATAL("bio_fread(%s) (arraysize) failed\n", file_name); } if (n_feat != s->g->n_feat) E_FATAL("#Features streams(%d) != %d\n", n_feat, s->g->n_feat); if (n != n_sen * n_feat * n_comp) { E_FATAL ("%s: #float32s(%d) doesn't match header dimensions: %d x %d x %d\n", file_name, i, n_sen, n_feat, n_comp); } /* n_sen = number of mixture weights per codeword, which is * fixed at the number of senones since we have only one codebook. */ s->n_sen = n_sen; /* Quantized mixture weight arrays. */ s->mixw = ckd_calloc_3d(s->g->n_feat, s->g->n_density, n_sen, sizeof(***s->mixw)); /* Temporary structure to read in floats before conversion to (int32) logs3 */ pdf = (float32 *) ckd_calloc(n_comp, sizeof(float32)); /* Read senone probs data, normalize, floor, convert to logs3, truncate to 8 bits */ n_err = 0; for (i = 0; i < n_sen; i++) { for (f = 0; f < n_feat; f++) { if (bio_fread((void *) pdf, sizeof(float32), n_comp, fp, byteswap, &chksum) != n_comp) { E_FATAL("bio_fread(%s) (arraydata) failed\n", file_name); } /* Normalize and floor */ if (vector_sum_norm(pdf, n_comp) <= 0.0) n_err++; vector_floor(pdf, n_comp, SmoothMin); vector_sum_norm(pdf, n_comp); /* Convert to LOG, quantize, and transpose */ for (c = 0; c < n_comp; c++) { int32 qscr; qscr = -logmath_log(s->lmath_8b, pdf[c]); if ((qscr > MAX_NEG_MIXW) || (qscr < 0)) qscr = MAX_NEG_MIXW; s->mixw[f][c][i] = qscr; } } } if (n_err > 0) E_WARN("Weight normalization failed for %d mixture weights components\n", n_err); ckd_free(pdf); if (chksum_present) bio_verify_chksum(fp, byteswap, chksum); if (fread(&eofchk, 1, 1, fp) == 1) E_FATAL("More data than expected in %s\n", file_name); fclose(fp); E_INFO("Read %d x %d x %d mixture weights\n", n_sen, n_feat, n_comp); return n_sen; } ps_mgau_t * ptm_mgau_init(acmod_t *acmod, bin_mdef_t *mdef) { ptm_mgau_t *s; ps_mgau_t *ps; char const *sendump_path; int i; s = ckd_calloc(1, sizeof(*s)); s->config = acmod->config; s->lmath = logmath_retain(acmod->lmath); /* Log-add table. */ s->lmath_8b = logmath_init(logmath_get_base(acmod->lmath), SENSCR_SHIFT, TRUE); if (s->lmath_8b == NULL) goto error_out; /* Ensure that it is only 8 bits wide so that fast_logmath_add() works. */ if (logmath_get_width(s->lmath_8b) != 1) { E_ERROR("Log base %f is too small to represent add table in 8 bits\n", logmath_get_base(s->lmath_8b)); goto error_out; } /* Read means and variances. */ if ((s->g = gauden_init(cmd_ln_str_r(s->config, "-mean"), cmd_ln_str_r(s->config, "-var"), cmd_ln_float32_r(s->config, "-varfloor"), s->lmath)) == NULL) goto error_out; /* We only support 256 codebooks or less (like 640k or 2GB, this * should be enough for anyone) */ if (s->g->n_mgau > 256) { E_INFO("Number of codebooks exceeds 256: %d\n", s->g->n_mgau); goto error_out; } if (s->g->n_mgau != bin_mdef_n_ciphone(mdef)) { E_INFO("Number of codebooks doesn't match number of ciphones, doesn't look like PTM: %d != %d\n", s->g->n_mgau, bin_mdef_n_ciphone(mdef)); goto error_out; } /* Verify n_feat and veclen, against acmod. */ if (s->g->n_feat != feat_dimension1(acmod->fcb)) { E_ERROR("Number of streams does not match: %d != %d\n", s->g->n_feat, feat_dimension1(acmod->fcb)); goto error_out; } for (i = 0; i < s->g->n_feat; ++i) { if (s->g->featlen[i] != feat_dimension2(acmod->fcb, i)) { E_ERROR("Dimension of stream %d does not match: %d != %d\n", s->g->featlen[i], feat_dimension2(acmod->fcb, i)); goto error_out; } } /* Read mixture weights. */ if ((sendump_path = cmd_ln_str_r(s->config, "-sendump"))) { if (read_sendump(s, acmod->mdef, sendump_path) < 0) { goto error_out; } } else { if (read_mixw(s, cmd_ln_str_r(s->config, "-mixw"), cmd_ln_float32_r(s->config, "-mixwfloor")) < 0) { goto error_out; } } s->ds_ratio = cmd_ln_int32_r(s->config, "-ds"); s->max_topn = cmd_ln_int32_r(s->config, "-topn"); E_INFO("Maximum top-N: %d\n", s->max_topn); /* Assume mapping of senones to their base phones, though this * will become more flexible in the future. */ s->sen2cb = ckd_calloc(s->n_sen, sizeof(*s->sen2cb)); for (i = 0; i < s->n_sen; ++i) s->sen2cb[i] = bin_mdef_sen2cimap(acmod->mdef, i); /* Allocate fast-match history buffers. We need enough for the * phoneme lookahead window, plus the current frame, plus one for * good measure? (FIXME: I don't remember why) */ s->n_fast_hist = cmd_ln_int32_r(s->config, "-pl_window") + 2; s->hist = ckd_calloc(s->n_fast_hist, sizeof(*s->hist)); /* s->f will be a rotating pointer into s->hist. */ s->f = s->hist; for (i = 0; i < s->n_fast_hist; ++i) { int j, k, m; /* Top-N codewords for every codebook and feature. */ s->hist[i].topn = ckd_calloc_3d(s->g->n_mgau, s->g->n_feat, s->max_topn, sizeof(ptm_topn_t)); /* Initialize them to sane (yet arbitrary) defaults. */ for (j = 0; j < s->g->n_mgau; ++j) { for (k = 0; k < s->g->n_feat; ++k) { for (m = 0; m < s->max_topn; ++m) { s->hist[i].topn[j][k][m].cw = m; s->hist[i].topn[j][k][m].score = WORST_DIST; } } } /* Active codebook mapping (just codebook, not features, at least not yet) */ s->hist[i].mgau_active = bitvec_alloc(s->g->n_mgau); /* Start with them all on, prune them later. */ bitvec_set_all(s->hist[i].mgau_active, s->g->n_mgau); } ps = (ps_mgau_t *)s; ps->vt = &ptm_mgau_funcs; return ps; error_out: ptm_mgau_free(ps_mgau_base(s)); return NULL; } int ptm_mgau_mllr_transform(ps_mgau_t *ps, ps_mllr_t *mllr) { ptm_mgau_t *s = (ptm_mgau_t *)ps; return gauden_mllr_transform(s->g, mllr, s->config); } void ptm_mgau_free(ps_mgau_t *ps) { int i; ptm_mgau_t *s = (ptm_mgau_t *)ps; logmath_free(s->lmath); logmath_free(s->lmath_8b); if (s->sendump_mmap) { ckd_free_2d(s->mixw); mmio_file_unmap(s->sendump_mmap); } else { ckd_free_3d(s->mixw); } ckd_free(s->sen2cb); for (i = 0; i < s->n_fast_hist; i++) { ckd_free_3d(s->hist[i].topn); bitvec_free(s->hist[i].mgau_active); } ckd_free(s->hist); gauden_free(s->g); ckd_free(s); } pocketsphinx-5prealpha/src/libpocketsphinx/tied_mgau_common.h0000664000175000017500000001033112504317100022042 00000000000000/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* ==================================================================== * Copyright (c) 1999-2010 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 tied_mgau_common.h * @brief Common code shared between SC and PTM (tied-state) models. */ #ifndef __TIED_MGAU_COMMON_H__ #define __TIED_MGAU_COMMON_H__ #include #include #define MGAU_MIXW_VERSION "1.0" /* Sphinx-3 file format version for mixw */ #define MGAU_PARAM_VERSION "1.0" /* Sphinx-3 file format version for mean/var */ #define NONE -1 #define WORST_DIST (int32)(0x80000000) /** Subtract GMM component b (assumed to be positive) and saturate */ #ifdef FIXED_POINT #define GMMSUB(a,b) \ (((a)-(b) > a) ? (INT_MIN) : ((a)-(b))) /** Add GMM component b (assumed to be positive) and saturate */ #define GMMADD(a,b) \ (((a)+(b) < a) ? (INT_MAX) : ((a)+(b))) #else #define GMMSUB(a,b) ((a)-(b)) #define GMMADD(a,b) ((a)+(b)) #endif #ifndef MIN #define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif #if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) #define LOGMATH_INLINE static inline #elif defined(_MSC_VER) #define LOGMATH_INLINE __inline #else #define LOGMATH_INLINE static #endif /* Allocate 0..159 for negated quantized mixture weights and 0..96 for * negated normalized acoustic scores, so that the combination of the * two (for a single mixture) can never exceed 255. */ #define MAX_NEG_MIXW 159 /**< Maximum negated mixture weight value. */ #define MAX_NEG_ASCR 96 /**< Maximum negated acoustic score value. */ /** * Quickly log-add two negated log probabilities. * * @param lmath The log-math object * @param mlx A negative log probability (0 < mlx < 255) * @param mly A negative log probability (0 < mly < 255) * @return -log(exp(-mlx)+exp(-mly)) * * We can do some extra-fast log addition since we know that * mixw+ascr is always less than 256 and hence x-y is also always less * than 256. This relies on some cooperation from logmath_t which * will never produce a logmath table smaller than 256 entries. * * Note that the parameters are *negated* log probabilities (and * hence, are positive numbers), as is the return value. This is the * key to the "fastness" of this function. */ LOGMATH_INLINE int fast_logmath_add(logmath_t *lmath, int mlx, int mly) { logadd_t *t = LOGMATH_TABLE(lmath); int d, r; /* d must be positive, obviously. */ if (mlx > mly) { d = (mlx - mly); r = mly; } else { d = (mly - mlx); r = mlx; } return r - (((uint8 *)t->table)[d]); } #endif /* __TIED_MGAU_COMMON_H__ */ pocketsphinx-5prealpha/src/libpocketsphinx/pocketsphinx.c0000664000175000017500000011606512551301442021265 00000000000000/* -*- 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. * * ==================================================================== * */ /* System headers. */ #include #include #ifdef HAVE_UNISTD_H #include #endif /* SphinxBase headers. */ #include #include #include #include #include #include /* Local headers. */ #include "cmdln_macro.h" #include "pocketsphinx.h" #include "pocketsphinx_internal.h" #include "ps_lattice_internal.h" #include "phone_loop_search.h" #include "kws_search.h" #include "fsg_search_internal.h" #include "ngram_search.h" #include "ngram_search_fwdtree.h" #include "ngram_search_fwdflat.h" #include "allphone_search.h" static const arg_t ps_args_def[] = { POCKETSPHINX_OPTIONS, CMDLN_EMPTY_OPTION }; /* I'm not sure what the portable way to do this is. */ static int file_exists(const char *path) { FILE *tmp; tmp = fopen(path, "rb"); if (tmp) fclose(tmp); return (tmp != NULL); } #ifdef MODELDIR static int hmmdir_exists(const char *path) { FILE *tmp; char *mdef = string_join(path, "/mdef", NULL); tmp = fopen(mdef, "rb"); if (tmp) fclose(tmp); ckd_free(mdef); return (tmp != NULL); } #endif static void ps_add_file(ps_decoder_t *ps, const char *arg, const char *hmmdir, const char *file) { char *tmp = string_join(hmmdir, "/", file, NULL); if (cmd_ln_str_r(ps->config, arg) == NULL && file_exists(tmp)) cmd_ln_set_str_r(ps->config, arg, tmp); ckd_free(tmp); } /* Feature and front-end parameters that may be in feat.params */ static const arg_t feat_defn[] = { waveform_to_cepstral_command_line_macro(), cepstral_to_feature_command_line_macro(), CMDLN_EMPTY_OPTION }; static void ps_expand_model_config(ps_decoder_t *ps) { char const *hmmdir, *featparams; /* Disable memory mapping on Blackfin (FIXME: should be uClinux in general). */ #ifdef __ADSPBLACKFIN__ E_INFO("Will not use mmap() on uClinux/Blackfin."); cmd_ln_set_boolean_r(ps->config, "-mmap", FALSE); #endif /* Get acoustic model filenames and add them to the command-line */ if ((hmmdir = cmd_ln_str_r(ps->config, "-hmm")) != NULL) { ps_add_file(ps, "-mdef", hmmdir, "mdef"); ps_add_file(ps, "-mean", hmmdir, "means"); ps_add_file(ps, "-var", hmmdir, "variances"); ps_add_file(ps, "-tmat", hmmdir, "transition_matrices"); ps_add_file(ps, "-mixw", hmmdir, "mixture_weights"); ps_add_file(ps, "-sendump", hmmdir, "sendump"); ps_add_file(ps, "-fdict", hmmdir, "noisedict"); ps_add_file(ps, "-lda", hmmdir, "feature_transform"); ps_add_file(ps, "-featparams", hmmdir, "feat.params"); ps_add_file(ps, "-senmgau", hmmdir, "senmgau"); } /* Look for feat.params in acoustic model dir. */ if ((featparams = cmd_ln_str_r(ps->config, "-featparams"))) { if (NULL != cmd_ln_parse_file_r(ps->config, feat_defn, featparams, FALSE)) E_INFO("Parsed model-specific feature parameters from %s\n", featparams); } /* Print here because acmod_init might load feat.params file */ if (err_get_logfp() != NULL) { cmd_ln_print_values_r(ps->config, err_get_logfp(), ps_args()); } } static void ps_free_searches(ps_decoder_t *ps) { if (ps->searches) { hash_iter_t *search_it; for (search_it = hash_table_iter(ps->searches); search_it; search_it = hash_table_iter_next(search_it)) { ps_search_free(hash_entry_val(search_it->ent)); } hash_table_free(ps->searches); } ps->searches = NULL; ps->search = NULL; } static ps_search_t * ps_find_search(ps_decoder_t *ps, char const *name) { void *search = NULL; hash_table_lookup(ps->searches, name, &search); return (ps_search_t *) search; } void ps_default_search_args(cmd_ln_t *config) { #ifdef MODELDIR /* Set default acoustic and language models. */ const char *hmmdir = cmd_ln_str_r(config, "-hmm"); if (hmmdir == NULL && hmmdir_exists(MODELDIR "/en-us/en-us")) { hmmdir = MODELDIR "/en-us/en-us"; cmd_ln_set_str_r(config, "-hmm", hmmdir); } const char *lmfile = cmd_ln_str_r(config, "-lm"); if (lmfile == NULL && !cmd_ln_str_r(config, "-fsg") && !cmd_ln_str_r(config, "-jsgf") && !cmd_ln_str_r(config, "-lmctl") && !cmd_ln_str_r(config, "-kws") && !cmd_ln_str_r(config, "-keyphrase") && file_exists(MODELDIR "/en-us/en-us.lm.bin")) { lmfile = MODELDIR "/en-us/en-us.lm.bin"; cmd_ln_set_str_r(config, "-lm", lmfile); } const char *dictfile = cmd_ln_str_r(config, "-dict"); if (dictfile == NULL && file_exists(MODELDIR "/en-us/cmudict-en-us.dict")) { dictfile = MODELDIR "/en-us/cmudict-en-us.dict"; cmd_ln_set_str_r(config, "-dict", dictfile); } /* Expand acoustic and language model filenames relative to installation * path. */ if (hmmdir && !path_is_absolute(hmmdir) && !hmmdir_exists(hmmdir)) { char *tmphmm = string_join(MODELDIR "/hmm/", hmmdir, NULL); if (hmmdir_exists(tmphmm)) { cmd_ln_set_str_r(config, "-hmm", tmphmm); } else { E_ERROR("Failed to find mdef file inside the model folder " "specified with -hmm `%s'\n", hmmdir); } ckd_free(tmphmm); } if (lmfile && !path_is_absolute(lmfile) && !file_exists(lmfile)) { char *tmplm = string_join(MODELDIR "/lm/", lmfile, NULL); cmd_ln_set_str_r(config, "-lm", tmplm); ckd_free(tmplm); } if (dictfile && !path_is_absolute(dictfile) && !file_exists(dictfile)) { char *tmpdict = string_join(MODELDIR "/lm/", dictfile, NULL); cmd_ln_set_str_r(config, "-dict", tmpdict); ckd_free(tmpdict); } #endif } int ps_reinit(ps_decoder_t *ps, cmd_ln_t *config) { const char *path; const char *keyphrase; int32 lw; if (config && config != ps->config) { cmd_ln_free_r(ps->config); ps->config = cmd_ln_retain(config); } err_set_debug_level(cmd_ln_int32_r(ps->config, "-debug")); /* 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 (config && cmd_ln_str_r(ps->config, "-logfn")) { if (err_set_logfile(cmd_ln_str_r(ps->config, "-logfn")) < 0) { E_ERROR("Cannot redirect log output\n"); return -1; } } ps->mfclogdir = cmd_ln_str_r(ps->config, "-mfclogdir"); ps->rawlogdir = cmd_ln_str_r(ps->config, "-rawlogdir"); ps->senlogdir = cmd_ln_str_r(ps->config, "-senlogdir"); /* Fill in some default arguments. */ ps_expand_model_config(ps); /* Free old searches (do this before other reinit) */ ps_free_searches(ps); ps->searches = hash_table_new(3, HASH_CASE_YES); /* Free old acmod. */ acmod_free(ps->acmod); ps->acmod = NULL; /* Free old dictionary (must be done after the two things above) */ dict_free(ps->dict); ps->dict = NULL; /* Free d2p */ dict2pid_free(ps->d2p); ps->d2p = NULL; /* Logmath computation (used in acmod and search) */ if (ps->lmath == NULL || (logmath_get_base(ps->lmath) != (float64)cmd_ln_float32_r(ps->config, "-logbase"))) { if (ps->lmath) logmath_free(ps->lmath); ps->lmath = logmath_init ((float64)cmd_ln_float32_r(ps->config, "-logbase"), 0, cmd_ln_boolean_r(ps->config, "-bestpath")); } /* Acoustic model (this is basically everything that * uttproc.c, senscr.c, and others used to do) */ if ((ps->acmod = acmod_init(ps->config, ps->lmath, NULL, NULL)) == NULL) return -1; if (cmd_ln_int32_r(ps->config, "-pl_window") > 0) { /* Initialize an auxiliary phone loop search, which will run in * "parallel" with FSG or N-Gram search. */ if ((ps->phone_loop = phone_loop_search_init(ps->config, ps->acmod, ps->dict)) == NULL) return -1; hash_table_enter(ps->searches, ps_search_name(ps->phone_loop), ps->phone_loop); } /* Dictionary and triphone mappings (depends on acmod). */ /* FIXME: pass config, change arguments, implement LTS, etc. */ if ((ps->dict = dict_init(ps->config, ps->acmod->mdef)) == NULL) return -1; if ((ps->d2p = dict2pid_build(ps->acmod->mdef, ps->dict)) == NULL) return -1; lw = cmd_ln_float32_r(ps->config, "-lw"); /* Determine whether we are starting out in FSG or N-Gram search mode. * If neither is used skip search initialization. */ /* Load KWS if one was specified in config */ if ((keyphrase = cmd_ln_str_r(ps->config, "-keyphrase"))) { if (ps_set_keyphrase(ps, PS_DEFAULT_SEARCH, keyphrase)) return -1; ps_set_search(ps, PS_DEFAULT_SEARCH); } if ((path = cmd_ln_str_r(ps->config, "-kws"))) { if (ps_set_kws(ps, PS_DEFAULT_SEARCH, path)) return -1; ps_set_search(ps, PS_DEFAULT_SEARCH); } /* Load an FSG if one was specified in config */ if ((path = cmd_ln_str_r(ps->config, "-fsg"))) { fsg_model_t *fsg = fsg_model_readfile(path, ps->lmath, lw); if (!fsg) return -1; if (ps_set_fsg(ps, PS_DEFAULT_SEARCH, fsg)) { fsg_model_free(fsg); return -1; } fsg_model_free(fsg); ps_set_search(ps, PS_DEFAULT_SEARCH); } /* Or load a JSGF grammar */ if ((path = cmd_ln_str_r(ps->config, "-jsgf"))) { if (ps_set_jsgf_file(ps, PS_DEFAULT_SEARCH, path) || ps_set_search(ps, PS_DEFAULT_SEARCH)) return -1; } if ((path = cmd_ln_str_r(ps->config, "-allphone"))) { if (ps_set_allphone_file(ps, PS_DEFAULT_SEARCH, path) || ps_set_search(ps, PS_DEFAULT_SEARCH)) return -1; } if ((path = cmd_ln_str_r(ps->config, "-lm")) && !cmd_ln_boolean_r(ps->config, "-allphone")) { if (ps_set_lm_file(ps, PS_DEFAULT_SEARCH, path) || ps_set_search(ps, PS_DEFAULT_SEARCH)) return -1; } if ((path = cmd_ln_str_r(ps->config, "-lmctl"))) { const char *name; ngram_model_t *lmset; ngram_model_set_iter_t *lmset_it; if (!(lmset = ngram_model_set_read(ps->config, path, ps->lmath))) { E_ERROR("Failed to read language model control file: %s\n", path); return -1; } for(lmset_it = ngram_model_set_iter(lmset); lmset_it; lmset_it = ngram_model_set_iter_next(lmset_it)) { ngram_model_t *lm = ngram_model_set_iter_model(lmset_it, &name); E_INFO("adding search %s\n", name); if (ps_set_lm(ps, name, lm)) { ngram_model_set_iter_free(lmset_it); ngram_model_free(lmset); return -1; } } ngram_model_free(lmset); name = cmd_ln_str_r(ps->config, "-lmname"); if (name) ps_set_search(ps, name); else { E_ERROR("No default LM name (-lmname) for `-lmctl'\n"); return -1; } } /* Initialize performance timer. */ ps->perf.name = "decode"; ptmr_init(&ps->perf); return 0; } ps_decoder_t * ps_init(cmd_ln_t *config) { ps_decoder_t *ps; if (!config) { E_ERROR("No configuration specified"); return NULL; } ps = ckd_calloc(1, sizeof(*ps)); ps->refcount = 1; if (ps_reinit(ps, config) < 0) { ps_free(ps); return NULL; } return ps; } arg_t const * ps_args(void) { return ps_args_def; } ps_decoder_t * ps_retain(ps_decoder_t *ps) { ++ps->refcount; return ps; } int ps_free(ps_decoder_t *ps) { if (ps == NULL) return 0; if (--ps->refcount > 0) return ps->refcount; ps_free_searches(ps); dict_free(ps->dict); dict2pid_free(ps->d2p); acmod_free(ps->acmod); logmath_free(ps->lmath); cmd_ln_free_r(ps->config); ckd_free(ps); return 0; } cmd_ln_t * ps_get_config(ps_decoder_t *ps) { return ps->config; } logmath_t * ps_get_logmath(ps_decoder_t *ps) { return ps->lmath; } fe_t * ps_get_fe(ps_decoder_t *ps) { return ps->acmod->fe; } feat_t * ps_get_feat(ps_decoder_t *ps) { return ps->acmod->fcb; } ps_mllr_t * ps_update_mllr(ps_decoder_t *ps, ps_mllr_t *mllr) { return acmod_update_mllr(ps->acmod, mllr); } int ps_set_search(ps_decoder_t *ps, const char *name) { ps_search_t *search = ps_find_search(ps, name); if (!search) return -1; ps->search = search; /* Set pl window depending on the search */ if (!strcmp(PS_SEARCH_TYPE_NGRAM, ps_search_type(search))) { ps->pl_window = cmd_ln_int32_r(ps->config, "-pl_window"); } else { ps->pl_window = 0; } return 0; } const char* ps_get_search(ps_decoder_t *ps) { hash_iter_t *search_it; const char* name = NULL; for (search_it = hash_table_iter(ps->searches); search_it; search_it = hash_table_iter_next(search_it)) { if (hash_entry_val(search_it->ent) == ps->search) { name = hash_entry_key(search_it->ent); break; } } return name; } int ps_unset_search(ps_decoder_t *ps, const char *name) { ps_search_t *search = hash_table_delete(ps->searches, name); if (!search) return -1; if (ps->search == search) ps->search = NULL; ps_search_free(search); return 0; } ps_search_iter_t * ps_search_iter(ps_decoder_t *ps) { return (ps_search_iter_t *)hash_table_iter(ps->searches); } ps_search_iter_t * ps_search_iter_next(ps_search_iter_t *itor) { return (ps_search_iter_t *)hash_table_iter_next((hash_iter_t *)itor); } const char* ps_search_iter_val(ps_search_iter_t *itor) { return (const char*)(((hash_iter_t *)itor)->ent->key); } void ps_search_iter_free(ps_search_iter_t *itor) { hash_table_iter_free((hash_iter_t *)itor); } ngram_model_t * ps_get_lm(ps_decoder_t *ps, const char *name) { ps_search_t *search = ps_find_search(ps, name); if (search && strcmp(PS_SEARCH_TYPE_NGRAM, ps_search_type(search))) return NULL; return search ? ((ngram_search_t *) search)->lmset : NULL; } fsg_model_t * ps_get_fsg(ps_decoder_t *ps, const char *name) { ps_search_t *search = ps_find_search(ps, name); if (search && strcmp(PS_SEARCH_TYPE_FSG, ps_search_type(search))) return NULL; return search ? ((fsg_search_t *) search)->fsg : NULL; } const char* ps_get_kws(ps_decoder_t *ps, const char* name) { ps_search_t *search = ps_find_search(ps, name); if (search && strcmp(PS_SEARCH_TYPE_KWS, ps_search_type(search))) return NULL; return search ? kws_search_get_keywords(search) : NULL; } static int set_search_internal(ps_decoder_t *ps, ps_search_t *search) { ps_search_t *old_search; if (!search) return -1; search->pls = ps->phone_loop; old_search = (ps_search_t *) hash_table_replace(ps->searches, ps_search_name(search), search); if (old_search != search) ps_search_free(old_search); return 0; } int ps_set_lm(ps_decoder_t *ps, const char *name, ngram_model_t *lm) { ps_search_t *search; search = ngram_search_init(name, lm, ps->config, ps->acmod, ps->dict, ps->d2p); return set_search_internal(ps, search); } int ps_set_lm_file(ps_decoder_t *ps, const char *name, const char *path) { ngram_model_t *lm; int result; lm = ngram_model_read(ps->config, path, NGRAM_AUTO, ps->lmath); if (!lm) return -1; result = ps_set_lm(ps, name, lm); ngram_model_free(lm); return result; } int ps_set_allphone(ps_decoder_t *ps, const char *name, ngram_model_t *lm) { ps_search_t *search; search = allphone_search_init(name, lm, ps->config, ps->acmod, ps->dict, ps->d2p); return set_search_internal(ps, search); } int ps_set_allphone_file(ps_decoder_t *ps, const char *name, const char *path) { ngram_model_t *lm; int result; lm = NULL; if (path) lm = ngram_model_read(ps->config, path, NGRAM_AUTO, ps->lmath); result = ps_set_allphone(ps, name, lm); if (lm) ngram_model_free(lm); return result; } int ps_set_kws(ps_decoder_t *ps, const char *name, const char *keyfile) { ps_search_t *search; search = kws_search_init(name, NULL, keyfile, ps->config, ps->acmod, ps->dict, ps->d2p); return set_search_internal(ps, search); } int ps_set_keyphrase(ps_decoder_t *ps, const char *name, const char *keyphrase) { ps_search_t *search; search = kws_search_init(name, keyphrase, NULL, ps->config, ps->acmod, ps->dict, ps->d2p); return set_search_internal(ps, search); } int ps_set_fsg(ps_decoder_t *ps, const char *name, fsg_model_t *fsg) { ps_search_t *search; search = fsg_search_init(name, fsg, ps->config, ps->acmod, ps->dict, ps->d2p); return set_search_internal(ps, search); } int ps_set_jsgf_file(ps_decoder_t *ps, const char *name, const char *path) { fsg_model_t *fsg; jsgf_rule_t *rule; char const *toprule; jsgf_t *jsgf = jsgf_parse_file(path, NULL); float lw; int result; if (!jsgf) return -1; rule = NULL; /* Take the -toprule if specified. */ if ((toprule = cmd_ln_str_r(ps->config, "-toprule"))) { rule = jsgf_get_rule(jsgf, toprule); if (rule == NULL) { E_ERROR("Start rule %s not found\n", toprule); jsgf_grammar_free(jsgf); return -1; } } else { rule = jsgf_get_public_rule(jsgf); if (rule == NULL) { E_ERROR("No public rules found in %s\n", path); jsgf_grammar_free(jsgf); return -1; } } lw = cmd_ln_float32_r(ps->config, "-lw"); fsg = jsgf_build_fsg(jsgf, rule, ps->lmath, lw); result = ps_set_fsg(ps, name, fsg); fsg_model_free(fsg); jsgf_grammar_free(jsgf); return result; } int ps_set_jsgf_string(ps_decoder_t *ps, const char *name, const char *jsgf_string) { fsg_model_t *fsg; jsgf_rule_t *rule; char const *toprule; jsgf_t *jsgf = jsgf_parse_string(jsgf_string, NULL); float lw; int result; if (!jsgf) return -1; rule = NULL; /* Take the -toprule if specified. */ if ((toprule = cmd_ln_str_r(ps->config, "-toprule"))) { rule = jsgf_get_rule(jsgf, toprule); if (rule == NULL) { E_ERROR("Start rule %s not found\n", toprule); return -1; } } else { rule = jsgf_get_public_rule(jsgf); if (rule == NULL) { E_ERROR("No public rules found in input string\n"); return -1; } } lw = cmd_ln_float32_r(ps->config, "-lw"); fsg = jsgf_build_fsg(jsgf, rule, ps->lmath, lw); result = ps_set_fsg(ps, name, fsg); fsg_model_free(fsg); return result; } int ps_load_dict(ps_decoder_t *ps, char const *dictfile, char const *fdictfile, char const *format) { cmd_ln_t *newconfig; dict2pid_t *d2p; dict_t *dict; hash_iter_t *search_it; /* Create a new scratch config to load this dict (so existing one * won't be affected if it fails) */ newconfig = cmd_ln_init(NULL, ps_args(), TRUE, NULL); cmd_ln_set_boolean_r(newconfig, "-dictcase", cmd_ln_boolean_r(ps->config, "-dictcase")); cmd_ln_set_str_r(newconfig, "-dict", dictfile); if (fdictfile) cmd_ln_set_str_r(newconfig, "-fdict", fdictfile); else cmd_ln_set_str_r(newconfig, "-fdict", cmd_ln_str_r(ps->config, "-fdict")); /* Try to load it. */ if ((dict = dict_init(newconfig, ps->acmod->mdef)) == NULL) { cmd_ln_free_r(newconfig); return -1; } /* Reinit the dict2pid. */ if ((d2p = dict2pid_build(ps->acmod->mdef, dict)) == NULL) { cmd_ln_free_r(newconfig); return -1; } /* Success! Update the existing config to reflect new dicts and * drop everything into place. */ cmd_ln_free_r(newconfig); cmd_ln_set_str_r(ps->config, "-dict", dictfile); if (fdictfile) cmd_ln_set_str_r(ps->config, "-fdict", fdictfile); dict_free(ps->dict); ps->dict = dict; dict2pid_free(ps->d2p); ps->d2p = d2p; /* And tell all searches to reconfigure themselves. */ for (search_it = hash_table_iter(ps->searches); search_it; search_it = hash_table_iter_next(search_it)) { if (ps_search_reinit(hash_entry_val(search_it->ent), dict, d2p) < 0) { hash_table_iter_free(search_it); return -1; } } return 0; } int ps_save_dict(ps_decoder_t *ps, char const *dictfile, char const *format) { return dict_write(ps->dict, dictfile, format); } int ps_add_word(ps_decoder_t *ps, char const *word, char const *phones, int update) { int32 wid; s3cipid_t *pron; hash_iter_t *search_it; char **phonestr, *tmp; int np, i, rv; /* Parse phones into an array of phone IDs. */ tmp = ckd_salloc(phones); np = str2words(tmp, NULL, 0); phonestr = ckd_calloc(np, sizeof(*phonestr)); str2words(tmp, phonestr, np); pron = ckd_calloc(np, sizeof(*pron)); for (i = 0; i < np; ++i) { pron[i] = bin_mdef_ciphone_id(ps->acmod->mdef, phonestr[i]); if (pron[i] == -1) { E_ERROR("Unknown phone %s in phone string %s\n", phonestr[i], tmp); ckd_free(phonestr); ckd_free(tmp); ckd_free(pron); return -1; } } /* No longer needed. */ ckd_free(phonestr); ckd_free(tmp); /* Add it to the dictionary. */ if ((wid = dict_add_word(ps->dict, word, pron, np)) == -1) { ckd_free(pron); return -1; } /* No longer needed. */ ckd_free(pron); /* Now we also have to add it to dict2pid. */ dict2pid_add_word(ps->d2p, wid); /* TODO: we definitely need to refactor this */ for (search_it = hash_table_iter(ps->searches); search_it; search_it = hash_table_iter_next(search_it)) { ps_search_t *search = hash_entry_val(search_it->ent); if (!strcmp(PS_SEARCH_TYPE_NGRAM, ps_search_type(search))) { ngram_model_t *lmset = ((ngram_search_t *) search)->lmset; if (ngram_model_add_word(lmset, word, 1.0) == NGRAM_INVALID_WID) { hash_table_iter_free(search_it); return -1; } } if (update) { if ((rv = ps_search_reinit(search, ps->dict, ps->d2p) < 0)) { hash_table_iter_free(search_it); return rv; } } } /* Rebuild the widmap and search tree if requested. */ return wid; } char * ps_lookup_word(ps_decoder_t *ps, const char *word) { s3wid_t wid; int32 phlen, j; char *phones; dict_t *dict = ps->dict; wid = dict_wordid(dict, word); if (wid == BAD_S3WID) return NULL; for (phlen = j = 0; j < dict_pronlen(dict, wid); ++j) phlen += strlen(dict_ciphone_str(dict, wid, j)) + 1; phones = ckd_calloc(1, phlen); for (j = 0; j < dict_pronlen(dict, wid); ++j) { strcat(phones, dict_ciphone_str(dict, wid, j)); if (j != dict_pronlen(dict, wid) - 1) strcat(phones, " "); } return phones; } long ps_decode_raw(ps_decoder_t *ps, FILE *rawfh, long maxsamps) { int16 *data; long total, pos, endpos; ps_start_stream(ps); ps_start_utt(ps); /* If this file is seekable or maxsamps is specified, then decode * the whole thing at once. */ if (maxsamps != -1) { data = ckd_calloc(maxsamps, sizeof(*data)); total = fread(data, sizeof(*data), maxsamps, rawfh); ps_process_raw(ps, data, total, FALSE, TRUE); ckd_free(data); } else if ((pos = ftell(rawfh)) >= 0) { fseek(rawfh, 0, SEEK_END); endpos = ftell(rawfh); fseek(rawfh, pos, SEEK_SET); maxsamps = endpos - pos; data = ckd_calloc(maxsamps, sizeof(*data)); total = fread(data, sizeof(*data), maxsamps, rawfh); ps_process_raw(ps, data, total, FALSE, TRUE); ckd_free(data); } else { /* Otherwise decode it in a stream. */ total = 0; while (!feof(rawfh)) { int16 data[256]; size_t nread; nread = fread(data, sizeof(*data), sizeof(data)/sizeof(*data), rawfh); ps_process_raw(ps, data, nread, FALSE, FALSE); total += nread; } } ps_end_utt(ps); return total; } int ps_start_stream(ps_decoder_t *ps) { acmod_start_stream(ps->acmod); return 0; } int ps_start_utt(ps_decoder_t *ps) { int rv; char uttid[16]; if (ps->acmod->state == ACMOD_STARTED || ps->acmod->state == ACMOD_PROCESSING) { E_ERROR("Utterance already started\n"); return -1; } if (ps->search == NULL) { E_ERROR("No search module is selected, did you forget to " "specify a language model or grammar?\n"); return -1; } ptmr_reset(&ps->perf); ptmr_start(&ps->perf); sprintf(uttid, "%09u", ps->uttno); ++ps->uttno; /* Remove any residual word lattice and hypothesis. */ ps_lattice_free(ps->search->dag); ps->search->dag = NULL; ps->search->last_link = NULL; ps->search->post = 0; ckd_free(ps->search->hyp_str); ps->search->hyp_str = NULL; if ((rv = acmod_start_utt(ps->acmod)) < 0) return rv; /* Start logging features and audio if requested. */ if (ps->mfclogdir) { char *logfn = string_join(ps->mfclogdir, "/", uttid, ".mfc", NULL); FILE *mfcfh; E_INFO("Writing MFCC log file: %s\n", logfn); if ((mfcfh = fopen(logfn, "wb")) == NULL) { E_ERROR_SYSTEM("Failed to open MFCC log file %s", logfn); ckd_free(logfn); return -1; } ckd_free(logfn); acmod_set_mfcfh(ps->acmod, mfcfh); } if (ps->rawlogdir) { char *logfn = string_join(ps->rawlogdir, "/", uttid, ".raw", NULL); FILE *rawfh; E_INFO("Writing raw audio log file: %s\n", logfn); if ((rawfh = fopen(logfn, "wb")) == NULL) { E_ERROR_SYSTEM("Failed to open raw audio log file %s", logfn); ckd_free(logfn); return -1; } ckd_free(logfn); acmod_set_rawfh(ps->acmod, rawfh); } if (ps->senlogdir) { char *logfn = string_join(ps->senlogdir, "/", uttid, ".sen", NULL); FILE *senfh; E_INFO("Writing senone score log file: %s\n", logfn); if ((senfh = fopen(logfn, "wb")) == NULL) { E_ERROR_SYSTEM("Failed to open senone score log file %s", logfn); ckd_free(logfn); return -1; } ckd_free(logfn); acmod_set_senfh(ps->acmod, senfh); } /* Start auxiliary phone loop search. */ if (ps->phone_loop) ps_search_start(ps->phone_loop); return ps_search_start(ps->search); } static int ps_search_forward(ps_decoder_t *ps) { int nfr; nfr = 0; while (ps->acmod->n_feat_frame > 0) { int k; if (ps->pl_window > 0) if ((k = ps_search_step(ps->phone_loop, ps->acmod->output_frame)) < 0) return k; if (ps->acmod->output_frame >= ps->pl_window) if ((k = ps_search_step(ps->search, ps->acmod->output_frame - ps->pl_window)) < 0) return k; acmod_advance(ps->acmod); ++ps->n_frame; ++nfr; } return nfr; } int ps_decode_senscr(ps_decoder_t *ps, FILE *senfh) { int nfr, n_searchfr; ps_start_utt(ps); n_searchfr = 0; acmod_set_insenfh(ps->acmod, senfh); while ((nfr = acmod_read_scores(ps->acmod)) > 0) { if ((nfr = ps_search_forward(ps)) < 0) { ps_end_utt(ps); return nfr; } n_searchfr += nfr; } ps_end_utt(ps); acmod_set_insenfh(ps->acmod, NULL); return n_searchfr; } int ps_process_raw(ps_decoder_t *ps, int16 const *data, size_t n_samples, int no_search, int full_utt) { int n_searchfr = 0; if (ps->acmod->state == ACMOD_IDLE) { E_ERROR("Failed to process data, utterance is not started. Use start_utt to start it\n"); return 0; } if (no_search) acmod_set_grow(ps->acmod, TRUE); while (n_samples) { int nfr; /* Process some data into features. */ if ((nfr = acmod_process_raw(ps->acmod, &data, &n_samples, full_utt)) < 0) return nfr; /* Score and search as much data as possible */ if (no_search) continue; if ((nfr = ps_search_forward(ps)) < 0) return nfr; n_searchfr += nfr; } return n_searchfr; } int ps_process_cep(ps_decoder_t *ps, mfcc_t **data, int32 n_frames, int no_search, int full_utt) { int n_searchfr = 0; if (no_search) acmod_set_grow(ps->acmod, TRUE); while (n_frames) { int nfr; /* Process some data into features. */ if ((nfr = acmod_process_cep(ps->acmod, &data, &n_frames, full_utt)) < 0) return nfr; /* Score and search as much data as possible */ if (no_search) continue; if ((nfr = ps_search_forward(ps)) < 0) return nfr; n_searchfr += nfr; } return n_searchfr; } int ps_end_utt(ps_decoder_t *ps) { int rv, i; if (ps->acmod->state == ACMOD_ENDED || ps->acmod->state == ACMOD_IDLE) { E_ERROR("Utterance is not started\n"); return -1; } acmod_end_utt(ps->acmod); /* Search any remaining frames. */ if ((rv = ps_search_forward(ps)) < 0) { ptmr_stop(&ps->perf); return rv; } /* Finish phone loop search. */ if (ps->phone_loop) { if ((rv = ps_search_finish(ps->phone_loop)) < 0) { ptmr_stop(&ps->perf); return rv; } } /* Search any frames remaining in the lookahead window. */ if (ps->acmod->output_frame >= ps->pl_window) { for (i = ps->acmod->output_frame - ps->pl_window; i < ps->acmod->output_frame; ++i) ps_search_step(ps->search, i); } /* Finish main search. */ if ((rv = ps_search_finish(ps->search)) < 0) { ptmr_stop(&ps->perf); return rv; } ptmr_stop(&ps->perf); /* Log a backtrace if requested. */ if (cmd_ln_boolean_r(ps->config, "-backtrace")) { const char* hyp; ps_seg_t *seg; int32 score; hyp = ps_get_hyp(ps, &score); if (hyp != NULL) { E_INFO("%s (%d)\n", hyp, score); E_INFO_NOFN("%-20s %-5s %-5s %-5s %-10s %-10s %-3s\n", "word", "start", "end", "pprob", "ascr", "lscr", "lback"); for (seg = ps_seg_iter(ps, &score); seg; seg = ps_seg_next(seg)) { char const *word; int sf, ef; int32 post, lscr, ascr, lback; word = ps_seg_word(seg); ps_seg_frames(seg, &sf, &ef); post = ps_seg_prob(seg, &ascr, &lscr, &lback); E_INFO_NOFN("%-20s %-5d %-5d %-1.3f %-10d %-10d %-3d\n", word, sf, ef, logmath_exp(ps_get_logmath(ps), post), ascr, lscr, lback); } } } return rv; } char const * ps_get_hyp(ps_decoder_t *ps, int32 *out_best_score) { char const *hyp; ptmr_start(&ps->perf); hyp = ps_search_hyp(ps->search, out_best_score, NULL); ptmr_stop(&ps->perf); return hyp; } char const * ps_get_hyp_final(ps_decoder_t *ps, int32 *out_is_final) { char const *hyp; ptmr_start(&ps->perf); hyp = ps_search_hyp(ps->search, NULL, out_is_final); ptmr_stop(&ps->perf); return hyp; } int32 ps_get_prob(ps_decoder_t *ps) { int32 prob; ptmr_start(&ps->perf); prob = ps_search_prob(ps->search); ptmr_stop(&ps->perf); return prob; } ps_seg_t * ps_seg_iter(ps_decoder_t *ps, int32 *out_best_score) { ps_seg_t *itor; ptmr_start(&ps->perf); itor = ps_search_seg_iter(ps->search, out_best_score); ptmr_stop(&ps->perf); return itor; } ps_seg_t * ps_seg_next(ps_seg_t *seg) { return ps_search_seg_next(seg); } char const * ps_seg_word(ps_seg_t *seg) { return seg->word; } void ps_seg_frames(ps_seg_t *seg, int *out_sf, int *out_ef) { int uf; uf = acmod_stream_offset(seg->search->acmod); if (out_sf) *out_sf = seg->sf + uf; if (out_ef) *out_ef = seg->ef + uf; } int32 ps_seg_prob(ps_seg_t *seg, int32 *out_ascr, int32 *out_lscr, int32 *out_lback) { if (out_ascr) *out_ascr = seg->ascr; if (out_lscr) *out_lscr = seg->lscr; if (out_lback) *out_lback = seg->lback; return seg->prob; } void ps_seg_free(ps_seg_t *seg) { ps_search_seg_free(seg); } ps_lattice_t * ps_get_lattice(ps_decoder_t *ps) { return ps_search_lattice(ps->search); } ps_nbest_t * ps_nbest(ps_decoder_t *ps, int sf, int ef, char const *ctx1, char const *ctx2) { ps_lattice_t *dag; ngram_model_t *lmset; ps_astar_t *nbest; float32 lwf; int32 w1, w2; if (ps->search == NULL) return NULL; if ((dag = ps_get_lattice(ps)) == NULL) return NULL; /* FIXME: This is all quite specific to N-Gram search. Either we * should make N-best a method for each search module or it needs * to be abstracted to work for N-Gram and FSG. */ if (0 != strcmp(ps_search_type(ps->search), PS_SEARCH_TYPE_NGRAM)) { lmset = NULL; lwf = 1.0f; } else { lmset = ((ngram_search_t *)ps->search)->lmset; lwf = ((ngram_search_t *)ps->search)->bestpath_fwdtree_lw_ratio; } w1 = ctx1 ? dict_wordid(ps_search_dict(ps->search), ctx1) : -1; w2 = ctx2 ? dict_wordid(ps_search_dict(ps->search), ctx2) : -1; nbest = ps_astar_start(dag, lmset, lwf, sf, ef, w1, w2); return (ps_nbest_t *)nbest; } void ps_nbest_free(ps_nbest_t *nbest) { ps_astar_finish(nbest); } ps_nbest_t * ps_nbest_next(ps_nbest_t *nbest) { ps_latpath_t *next; next = ps_astar_next(nbest); if (next == NULL) { ps_nbest_free(nbest); return NULL; } return nbest; } char const * ps_nbest_hyp(ps_nbest_t *nbest, int32 *out_score) { assert(nbest != NULL); if (nbest->top == NULL) return NULL; if (out_score) *out_score = nbest->top->score; return ps_astar_hyp(nbest, nbest->top); } ps_seg_t * ps_nbest_seg(ps_nbest_t *nbest, int32 *out_score) { if (nbest->top == NULL) return NULL; if (out_score) *out_score = nbest->top->score; return ps_astar_seg_iter(nbest, nbest->top, 1.0); } int ps_get_n_frames(ps_decoder_t *ps) { return ps->acmod->output_frame + 1; } void ps_get_utt_time(ps_decoder_t *ps, double *out_nspeech, double *out_ncpu, double *out_nwall) { int32 frate; frate = cmd_ln_int32_r(ps->config, "-frate"); *out_nspeech = (double)ps->acmod->output_frame / frate; *out_ncpu = ps->perf.t_cpu; *out_nwall = ps->perf.t_elapsed; } void ps_get_all_time(ps_decoder_t *ps, double *out_nspeech, double *out_ncpu, double *out_nwall) { int32 frate; frate = cmd_ln_int32_r(ps->config, "-frate"); *out_nspeech = (double)ps->n_frame / frate; *out_ncpu = ps->perf.t_tot_cpu; *out_nwall = ps->perf.t_tot_elapsed; } uint8 ps_get_in_speech(ps_decoder_t *ps) { return fe_get_vad_state(ps->acmod->fe); } void ps_search_init(ps_search_t *search, ps_searchfuncs_t *vt, const char *type, const char *name, cmd_ln_t *config, acmod_t *acmod, dict_t *dict, dict2pid_t *d2p) { search->vt = vt; search->name = ckd_salloc(name); search->type = ckd_salloc(type); search->config = config; search->acmod = acmod; if (d2p) search->d2p = dict2pid_retain(d2p); else search->d2p = NULL; if (dict) { search->dict = dict_retain(dict); search->start_wid = dict_startwid(dict); search->finish_wid = dict_finishwid(dict); search->silence_wid = dict_silwid(dict); search->n_words = dict_size(dict); } else { search->dict = NULL; search->start_wid = search->finish_wid = search->silence_wid = -1; search->n_words = 0; } } void ps_search_base_free(ps_search_t *search) { /* FIXME: We will have refcounting on acmod, config, etc, at which * point we will free them here too. */ ckd_free(search->name); ckd_free(search->type); dict_free(search->dict); dict2pid_free(search->d2p); ckd_free(search->hyp_str); ps_lattice_free(search->dag); } void ps_search_base_reinit(ps_search_t *search, dict_t *dict, dict2pid_t *d2p) { dict_free(search->dict); dict2pid_free(search->d2p); /* FIXME: _retain() should just return NULL if passed NULL. */ if (dict) { search->dict = dict_retain(dict); search->start_wid = dict_startwid(dict); search->finish_wid = dict_finishwid(dict); search->silence_wid = dict_silwid(dict); search->n_words = dict_size(dict); } else { search->dict = NULL; search->start_wid = search->finish_wid = search->silence_wid = -1; search->n_words = 0; } if (d2p) search->d2p = dict2pid_retain(d2p); else search->d2p = NULL; } void ps_set_rawdata_size(ps_decoder_t *ps, int32 size) { acmod_set_rawdata_size(ps->acmod, size); } void ps_get_rawdata(ps_decoder_t *ps, int16 **buffer, int32 *size) { acmod_get_rawdata(ps->acmod, buffer, size); } pocketsphinx-5prealpha/src/libpocketsphinx/mdef.h0000664000175000017500000002363712504317100017464 00000000000000/* -*- 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. * * ==================================================================== * */ /* * mdef.h -- HMM model definition: base (CI) phones and triphones * * ********************************************** * CMU ARPA Speech Project * * Copyright (c) 1999 Carnegie Mellon University. * ALL RIGHTS RESERVED. * ********************************************** */ #ifndef __MDEF_H__ #define __MDEF_H__ /* System headers. */ #include /* SphinxBase headers. */ #include #ifdef __cplusplus extern "C" { #endif /** \file mdef.h * \brief Model definition */ /** \enum word_posn_t * \brief Union of different type of word position */ typedef enum { WORD_POSN_INTERNAL = 0, /**< Internal phone of word */ WORD_POSN_BEGIN = 1, /**< Beginning phone of word */ WORD_POSN_END = 2, /**< Ending phone of word */ WORD_POSN_SINGLE = 3, /**< Single phone word (i.e. begin & end) */ WORD_POSN_UNDEFINED = 4 /**< Undefined value, used for initial conditions, etc */ } word_posn_t; #define N_WORD_POSN 4 /**< total # of word positions (excluding undefined) */ #define WPOS_NAME "ibesu" /**< Printable code for each word position above */ #define S3_SILENCE_CIPHONE "SIL" /**< Hard-coded silence CI phone name */ /** \struct ciphone_t \brief CI phone information */ typedef struct { char *name; /**< The name of the CI phone */ int32 filler; /**< Whether a filler phone; if so, can be substituted by silence phone in left or right context position */ } ciphone_t; /** * \struct phone_t * \brief Triphone information, including base phones as a subset. For the latter, lc, rc and wpos are non-existent. */ typedef struct { int32 ssid; /**< State sequence (or senone sequence) ID, considering the n_emit_state senone-ids are a unit. The senone sequences themselves are in a separate table */ int32 tmat; /**< Transition matrix id */ int16 ci, lc, rc; /**< Base, left, right context ciphones */ word_posn_t wpos; /**< Word position */ } phone_t; /** * \struct ph_rc_t * \brief Structures needed for mapping into pid. (See mdef_t.wpos_ci_lclist below.) (lc = left context; rc = right context.) * NOTE: Both ph_rc_t and ph_lc_t FOR INTERNAL USE ONLY. */ typedef struct ph_rc_s { int16 rc; /**< Specific rc for a parent */ int32 pid; /**< Triphone id for above rc instance */ struct ph_rc_s *next; /**< Next rc entry for same parent */ } ph_rc_t; /** * \struct ph_lc_t * \brief Structures for storing the left context. */ typedef struct ph_lc_s { int16 lc; /**< Specific lc for a parent */ ph_rc_t *rclist; /**< rc list for above lc instance */ struct ph_lc_s *next; /**< Next lc entry for same parent */ } ph_lc_t; /** The main model definition structure */ /** \struct mdef_t \brief strcture for storing the model definition. */ typedef struct { int32 n_ciphone; /**< number basephones actually present */ int32 n_phone; /**< number basephones + number triphones actually present */ int32 n_emit_state; /**< number emitting states per phone */ int32 n_ci_sen; /**< number CI senones; these are the first */ int32 n_sen; /**< number senones (CI+CD) */ int32 n_tmat; /**< number transition matrices */ hash_table_t *ciphone_ht; /**< Hash table for mapping ciphone strings to ids */ ciphone_t *ciphone; /**< CI-phone information for all ciphones */ phone_t *phone; /**< Information for all ciphones and triphones */ uint16 **sseq; /**< Unique state (or senone) sequences in this model, shared among all phones/triphones */ int32 n_sseq; /**< No. of unique senone sequences in this model */ int16 *cd2cisen; /**< Parent CI-senone id for each senone; the first n_ci_sen are identity mappings; the CD-senones are contiguous for each parent CI-phone */ int16 *sen2cimap; /**< Parent CI-phone for each senone (CI or CD) */ int16 sil; /**< SILENCE_CIPHONE id */ ph_lc_t ***wpos_ci_lclist; /**< wpos_ci_lclist[wpos][ci] = list of lc for . wpos_ci_lclist[wpos][ci][lc].rclist = list of rc for . Only entries for the known triphones are created to conserve space. (NOTE: FOR INTERNAL USE ONLY.) */ } mdef_t; /** Access macros; not meant for arbitrary use */ #define mdef_is_fillerphone(m,p) ((m)->ciphone[p].filler) #define mdef_n_ciphone(m) ((m)->n_ciphone) #define mdef_n_phone(m) ((m)->n_phone) #define mdef_n_sseq(m) ((m)->n_sseq) #define mdef_n_emit_state(m) ((m)->n_emit_state) #define mdef_n_sen(m) ((m)->n_sen) #define mdef_n_tmat(m) ((m)->n_tmat) #define mdef_pid2ssid(m,p) ((m)->phone[p].ssid) #define mdef_pid2tmatid(m,p) ((m)->phone[p].tmat) #define mdef_silphone(m) ((m)->sil) #define mdef_sen2cimap(m) ((m)->sen2cimap) #define mdef_sseq2sen(m,ss,pos) ((m)->sseq[ss][pos]) #define mdef_pid2ci(m,p) ((m)->phone[p].ci) #define mdef_cd2cisen(m) ((m)->cd2cisen) /** * Initialize the phone structure from the given model definition file. * It should be treated as a READ-ONLY structure. * @return pointer to the phone structure created. */ mdef_t *mdef_init (char *mdeffile, /**< In: Model definition file */ int breport /**< In: whether to report the progress or not */ ); /** Get the ciphone id given a string name @return ciphone id for the given ciphone string name */ int mdef_ciphone_id(mdef_t *m, /**< In: Model structure being queried */ char *ciphone /**< In: ciphone for which id wanted */ ); /** Get the phone string given the ci phone id. @return: READ-ONLY ciphone string name for the given ciphone id */ const char *mdef_ciphone_str(mdef_t *m, /**< In: Model structure being queried */ int ci /**< In: ciphone id for which name wanted */ ); /** Decide whether the phone is ci phone. @return 1 if given triphone argument is a ciphone, 0 if not, -1 if error */ int mdef_is_ciphone (mdef_t *m, /**< In: Model structure being queried */ int p /**< In: triphone id being queried */ ); /** Decide whether the senone is a senone for a ci phone, or a ci senone @return 1 if a given senone is a ci senone */ int mdef_is_cisenone(mdef_t *m, /**< In: Model structure being queried */ int s /**< In: senone id being queried */ ); /** Decide the phone id given the left, right and base phones. @return: phone id for the given constituents if found, else BAD_S3PID */ int mdef_phone_id (mdef_t *m, /**< In: Model structure being queried */ int b, /**< In: base ciphone id */ int l, /**< In: left context ciphone id */ int r, /**< In: right context ciphone id */ word_posn_t pos /**< In: Word position */ ); /** * Create a phone string for the given phone (base or triphone) id in the given buf. * @return 0 if successful, -1 if error. */ int mdef_phone_str(mdef_t *m, /**< In: Model structure being queried */ int pid, /**< In: phone id being queried */ char *buf /**< Out: On return, buf has the string */ ); /** * Compare the underlying HMMs for two given phones (i.e., compare the two transition * matrix IDs and the individual state(senone) IDs). * @return 0 iff the HMMs are identical, -1 otherwise. */ int mdef_hmm_cmp (mdef_t *m, /**< In: Model being queried */ int p1, /**< In: One of the two triphones being compared */ int p2 /**< In: One of the two triphones being compared */ ); /** Report the model definition's parameters */ void mdef_report(mdef_t *m /**< In: model definition structure */ ); /** RAH, For freeing memory */ void mdef_free_recursive_lc (ph_lc_t *lc /**< In: A list of left context */ ); void mdef_free_recursive_rc (ph_rc_t *rc /**< In: A list of right context */ ); /** Free an mdef_t */ void mdef_free (mdef_t *mdef /**< In : The model definition*/ ); #ifdef __cplusplus } #endif #endif pocketsphinx-5prealpha/src/libpocketsphinx/fsg_lextree.h0000664000175000017500000002301412504317100021045 00000000000000/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* ==================================================================== * Copyright (c) 1999-2013 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_lextree.h -- The collection of all the lextrees for the entire FSM. * */ #ifndef __S2_FSG_LEXTREE_H__ #define __S2_FSG_LEXTREE_H__ /* SphinxBase headers. */ #include #include /* Local headers. */ #include "hmm.h" #include "dict.h" #include "dict2pid.h" /* * Compile-time constant determining the size of the * bitvector fsg_pnode_t.fsg_pnode_ctxt_t.bv. (See below.) * But it makes memory allocation simpler and more efficient. * Make it smaller (2) to save memory if your phoneset has less than * 64 phones. */ #define FSG_PNODE_CTXT_BVSZ 4 typedef struct { uint32 bv[FSG_PNODE_CTXT_BVSZ]; } fsg_pnode_ctxt_t; /* * All transitions (words) out of any given FSG state represented are by a * phonetic prefix lextree (except for epsilon or null transitions; they * are not part of the lextree). Lextree leaf nodes represent individual * FSG transitions, so no sharing is allowed at the leaf nodes. The FSG * transition probs are distributed along the lextree: the prob at a node * is the max of the probs of all leaf nodes (and, hence, FSG transitions) * reachable from that node. * * To conserve memory, the underlying HMMs with state-level information are * allocated only as needed. Root and leaf nodes must also account for all * the possible phonetic contexts, with an independent HMM for each distinct * context. */ typedef struct fsg_pnode_s { /* * If this is not a leaf node, the first successor (child) node. Otherwise * the parent FSG transition for which this is the leaf node (for figuring * the FSG destination state, and word emitted by the transition). A node * may have several children. The succ ptr gives just the first; the rest * are linked via the sibling ptr below. */ union { struct fsg_pnode_s *succ; fsg_link_t *fsglink; } next; /* * For simplicity of memory management (i.e., freeing the pnodes), all * pnodes allocated for all transitions out of a state are maintained in a * linear linked list through the alloc_next pointer. */ struct fsg_pnode_s *alloc_next; /* * The next node that is also a child of the parent of this node; NULL if * none. */ struct fsg_pnode_s *sibling; /* * The transition (log) probability to be incurred upon transitioning to * this node. (Transition probabilities are really associated with the * transitions. But a lextree node has exactly one incoming transition. * Hence, the prob can be associated with the node.) * This is a logs2(prob) value, and includes the language weight. */ int32 logs2prob; /* * The root and leaf positions associated with any transition have to deal * with multiple phonetic contexts. However, different contexts may result * in the same SSID (senone-seq ID), and can share a single pnode with that * SSID. But the pnode should track the set of context CI phones that share * it. Hence the fsg_pnode_ctxt_t bit-vector set-representation. (For * simplicity of implementation, its size is a compile-time constant for * now.) Single phone words would need a 2-D array of context, but that's * too expensive. For now, they simply use SIL as right context, so only * the left context is properly modelled. * (For word-internal phones, this field is unused, of course.) */ fsg_pnode_ctxt_t ctxt; uint16 ci_ext; /* This node's CIphone as viewed externally (context) */ uint8 ppos; /* Phoneme position in pronunciation */ uint8 leaf; /* Whether this is a leaf node */ /* HMM-state-level stuff here */ hmm_context_t *ctx; hmm_t hmm; } fsg_pnode_t; /* Access macros */ #define fsg_pnode_leaf(p) ((p)->leaf) #define fsg_pnode_logs2prob(p) ((p)->logs2prob) #define fsg_pnode_succ(p) ((p)->next.succ) #define fsg_pnode_fsglink(p) ((p)->next.fsglink) #define fsg_pnode_sibling(p) ((p)->sibling) #define fsg_pnode_hmmptr(p) (&((p)->hmm)) #define fsg_pnode_ci_ext(p) ((p)->ci_ext) #define fsg_pnode_ppos(p) ((p)->ppos) #define fsg_pnode_leaf(p) ((p)->leaf) #define fsg_pnode_ctxt(p) ((p)->ctxt) #define fsg_pnode_add_ctxt(p,c) ((p)->ctxt.bv[(c)>>5] |= (1 << ((c)&0x001f))) /* * The following is macroized because its called very frequently * ::: uint32 fsg_pnode_ctxt_sub (fsg_pnode_ctxt_t *src, fsg_pnode_ctxt_t *sub); */ /* * Subtract bitvector sub from bitvector src (src updated with the result). * Return 0 if result is all 0, non-zero otherwise. */ #if (FSG_PNODE_CTXT_BVSZ == 1) #define FSG_PNODE_CTXT_SUB(src,sub) \ ((src)->bv[0] = (~((sub)->bv[0]) & (src)->bv[0])) #elif (FSG_PNODE_CTXT_BVSZ == 2) #define FSG_PNODE_CTXT_SUB(src,sub) \ (((src)->bv[0] = (~((sub)->bv[0]) & (src)->bv[0])) | \ ((src)->bv[1] = (~((sub)->bv[1]) & (src)->bv[1]))) #elif (FSG_PNODE_CTXT_BVSZ == 4) #define FSG_PNODE_CTXT_SUB(src,sub) \ (((src)->bv[0] = (~((sub)->bv[0]) & (src)->bv[0])) | \ ((src)->bv[1] = (~((sub)->bv[1]) & (src)->bv[1])) | \ ((src)->bv[2] = (~((sub)->bv[2]) & (src)->bv[2])) | \ ((src)->bv[3] = (~((sub)->bv[3]) & (src)->bv[3]))) #else #define FSG_PNODE_CTXT_SUB(src,sub) fsg_pnode_ctxt_sub_generic((src),(sub)) #endif /** * Collection of lextrees for an FSG. */ typedef struct fsg_lextree_s { fsg_model_t *fsg; /**< The fsg for which this lextree is built. */ hmm_context_t *ctx; /**< HMM context structure. */ dict_t *dict; /**< Pronunciation dictionary for this FSG. */ dict2pid_t *d2p; /**< Context-dependent phone mappings for this FSG. */ bin_mdef_t *mdef; /**< Model definition (triphone mappings). */ /* * Left and right CIphone sets for each state. * Left context CIphones for a state S: If word W transitions into S, W's * final CIphone is in S's {lc}. Words transitioning out of S must consider * these left context CIphones. * Similarly, right contexts for state S: If word W transitions out of S, * W's first CIphone is in S's {rc}. Words transitioning into S must consider * these right contexts. * * NOTE: Words may transition into and out of S INDIRECTLY, with intermediate * null transitions. * NOTE: Single-phone words are difficult; only SILENCE right context is * modelled for them. * NOTE: Non-silence filler phones aren't included in these sets. Filler * words don't use context, and present the SILENCE phone as context to * adjacent words. */ int16 **lc; /**< Left context triphone mappings for FSG. */ int16 **rc; /**< Right context triphone mappings for FSG. */ fsg_pnode_t **root; /* root[s] = lextree representing all transitions out of state s. Note that the "tree" for each state is actually a collection of trees, linked via fsg_pnode_t.sibling (root[s]->sibling) */ fsg_pnode_t **alloc_head; /* alloc_head[s] = head of linear list of all pnodes allocated for state s */ int32 n_pnode; /* #HMM nodes in search structure */ int32 wip; int32 pip; } fsg_lextree_t; /* Access macros */ #define fsg_lextree_root(lt,s) ((lt)->root[s]) #define fsg_lextree_n_pnode(lt) ((lt)->n_pnode) /** * Create, initialize, and return a new phonetic lextree for the given FSG. */ fsg_lextree_t *fsg_lextree_init(fsg_model_t *fsg, dict_t *dict, dict2pid_t *d2p, bin_mdef_t *mdef, hmm_context_t *ctx, int32 wip, int32 pip); /** * Free lextrees for an FSG. */ void fsg_lextree_free(fsg_lextree_t *fsg); /** * Print an FSG lextree to a file for debugging. */ void fsg_lextree_dump(fsg_lextree_t *fsg, FILE *fh); /** * Mark the given pnode as inactive (for search). */ void fsg_psubtree_pnode_deactivate(fsg_pnode_t *pnode); /** * Set all flags on in the given context bitvector. */ void fsg_pnode_add_all_ctxt(fsg_pnode_ctxt_t *ctxt); /** * Generic variant for arbitrary size */ uint32 fsg_pnode_ctxt_sub_generic(fsg_pnode_ctxt_t *src, fsg_pnode_ctxt_t *sub); #endif pocketsphinx-5prealpha/src/libpocketsphinx/hmm.c0000664000175000017500000005630512504317100017323 00000000000000/* -*- 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 hmm.h Implementation of HMM base structure. */ /* System headers. */ #include #include #include #include /* SphinxBase headers. */ #include #include /* Local headers. */ #include "hmm.h" hmm_context_t * hmm_context_init(int32 n_emit_state, uint8 ** const *tp, int16 const *senscore, uint16 * const *sseq) { hmm_context_t *ctx; assert(n_emit_state > 0); if (n_emit_state > HMM_MAX_NSTATE) { E_ERROR("Number of emitting states must be <= %d\n", HMM_MAX_NSTATE); return NULL; } ctx = ckd_calloc(1, sizeof(*ctx)); ctx->n_emit_state = n_emit_state; ctx->tp = tp; ctx->senscore = senscore; ctx->sseq = sseq; ctx->st_sen_scr = ckd_calloc(n_emit_state, sizeof(*ctx->st_sen_scr)); return ctx; } void hmm_context_free(hmm_context_t *ctx) { if (ctx == NULL) return; ckd_free(ctx->st_sen_scr); ckd_free(ctx); } void hmm_init(hmm_context_t *ctx, hmm_t *hmm, int mpx, int ssid, int tmatid) { hmm->ctx = ctx; hmm->mpx = mpx; hmm->n_emit_state = ctx->n_emit_state; if (mpx) { int i; hmm->ssid = BAD_SSID; hmm->senid[0] = ssid; for (i = 1; i < hmm_n_emit_state(hmm); ++i) { hmm->senid[i] = BAD_SSID; } } else { hmm->ssid = ssid; memcpy(hmm->senid, ctx->sseq[ssid], hmm->n_emit_state * sizeof(*hmm->senid)); } hmm->tmatid = tmatid; hmm_clear(hmm); } void hmm_deinit(hmm_t *hmm) { } void hmm_dump(hmm_t * hmm, FILE * fp) { int32 i; if (hmm_is_mpx(hmm)) { fprintf(fp, "MPX "); for (i = 0; i < hmm_n_emit_state(hmm); i++) fprintf(fp, " %11d", hmm_senid(hmm, i)); fprintf(fp, " ( "); for (i = 0; i < hmm_n_emit_state(hmm); i++) fprintf(fp, "%d ", hmm_ssid(hmm, i)); fprintf(fp, ")\n"); } else { fprintf(fp, "SSID "); for (i = 0; i < hmm_n_emit_state(hmm); i++) fprintf(fp, " %11d", hmm_senid(hmm, i)); fprintf(fp, " (%d)\n", hmm_ssid(hmm, 0)); } if (hmm->ctx->senscore) { fprintf(fp, "SENSCR"); for (i = 0; i < hmm_n_emit_state(hmm); i++) fprintf(fp, " %11d", hmm_senscr(hmm, i)); fprintf(fp, "\n"); } fprintf(fp, "SCORES %11d", hmm_in_score(hmm)); for (i = 1; i < hmm_n_emit_state(hmm); i++) fprintf(fp, " %11d", hmm_score(hmm, i)); fprintf(fp, " %11d", hmm_out_score(hmm)); fprintf(fp, "\n"); fprintf(fp, "HISTID %11d", hmm_in_history(hmm)); for (i = 1; i < hmm_n_emit_state(hmm); i++) fprintf(fp, " %11d", hmm_history(hmm, i)); fprintf(fp, " %11d", hmm_out_history(hmm)); fprintf(fp, "\n"); if (hmm_in_score(hmm) > 0) fprintf(fp, "ALERT!! The input score %d is large than 0. Probably wrap around.\n", hmm_in_score(hmm)); if (hmm_out_score(hmm) > 0) fprintf(fp, "ALERT!! The output score %d is large than 0. Probably wrap around\n.", hmm_out_score(hmm)); fflush(fp); } void hmm_clear_scores(hmm_t * h) { int32 i; hmm_in_score(h) = WORST_SCORE; for (i = 1; i < hmm_n_emit_state(h); i++) hmm_score(h, i) = WORST_SCORE; hmm_out_score(h) = WORST_SCORE; h->bestscore = WORST_SCORE; } void hmm_clear(hmm_t * h) { int32 i; hmm_in_score(h) = WORST_SCORE; hmm_in_history(h) = -1; for (i = 1; i < hmm_n_emit_state(h); i++) { hmm_score(h, i) = WORST_SCORE; hmm_history(h, i) = -1; } hmm_out_score(h) = WORST_SCORE; hmm_out_history(h) = -1; h->bestscore = WORST_SCORE; h->frame = -1; } void hmm_enter(hmm_t *h, int32 score, int32 histid, int frame) { hmm_in_score(h) = score; hmm_in_history(h) = histid; hmm_frame(h) = frame; } void hmm_normalize(hmm_t *h, int32 bestscr) { int32 i; for (i = 0; i < hmm_n_emit_state(h); i++) { if (hmm_score(h, i) BETTER_THAN WORST_SCORE) hmm_score(h, i) -= bestscr; } if (hmm_out_score(h) BETTER_THAN WORST_SCORE) hmm_out_score(h) -= bestscr; } #define hmm_tprob_5st(i, j) (-tp[(i)*6+(j)]) #define nonmpx_senscr(i) (-senscore[sseq[i]]) static int32 hmm_vit_eval_5st_lr(hmm_t * hmm) { int16 const *senscore = hmm->ctx->senscore; uint8 const *tp = hmm->ctx->tp[hmm->tmatid][0]; uint16 const *sseq = hmm->senid; int32 s5, s4, s3, s2, s1, s0, t2, t1, t0, bestScore; /* It was the best of scores, it was the worst of scores. */ bestScore = WORST_SCORE; /* Cache problem here! */ s4 = hmm_score(hmm, 4) + nonmpx_senscr(4); s3 = hmm_score(hmm, 3) + nonmpx_senscr(3); /* Transitions into non-emitting state 5 */ if (s3 BETTER_THAN WORST_SCORE) { t1 = s4 + hmm_tprob_5st(4, 5); t2 = s3 + hmm_tprob_5st(3, 5); if (t1 BETTER_THAN t2) { s5 = t1; hmm_out_history(hmm) = hmm_history(hmm, 4); } else { s5 = t2; hmm_out_history(hmm) = hmm_history(hmm, 3); } if (s5 WORSE_THAN WORST_SCORE) s5 = WORST_SCORE; hmm_out_score(hmm) = s5; bestScore = s5; } s2 = hmm_score(hmm, 2) + nonmpx_senscr(2); /* All transitions into state 4 */ if (s2 BETTER_THAN WORST_SCORE) { t0 = s4 + hmm_tprob_5st(4, 4); t1 = s3 + hmm_tprob_5st(3, 4); t2 = s2 + hmm_tprob_5st(2, 4); if (t0 BETTER_THAN t1) { if (t2 BETTER_THAN t0) { s4 = t2; hmm_history(hmm, 4) = hmm_history(hmm, 2); } else s4 = t0; } else { if (t2 BETTER_THAN t1) { s4 = t2; hmm_history(hmm, 4) = hmm_history(hmm, 2); } else { s4 = t1; hmm_history(hmm, 4) = hmm_history(hmm, 3); } } if (s4 WORSE_THAN WORST_SCORE) s4 = WORST_SCORE; if (s4 BETTER_THAN bestScore) bestScore = s4; hmm_score(hmm, 4) = s4; } s1 = hmm_score(hmm, 1) + nonmpx_senscr(1); /* All transitions into state 3 */ if (s1 BETTER_THAN WORST_SCORE) { t0 = s3 + hmm_tprob_5st(3, 3); t1 = s2 + hmm_tprob_5st(2, 3); t2 = s1 + hmm_tprob_5st(1, 3); if (t0 BETTER_THAN t1) { if (t2 BETTER_THAN t0) { s3 = t2; hmm_history(hmm, 3) = hmm_history(hmm, 1); } else s3 = t0; } else { if (t2 BETTER_THAN t1) { s3 = t2; hmm_history(hmm, 3) = hmm_history(hmm, 1); } else { s3 = t1; hmm_history(hmm, 3) = hmm_history(hmm, 2); } } if (s3 WORSE_THAN WORST_SCORE) s3 = WORST_SCORE; if (s3 BETTER_THAN bestScore) bestScore = s3; hmm_score(hmm, 3) = s3; } s0 = hmm_in_score(hmm) + nonmpx_senscr(0); /* All transitions into state 2 (state 0 is always active) */ t0 = s2 + hmm_tprob_5st(2, 2); t1 = s1 + hmm_tprob_5st(1, 2); t2 = s0 + hmm_tprob_5st(0, 2); if (t0 BETTER_THAN t1) { if (t2 BETTER_THAN t0) { s2 = t2; hmm_history(hmm, 2) = hmm_in_history(hmm); } else s2 = t0; } else { if (t2 BETTER_THAN t1) { s2 = t2; hmm_history(hmm, 2) = hmm_in_history(hmm); } else { s2 = t1; hmm_history(hmm, 2) = hmm_history(hmm, 1); } } if (s2 WORSE_THAN WORST_SCORE) s2 = WORST_SCORE; if (s2 BETTER_THAN bestScore) bestScore = s2; hmm_score(hmm, 2) = s2; /* All transitions into state 1 */ t0 = s1 + hmm_tprob_5st(1, 1); t1 = s0 + hmm_tprob_5st(0, 1); if (t0 BETTER_THAN t1) { s1 = t0; } else { s1 = t1; hmm_history(hmm, 1) = hmm_in_history(hmm); } if (s1 WORSE_THAN WORST_SCORE) s1 = WORST_SCORE; if (s1 BETTER_THAN bestScore) bestScore = s1; hmm_score(hmm, 1) = s1; /* All transitions into state 0 */ s0 = s0 + hmm_tprob_5st(0, 0); if (s0 WORSE_THAN WORST_SCORE) s0 = WORST_SCORE; if (s0 BETTER_THAN bestScore) bestScore = s0; hmm_in_score(hmm) = s0; hmm_bestscore(hmm) = bestScore; return bestScore; } #define mpx_senid(st) sseq[ssid[st]][st] #define mpx_senscr(st) (-senscore[mpx_senid(st)]) static int32 hmm_vit_eval_5st_lr_mpx(hmm_t * hmm) { uint8 const *tp = hmm->ctx->tp[hmm->tmatid][0]; int16 const *senscore = hmm->ctx->senscore; uint16 * const *sseq = hmm->ctx->sseq; uint16 *ssid = hmm->senid; int32 bestScore; int32 s5, s4, s3, s2, s1, s0, t2, t1, t0; /* Don't propagate WORST_SCORE */ if (ssid[4] == BAD_SSID) s4 = t1 = WORST_SCORE; else { s4 = hmm_score(hmm, 4) + mpx_senscr(4); t1 = s4 + hmm_tprob_5st(4, 5); } if (ssid[3] == BAD_SSID) s3 = t2 = WORST_SCORE; else { s3 = hmm_score(hmm, 3) + mpx_senscr(3); t2 = s3 + hmm_tprob_5st(3, 5); } if (t1 BETTER_THAN t2) { s5 = t1; hmm_out_history(hmm) = hmm_history(hmm, 4); } else { s5 = t2; hmm_out_history(hmm) = hmm_history(hmm, 3); } if (s5 WORSE_THAN WORST_SCORE) s5 = WORST_SCORE; hmm_out_score(hmm) = s5; bestScore = s5; /* Don't propagate WORST_SCORE */ if (ssid[2] == BAD_SSID) s2 = t2 = WORST_SCORE; else { s2 = hmm_score(hmm, 2) + mpx_senscr(2); t2 = s2 + hmm_tprob_5st(2, 4); } t0 = t1 = WORST_SCORE; if (s4 != WORST_SCORE) t0 = s4 + hmm_tprob_5st(4, 4); if (s3 != WORST_SCORE) t1 = s3 + hmm_tprob_5st(3, 4); if (t0 BETTER_THAN t1) { if (t2 BETTER_THAN t0) { s4 = t2; hmm_history(hmm, 4) = hmm_history(hmm, 2); ssid[4] = ssid[2]; } else s4 = t0; } else { if (t2 BETTER_THAN t1) { s4 = t2; hmm_history(hmm, 4) = hmm_history(hmm, 2); ssid[4] = ssid[2]; } else { s4 = t1; hmm_history(hmm, 4) = hmm_history(hmm, 3); ssid[4] = ssid[3]; } } if (s4 WORSE_THAN WORST_SCORE) s4 = WORST_SCORE; if (s4 BETTER_THAN bestScore) bestScore = s4; hmm_score(hmm, 4) = s4; /* Don't propagate WORST_SCORE */ if (ssid[1] == BAD_SSID) s1 = t2 = WORST_SCORE; else { s1 = hmm_score(hmm, 1) + mpx_senscr(1); t2 = s1 + hmm_tprob_5st(1, 3); } t0 = t1 = WORST_SCORE; if (s3 != WORST_SCORE) t0 = s3 + hmm_tprob_5st(3, 3); if (s2 != WORST_SCORE) t1 = s2 + hmm_tprob_5st(2, 3); if (t0 BETTER_THAN t1) { if (t2 BETTER_THAN t0) { s3 = t2; hmm_history(hmm, 3) = hmm_history(hmm, 1); ssid[3] = ssid[1]; } else s3 = t0; } else { if (t2 BETTER_THAN t1) { s3 = t2; hmm_history(hmm, 3) = hmm_history(hmm, 1); ssid[3] = ssid[1]; } else { s3 = t1; hmm_history(hmm, 3) = hmm_history(hmm, 2); ssid[3] = ssid[2]; } } if (s3 WORSE_THAN WORST_SCORE) s3 = WORST_SCORE; if (s3 BETTER_THAN bestScore) bestScore = s3; hmm_score(hmm, 3) = s3; /* State 0 is always active */ s0 = hmm_in_score(hmm) + mpx_senscr(0); /* Don't propagate WORST_SCORE */ t0 = t1 = WORST_SCORE; if (s2 != WORST_SCORE) t0 = s2 + hmm_tprob_5st(2, 2); if (s1 != WORST_SCORE) t1 = s1 + hmm_tprob_5st(1, 2); t2 = s0 + hmm_tprob_5st(0, 2); if (t0 BETTER_THAN t1) { if (t2 BETTER_THAN t0) { s2 = t2; hmm_history(hmm, 2) = hmm_in_history(hmm); ssid[2] = ssid[0]; } else s2 = t0; } else { if (t2 BETTER_THAN t1) { s2 = t2; hmm_history(hmm, 2) = hmm_in_history(hmm); ssid[2] = ssid[0]; } else { s2 = t1; hmm_history(hmm, 2) = hmm_history(hmm, 1); ssid[2] = ssid[1]; } } if (s2 WORSE_THAN WORST_SCORE) s2 = WORST_SCORE; if (s2 BETTER_THAN bestScore) bestScore = s2; hmm_score(hmm, 2) = s2; /* Don't propagate WORST_SCORE */ t0 = WORST_SCORE; if (s1 != WORST_SCORE) t0 = s1 + hmm_tprob_5st(1, 1); t1 = s0 + hmm_tprob_5st(0, 1); if (t0 BETTER_THAN t1) { s1 = t0; } else { s1 = t1; hmm_history(hmm, 1) = hmm_in_history(hmm); ssid[1] = ssid[0]; } if (s1 WORSE_THAN WORST_SCORE) s1 = WORST_SCORE; if (s1 BETTER_THAN bestScore) bestScore = s1; hmm_score(hmm, 1) = s1; s0 += hmm_tprob_5st(0, 0); if (s0 WORSE_THAN WORST_SCORE) s0 = WORST_SCORE; if (s0 BETTER_THAN bestScore) bestScore = s0; hmm_in_score(hmm) = s0; hmm_bestscore(hmm) = bestScore; return bestScore; } #define hmm_tprob_3st(i, j) (-tp[(i)*4+(j)]) static int32 hmm_vit_eval_3st_lr(hmm_t * hmm) { int16 const *senscore = hmm->ctx->senscore; uint8 const *tp = hmm->ctx->tp[hmm->tmatid][0]; uint16 const *sseq = hmm->senid; int32 s3, s2, s1, s0, t2, t1, t0, bestScore; s2 = hmm_score(hmm, 2) + nonmpx_senscr(2); s1 = hmm_score(hmm, 1) + nonmpx_senscr(1); s0 = hmm_in_score(hmm) + nonmpx_senscr(0); /* It was the best of scores, it was the worst of scores. */ bestScore = WORST_SCORE; t2 = INT_MIN; /* Not used unless skipstate is true */ /* Transitions into non-emitting state 3 */ if (s1 BETTER_THAN WORST_SCORE) { t1 = s2 + hmm_tprob_3st(2, 3); if (hmm_tprob_3st(1,3) BETTER_THAN TMAT_WORST_SCORE) t2 = s1 + hmm_tprob_3st(1, 3); if (t1 BETTER_THAN t2) { s3 = t1; hmm_out_history(hmm) = hmm_history(hmm, 2); } else { s3 = t2; hmm_out_history(hmm) = hmm_history(hmm, 1); } if (s3 WORSE_THAN WORST_SCORE) s3 = WORST_SCORE; hmm_out_score(hmm) = s3; bestScore = s3; } /* All transitions into state 2 (state 0 is always active) */ t0 = s2 + hmm_tprob_3st(2, 2); t1 = s1 + hmm_tprob_3st(1, 2); if (hmm_tprob_3st(0, 2) BETTER_THAN TMAT_WORST_SCORE) t2 = s0 + hmm_tprob_3st(0, 2); if (t0 BETTER_THAN t1) { if (t2 BETTER_THAN t0) { s2 = t2; hmm_history(hmm, 2) = hmm_in_history(hmm); } else s2 = t0; } else { if (t2 BETTER_THAN t1) { s2 = t2; hmm_history(hmm, 2) = hmm_in_history(hmm); } else { s2 = t1; hmm_history(hmm, 2) = hmm_history(hmm, 1); } } if (s2 WORSE_THAN WORST_SCORE) s2 = WORST_SCORE; if (s2 BETTER_THAN bestScore) bestScore = s2; hmm_score(hmm, 2) = s2; /* All transitions into state 1 */ t0 = s1 + hmm_tprob_3st(1, 1); t1 = s0 + hmm_tprob_3st(0, 1); if (t0 BETTER_THAN t1) { s1 = t0; } else { s1 = t1; hmm_history(hmm, 1) = hmm_in_history(hmm); } if (s1 WORSE_THAN WORST_SCORE) s1 = WORST_SCORE; if (s1 BETTER_THAN bestScore) bestScore = s1; hmm_score(hmm, 1) = s1; /* All transitions into state 0 */ s0 = s0 + hmm_tprob_3st(0, 0); if (s0 WORSE_THAN WORST_SCORE) s0 = WORST_SCORE; if (s0 BETTER_THAN bestScore) bestScore = s0; hmm_in_score(hmm) = s0; hmm_bestscore(hmm) = bestScore; return bestScore; } static int32 hmm_vit_eval_3st_lr_mpx(hmm_t * hmm) { uint8 const *tp = hmm->ctx->tp[hmm->tmatid][0]; int16 const *senscore = hmm->ctx->senscore; uint16 * const *sseq = hmm->ctx->sseq; uint16 *ssid = hmm->senid; int32 bestScore; int32 s3, s2, s1, s0, t2, t1, t0; /* Don't propagate WORST_SCORE */ t2 = INT_MIN; /* Not used unless skipstate is true */ if (ssid[2] == BAD_SSID) s2 = t1 = WORST_SCORE; else { s2 = hmm_score(hmm, 2) + mpx_senscr(2); t1 = s2 + hmm_tprob_3st(2, 3); } if (ssid[1] == BAD_SSID) s1 = t2 = WORST_SCORE; else { s1 = hmm_score(hmm, 1) + mpx_senscr(1); if (hmm_tprob_3st(1,3) BETTER_THAN TMAT_WORST_SCORE) t2 = s1 + hmm_tprob_3st(1, 3); } if (t1 BETTER_THAN t2) { s3 = t1; hmm_out_history(hmm) = hmm_history(hmm, 2); } else { s3 = t2; hmm_out_history(hmm) = hmm_history(hmm, 1); } if (s3 WORSE_THAN WORST_SCORE) s3 = WORST_SCORE; hmm_out_score(hmm) = s3; bestScore = s3; /* State 0 is always active */ s0 = hmm_in_score(hmm) + mpx_senscr(0); /* Don't propagate WORST_SCORE */ t0 = t1 = WORST_SCORE; if (s2 != WORST_SCORE) t0 = s2 + hmm_tprob_3st(2, 2); if (s1 != WORST_SCORE) t1 = s1 + hmm_tprob_3st(1, 2); if (hmm_tprob_3st(0,2) BETTER_THAN TMAT_WORST_SCORE) t2 = s0 + hmm_tprob_3st(0, 2); if (t0 BETTER_THAN t1) { if (t2 BETTER_THAN t0) { s2 = t2; hmm_history(hmm, 2) = hmm_in_history(hmm); ssid[2] = ssid[0]; } else s2 = t0; } else { if (t2 BETTER_THAN t1) { s2 = t2; hmm_history(hmm, 2) = hmm_in_history(hmm); ssid[2] = ssid[0]; } else { s2 = t1; hmm_history(hmm, 2) = hmm_history(hmm, 1); ssid[2] = ssid[1]; } } if (s2 WORSE_THAN WORST_SCORE) s2 = WORST_SCORE; if (s2 BETTER_THAN bestScore) bestScore = s2; hmm_score(hmm, 2) = s2; /* Don't propagate WORST_SCORE */ t0 = WORST_SCORE; if (s1 != WORST_SCORE) t0 = s1 + hmm_tprob_3st(1, 1); t1 = s0 + hmm_tprob_3st(0, 1); if (t0 BETTER_THAN t1) { s1 = t0; } else { s1 = t1; hmm_history(hmm, 1) = hmm_in_history(hmm); ssid[1] = ssid[0]; } if (s1 WORSE_THAN WORST_SCORE) s1 = WORST_SCORE; if (s1 BETTER_THAN bestScore) bestScore = s1; hmm_score(hmm, 1) = s1; /* State 0 is always active */ s0 += hmm_tprob_3st(0, 0); if (s0 WORSE_THAN WORST_SCORE) s0 = WORST_SCORE; if (s0 BETTER_THAN bestScore) bestScore = s0; hmm_in_score(hmm) = s0; hmm_bestscore(hmm) = bestScore; return bestScore; } static int32 hmm_vit_eval_anytopo(hmm_t * hmm) { hmm_context_t *ctx = hmm->ctx; int32 to, from, bestfrom; int32 newscr, scr, bestscr; int final_state; /* Compute previous state-score + observation output prob for each emitting state */ ctx->st_sen_scr[0] = hmm_in_score(hmm) + hmm_senscr(hmm, 0); for (from = 1; from < hmm_n_emit_state(hmm); ++from) { if ((ctx->st_sen_scr[from] = hmm_score(hmm, from) + hmm_senscr(hmm, from)) WORSE_THAN WORST_SCORE) ctx->st_sen_scr[from] = WORST_SCORE; } /* FIXME/TODO: Use the BLAS for all this. */ /* Evaluate final-state first, which does not have a self-transition */ final_state = hmm_n_emit_state(hmm); to = final_state; scr = WORST_SCORE; bestfrom = -1; for (from = to - 1; from >= 0; --from) { if ((hmm_tprob(hmm, from, to) BETTER_THAN TMAT_WORST_SCORE) && ((newscr = ctx->st_sen_scr[from] + hmm_tprob(hmm, from, to)) BETTER_THAN scr)) { scr = newscr; bestfrom = from; } } hmm_out_score(hmm) = scr; if (bestfrom >= 0) hmm_out_history(hmm) = hmm_history(hmm, bestfrom); bestscr = scr; /* Evaluate all other states, which might have self-transitions */ for (to = final_state - 1; to >= 0; --to) { /* Score from self-transition, if any */ scr = (hmm_tprob(hmm, to, to) BETTER_THAN TMAT_WORST_SCORE) ? ctx->st_sen_scr[to] + hmm_tprob(hmm, to, to) : WORST_SCORE; /* Scores from transitions from other states */ bestfrom = -1; for (from = to - 1; from >= 0; --from) { if ((hmm_tprob(hmm, from, to) BETTER_THAN TMAT_WORST_SCORE) && ((newscr = ctx->st_sen_scr[from] + hmm_tprob(hmm, from, to)) BETTER_THAN scr)) { scr = newscr; bestfrom = from; } } /* Update new result for state to */ if (to == 0) { hmm_in_score(hmm) = scr; if (bestfrom >= 0) hmm_in_history(hmm) = hmm_history(hmm, bestfrom); } else { hmm_score(hmm, to) = scr; if (bestfrom >= 0) hmm_history(hmm, to) = hmm_history(hmm, bestfrom); } /* Propagate ssid for multiplex HMMs */ if (bestfrom >= 0 && hmm_is_mpx(hmm)) hmm->senid[to] = hmm->senid[bestfrom]; if (bestscr WORSE_THAN scr) bestscr = scr; } hmm_bestscore(hmm) = bestscr; return bestscr; } int32 hmm_vit_eval(hmm_t * hmm) { if (hmm_is_mpx(hmm)) { if (hmm_n_emit_state(hmm) == 5) return hmm_vit_eval_5st_lr_mpx(hmm); else if (hmm_n_emit_state(hmm) == 3) return hmm_vit_eval_3st_lr_mpx(hmm); else return hmm_vit_eval_anytopo(hmm); } else { if (hmm_n_emit_state(hmm) == 5) return hmm_vit_eval_5st_lr(hmm); else if (hmm_n_emit_state(hmm) == 3) return hmm_vit_eval_3st_lr(hmm); else return hmm_vit_eval_anytopo(hmm); } } int32 hmm_dump_vit_eval(hmm_t * hmm, FILE * fp) { int32 bs = 0; if (fp) { fprintf(fp, "BEFORE:\n"); hmm_dump(hmm, fp); } bs = hmm_vit_eval(hmm); if (fp) { fprintf(fp, "AFTER:\n"); hmm_dump(hmm, fp); } return bs; } pocketsphinx-5prealpha/src/libpocketsphinx/phone_loop_search.h0000664000175000017500000001023612504317100022227 00000000000000/* -*- 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 phone_loop_search.h Fast and rough context-independent * phoneme loop search. * * This exists for the purposes of phoneme lookahead, and thus it * actually does not do phoneme recognition (it wouldn't be very * accurate anyway). */ #ifndef __PHONE_LOOP_SEARCH_H__ #define __PHONE_LOOP_SEARCH_H__ /* SphinxBase headers. */ #include #include #include #include /* Local headers. */ #include "pocketsphinx_internal.h" #include "hmm.h" /** * Renormalization event. */ struct phone_loop_renorm_s { int frame_idx; /**< Frame of renormalization. */ int32 norm; /**< Normalization constant. */ }; typedef struct phone_loop_renorm_s phone_loop_renorm_t; /** * Phone loop search structure. */ struct phone_loop_search_s { ps_search_t base; /**< Base search structure. */ hmm_t *hmms; /**< Basic HMM structures for CI phones. */ hmm_context_t *hmmctx; /**< HMM context structure. */ int16 frame; /**< Current frame being searched. */ int16 n_phones; /**< Size of phone array. */ int32 **pen_buf; /**< Penalty buffer */ int16 pen_buf_ptr; /**< Pointer for frame to fill in penalty buffer */ int32 *penalties; /**< Penalties for CI phones in current frame */ float64 penalty_weight; /**< Weighting factor for penalties */ int32 best_score; /**< Best Viterbi score in current frame. */ int32 beam; /**< HMM pruning beam width. */ int32 pbeam; /**< Phone exit pruning beam width. */ int32 pip; /**< Phone insertion penalty ("language score"). */ int window; /**< Window size for phoneme lookahead */ glist_t renorm; /**< List of renormalizations. */ }; typedef struct phone_loop_search_s phone_loop_search_t; ps_search_t *phone_loop_search_init(cmd_ln_t *config, acmod_t *acmod, dict_t *dict); /** * Return lookahead heuristic score for a specific phone. */ #define phone_loop_search_score(pls,ci) \ ((pls == NULL) ? 0 : (pls->penalties[ci])) #endif /* __PHONE_LOOP_SEARCH_H__ */ pocketsphinx-5prealpha/src/libpocketsphinx/vector.c0000664000175000017500000001015712504317100020037 00000000000000/* -*- 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. * * ==================================================================== * */ /* * vector.c * * ********************************************** * CMU ARPA Speech Project * * Copyright (c) 1997 Carnegie Mellon University. * ALL RIGHTS RESERVED. * ********************************************** * * HISTORY * * 22-Nov-2004 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University * Imported from s3.2, for supporting s3 format continuous * acoustic models. * * 10-Mar-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University. * Added vector_accum(), vector_vqlabel(), and vector_vqgen(). * * 09-Mar-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University. * Added vector_is_zero(), vector_cmp(), and vector_dist_eucl(). * Changed the name vector_dist_eval to vector_dist_maha. * * 07-Oct-98 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University. * Added distance computation related functions. * * 12-Nov-95 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University. * Copied from Eric Thayer. */ /* System headers. */ #include #include #include #include #include /* SphinxBase headers. */ #include #include #include /* Local headers. */ #include "vector.h" #if defined(_WIN32) #define srandom srand #define random rand #endif float64 vector_sum_norm(float32 * vec, int32 len) { float64 sum, f; int32 i; sum = 0.0; for (i = 0; i < len; i++) sum += vec[i]; if (sum != 0.0) { f = 1.0 / sum; for (i = 0; i < len; i++) vec[i] *= f; } return sum; } void vector_floor(float32 * vec, int32 len, float64 flr) { int32 i; for (i = 0; i < len; i++) if (vec[i] < flr) vec[i] = (float32) flr; } void vector_nz_floor(float32 * vec, int32 len, float64 flr) { int32 i; for (i = 0; i < len; i++) if ((vec[i] != 0.0) && (vec[i] < flr)) vec[i] = (float32) flr; } void vector_print(FILE * fp, vector_t v, int32 dim) { int32 i; for (i = 0; i < dim; i++) fprintf(fp, " %11.4e", v[i]); fprintf(fp, "\n"); fflush(fp); } int32 vector_is_zero(float32 * vec, int32 len) { int32 i; for (i = 0; (i < len) && (vec[i] == 0.0); i++); return (i == len); /* TRUE iff all mean values are 0.0 */ } pocketsphinx-5prealpha/src/libpocketsphinx/tmat.h0000664000175000017500000001267512504317100017516 00000000000000/* ==================================================================== * 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. * * ==================================================================== * */ /* * tmat.h * * ********************************************** * CMU ARPA Speech Project * * Copyright (c) 1997 Carnegie Mellon University. * ALL RIGHTS RESERVED. * ********************************************** * * HISTORY * $Log: tmat.h,v $ * Revision 1.1.1.1 2006/05/23 18:45:03 dhuggins * re-importation * * Revision 1.1 2005/09/29 21:51:19 dhuggins * Add support for Sphinx3 tmat files. Amazingly enough, it Just Works * (but it isn't terribly robust) * * Revision 1.9 2005/06/21 19:23:35 arthchan2003 * 1, Fixed doxygen documentation. 2, Added $ keyword. * * Revision 1.6 2005/06/13 04:02:56 archan * Fixed most doxygen-style documentation under libs3decoder. * * Revision 1.5 2005/05/03 04:09:09 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.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:47 archan * Fixed mistakes in last updates. Add * * * 20.Apr.2001 RAH (rhoughton@mediasite.com, ricky.houghton@cs.cmu.edu) * Added tmat_free to free allocated memory * * 29-Feb-2000 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University. * Added tmat_chk_1skip(), and made tmat_chk_uppertri() public. * * 10-Dec-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University. * Added tmat_dump(). * * 11-Mar-97 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University. * Started based on original S3 implementation. */ #ifndef _S3_TMAT_H_ #define _S3_TMAT_H_ /* System headers. */ #include /* SphinxBase headers. */ #include /** \file tmat.h * \brief Transition matrix data structure. */ #ifdef __cplusplus extern "C" { #endif /** * \struct tmat_t * \brief Transition matrix data structure. All phone HMMs are assumed to have the same * topology. */ typedef struct { uint8 ***tp; /**< The transition matrices; kept in the same scale as acoustic scores; tp[tmatid][from-state][to-state] */ int16 n_tmat; /**< Number matrices */ int16 n_state; /**< Number source states in matrix (only the emitting states); Number destination states = n_state+1, it includes the exit state */ } tmat_t; /** Initialize transition matrix */ tmat_t *tmat_init (char const *tmatfile,/**< In: input file */ logmath_t *lmath, /**< In: log math parameters */ float64 tpfloor, /**< In: floor value for each non-zero transition probability */ int32 breport /**< In: whether reporting the process of tmat_t */ ); /** Dumping the transition matrix for debugging */ void tmat_dump (tmat_t *tmat, /**< In: transition matrix */ FILE *fp /**< In: file pointer */ ); /** * RAH, add code to remove memory allocated by tmat_init */ void tmat_free (tmat_t *t /**< In: transition matrix */ ); /** * Report the detail of the transition matrix structure. */ void tmat_report(tmat_t *t /**< In: transition matrix*/ ); #ifdef __cplusplus } #endif #endif pocketsphinx-5prealpha/src/libpocketsphinx/ps_mllr.c0000664000175000017500000001262712504317100020211 00000000000000/* -*- 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 ps_mllr.c Model-space linear transforms for speaker adaptation */ /* System headers. */ #include /* SphinxBase headers. */ #include /* Local headers. */ #include "acmod.h" ps_mllr_t * ps_mllr_read(char const *regmatfile) { ps_mllr_t *mllr; FILE *fp; int n, i, m, j, k; mllr = ckd_calloc(1, sizeof(*mllr)); mllr->refcnt = 1; if ((fp = fopen(regmatfile, "r")) == NULL) { E_ERROR_SYSTEM("Failed to open MLLR file '%s' for reading", regmatfile); goto error_out; } else E_INFO("Reading MLLR transformation file '%s'\n", regmatfile); if ((fscanf(fp, "%d", &n) != 1) || (n < 1)) { E_ERROR("Failed to read number of MLLR classes\n"); goto error_out; } mllr->n_class = n; if ((fscanf(fp, "%d", &n) != 1)) { E_ERROR("Failed to read number of feature streams\n"); goto error_out; } mllr->n_feat = n; mllr->veclen = ckd_calloc(mllr->n_feat, sizeof(*mllr->veclen)); mllr->A = (float32 ****) ckd_calloc(mllr->n_feat, sizeof(float32 **)); mllr->b = (float32 ***) ckd_calloc(mllr->n_feat, sizeof(float32 *)); mllr->h = (float32 ***) ckd_calloc(mllr->n_feat, sizeof(float32 *)); for (i = 0; i < mllr->n_feat; ++i) { if (fscanf(fp, "%d", &n) != 1) { E_ERROR("Failed to read stream length for feature %d\n", i); goto error_out; } mllr->veclen[i] = n; mllr->A[i] = (float32 ***) ckd_calloc_3d(mllr->n_class, mllr->veclen[i], mllr->veclen[i], sizeof(float32)); mllr->b[i] = (float32 **) ckd_calloc_2d(mllr->n_class, mllr->veclen[i], sizeof(float32)); mllr->h[i] = (float32 **) ckd_calloc_2d(mllr->n_class, mllr->veclen[i], sizeof(float32)); for (m = 0; m < mllr->n_class; ++m) { for (j = 0; j < mllr->veclen[i]; ++j) { for (k = 0; k < mllr->veclen[i]; ++k) { if (fscanf(fp, "%f ", &mllr->A[i][m][j][k]) != 1) { E_ERROR("Failed reading MLLR rotation (%d,%d,%d,%d)\n", i, m, j, k); goto error_out; } } } for (j = 0; j < mllr->veclen[i]; ++j) { if (fscanf(fp, "%f ", &mllr->b[i][m][j]) != 1) { E_ERROR("Failed reading MLLR bias (%d,%d,%d)\n", i, m, j); goto error_out; } } for (j = 0; j < mllr->veclen[i]; ++j) { if (fscanf(fp, "%f ", &mllr->h[i][m][j]) != 1) { E_ERROR("Failed reading MLLR variance scale (%d,%d,%d)\n", i, m, j); goto error_out; } } } } fclose(fp); return mllr; error_out: if (fp) fclose(fp); ps_mllr_free(mllr); return NULL; } ps_mllr_t * ps_mllr_retain(ps_mllr_t *mllr) { ++mllr->refcnt; return mllr; } int ps_mllr_free(ps_mllr_t *mllr) { int i; if (mllr == NULL) return 0; if (--mllr->refcnt > 0) return mllr->refcnt; for (i = 0; i < mllr->n_feat; ++i) { if (mllr->A) ckd_free_3d(mllr->A[i]); if (mllr->b) ckd_free_2d(mllr->b[i]); if (mllr->h) ckd_free_2d(mllr->h[i]); } ckd_free(mllr->veclen); ckd_free(mllr->A); ckd_free(mllr->b); ckd_free(mllr->h); ckd_free(mllr); return 0; } pocketsphinx-5prealpha/src/libpocketsphinx/ps_lattice.c0000664000175000017500000016161112520771215020677 00000000000000/* -*- 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 ps_lattice.c Word graph search. */ /* System headers. */ #include #include #include /* SphinxBase headers. */ #include #include #include #include #include /* Local headers. */ #include "pocketsphinx_internal.h" #include "ps_lattice_internal.h" #include "ngram_search.h" #include "dict.h" /* * Create a directed link between "from" and "to" nodes, but if a link already exists, * choose one with the best ascr. */ void ps_lattice_link(ps_lattice_t *dag, ps_latnode_t *from, ps_latnode_t *to, int32 score, int32 ef) { latlink_list_t *fwdlink; /* Look for an existing link between "from" and "to" nodes */ for (fwdlink = from->exits; fwdlink; fwdlink = fwdlink->next) if (fwdlink->link->to == to) break; if (fwdlink == NULL) { latlink_list_t *revlink; ps_latlink_t *link; /* No link between the two nodes; create a new one */ link = listelem_malloc(dag->latlink_alloc); fwdlink = listelem_malloc(dag->latlink_list_alloc); revlink = listelem_malloc(dag->latlink_list_alloc); link->from = from; link->to = to; link->ascr = score; link->ef = ef; link->best_prev = NULL; fwdlink->link = revlink->link = link; fwdlink->next = from->exits; from->exits = fwdlink; revlink->next = to->entries; to->entries = revlink; } else { /* Link already exists; just retain the best ascr */ if (score BETTER_THAN fwdlink->link->ascr) { fwdlink->link->ascr = score; fwdlink->link->ef = ef; } } } void ps_lattice_penalize_fillers(ps_lattice_t *dag, int32 silpen, int32 fillpen) { ps_latnode_t *node; for (node = dag->nodes; node; node = node->next) { latlink_list_t *linklist; if (node != dag->start && node != dag->end && dict_filler_word(dag->dict, node->basewid)) { for (linklist = node->entries; linklist; linklist = linklist->next) linklist->link->ascr += (node->basewid == dag->silence) ? silpen : fillpen; } } } static void delete_node(ps_lattice_t *dag, ps_latnode_t *node) { latlink_list_t *x, *next_x; for (x = node->exits; x; x = next_x) { next_x = x->next; x->link->from = NULL; listelem_free(dag->latlink_list_alloc, x); } for (x = node->entries; x; x = next_x) { next_x = x->next; x->link->to = NULL; listelem_free(dag->latlink_list_alloc, x); } listelem_free(dag->latnode_alloc, node); } static void remove_dangling_links(ps_lattice_t *dag, ps_latnode_t *node) { latlink_list_t *x, *prev_x, *next_x; prev_x = NULL; for (x = node->exits; x; x = next_x) { next_x = x->next; if (x->link->to == NULL) { if (prev_x) prev_x->next = next_x; else node->exits = next_x; listelem_free(dag->latlink_alloc, x->link); listelem_free(dag->latlink_list_alloc, x); } else prev_x = x; } prev_x = NULL; for (x = node->entries; x; x = next_x) { next_x = x->next; if (x->link->from == NULL) { if (prev_x) prev_x->next = next_x; else node->entries = next_x; listelem_free(dag->latlink_alloc, x->link); listelem_free(dag->latlink_list_alloc, x); } else prev_x = x; } } void ps_lattice_delete_unreachable(ps_lattice_t *dag) { ps_latnode_t *node, *prev_node, *next_node; int i; /* Remove unreachable nodes from the list of nodes. */ prev_node = NULL; for (node = dag->nodes; node; node = next_node) { next_node = node->next; if (!node->reachable) { if (prev_node) prev_node->next = next_node; else dag->nodes = next_node; /* Delete this node and NULLify links to it. */ delete_node(dag, node); } else prev_node = node; } /* Remove all links to and from unreachable nodes. */ i = 0; for (node = dag->nodes; node; node = node->next) { /* Assign sequence numbers. */ node->id = i++; /* We should obviously not encounter unreachable nodes here! */ assert(node->reachable); /* Remove all links that go nowhere. */ remove_dangling_links(dag, node); } } int32 ps_lattice_write(ps_lattice_t *dag, char const *filename) { FILE *fp; int32 i; ps_latnode_t *d, *initial, *final; initial = dag->start; final = dag->end; E_INFO("Writing lattice file: %s\n", filename); if ((fp = fopen(filename, "w")) == NULL) { E_ERROR_SYSTEM("Failed to open lattice file '%s' for writing", filename); return -1; } /* Stupid Sphinx-III lattice code expects 'getcwd:' here */ fprintf(fp, "# getcwd: /this/is/bogus\n"); fprintf(fp, "# -logbase %e\n", logmath_get_base(dag->lmath)); fprintf(fp, "#\n"); fprintf(fp, "Frames %d\n", dag->n_frames); fprintf(fp, "#\n"); for (i = 0, d = dag->nodes; d; d = d->next, i++); fprintf(fp, "Nodes %d (NODEID WORD STARTFRAME FIRST-ENDFRAME LAST-ENDFRAME)\n", i); for (i = 0, d = dag->nodes; d; d = d->next, i++) { d->id = i; fprintf(fp, "%d %s %d %d %d ; %d\n", i, dict_wordstr(dag->dict, d->wid), d->sf, d->fef, d->lef, d->node_id); } fprintf(fp, "#\n"); fprintf(fp, "Initial %d\nFinal %d\n", initial->id, final->id); fprintf(fp, "#\n"); /* Don't bother with this, it's not used by anything. */ fprintf(fp, "BestSegAscr %d (NODEID ENDFRAME ASCORE)\n", 0 /* #BPTable entries */ ); fprintf(fp, "#\n"); fprintf(fp, "Edges (FROM-NODEID TO-NODEID ASCORE)\n"); for (d = dag->nodes; d; d = d->next) { latlink_list_t *l; for (l = d->exits; l; l = l->next) { if (l->link->ascr WORSE_THAN WORST_SCORE || l->link->ascr BETTER_THAN 0) continue; fprintf(fp, "%d %d %d\n", d->id, l->link->to->id, l->link->ascr << SENSCR_SHIFT); } } fprintf(fp, "End\n"); fclose(fp); return 0; } int32 ps_lattice_write_htk(ps_lattice_t *dag, char const *filename) { FILE *fp; ps_latnode_t *d, *initial, *final; int32 j, n_links, n_nodes; initial = dag->start; final = dag->end; E_INFO("Writing lattice file: %s\n", filename); if ((fp = fopen(filename, "w")) == NULL) { E_ERROR_SYSTEM("Failed to open lattice file '%s' for writing", filename); return -1; } for (n_links = n_nodes = 0, d = dag->nodes; d; d = d->next) { latlink_list_t *l; if (!d->reachable) continue; d->id = n_nodes; for (l = d->exits; l; l = l->next) { if (l->link->to == NULL || !l->link->to->reachable) continue; if (l->link->ascr WORSE_THAN WORST_SCORE || l->link->ascr BETTER_THAN 0) continue; ++n_links; } ++n_nodes; } fprintf(fp, "# Lattice generated by PocketSphinx\n"); fprintf(fp, "#\n# Header\n#\n"); fprintf(fp, "VERSION=1.0\n"); fprintf(fp, "start=%d\n", initial->id); fprintf(fp, "end=%d\n", final->id); fprintf(fp, "#\n"); fprintf(fp, "N=%d\tL=%d\n", n_nodes, n_links); fprintf(fp, "#\n# Node definitions\n#\n"); for (d = dag->nodes; d; d = d->next) { char const *word = dict_wordstr(dag->dict, d->wid); char const *c = strrchr(word, '('); int altpron = 1; if (!d->reachable) continue; if (c) altpron = atoi(c + 1); word = dict_basestr(dag->dict, d->wid); if (d->wid == dict_startwid(dag->dict)) word = "!SENT_START"; else if (d->wid == dict_finishwid(dag->dict)) word = "!SENT_END"; else if (dict_filler_word(dag->dict, d->wid)) word = "!NULL"; fprintf(fp, "I=%d\tt=%.2f\tW=%s\tv=%d\n", d->id, (double)d->sf / dag->frate, word, altpron); } fprintf(fp, "#\n# Link definitions\n#\n"); for (j = 0, d = dag->nodes; d; d = d->next) { latlink_list_t *l; if (!d->reachable) continue; for (l = d->exits; l; l = l->next) { if (l->link->to == NULL || !l->link->to->reachable) continue; if (l->link->ascr WORSE_THAN WORST_SCORE || l->link->ascr BETTER_THAN 0) continue; fprintf(fp, "J=%d\tS=%d\tE=%d\ta=%f\tp=%g\n", j++, d->id, l->link->to->id, logmath_log_to_ln(dag->lmath, l->link->ascr << SENSCR_SHIFT), logmath_exp(dag->lmath, l->link->alpha + l->link->beta - dag->norm)); } } fclose(fp); return 0; } /* Read parameter from a lattice file*/ static int dag_param_read(lineiter_t *li, char *param) { int32 n; while ((li = lineiter_next(li)) != NULL) { char *c; /* Ignore comments. */ if (li->buf[0] == '#') continue; /* Find the first space. */ c = strchr(li->buf, ' '); if (c == NULL) continue; /* Check that the first field equals param and that there's a number after it. */ if (strncmp(li->buf, param, strlen(param)) == 0 && sscanf(c + 1, "%d", &n) == 1) return n; } return -1; } /* Mark every node that has a path to the argument dagnode as "reachable". */ static void dag_mark_reachable(ps_latnode_t * d) { latlink_list_t *l; d->reachable = 1; for (l = d->entries; l; l = l->next) if (l->link->from && !l->link->from->reachable) dag_mark_reachable(l->link->from); } ps_lattice_t * ps_lattice_read(ps_decoder_t *ps, char const *file) { FILE *fp; int32 ispipe; lineiter_t *line; float64 lb; float32 logratio; ps_latnode_t *tail; ps_latnode_t **darray; ps_lattice_t *dag; int i, k, n_nodes; int32 pip, silpen, fillpen; dag = ckd_calloc(1, sizeof(*dag)); if (ps) { dag->search = ps->search; dag->dict = dict_retain(ps->dict); dag->lmath = logmath_retain(ps->lmath); dag->frate = cmd_ln_int32_r(dag->search->config, "-frate"); } else { dag->dict = dict_init(NULL, NULL); dag->lmath = logmath_init(1.0001, 0, FALSE); dag->frate = 100; } dag->silence = dict_silwid(dag->dict); dag->latnode_alloc = listelem_alloc_init(sizeof(ps_latnode_t)); dag->latlink_alloc = listelem_alloc_init(sizeof(ps_latlink_t)); dag->latlink_list_alloc = listelem_alloc_init(sizeof(latlink_list_t)); dag->refcount = 1; tail = NULL; darray = NULL; E_INFO("Reading DAG file: %s\n", file); if ((fp = fopen_compchk(file, &ispipe)) == NULL) { E_ERROR_SYSTEM("Failed to open DAG file '%s' for reading", file); return NULL; } line = lineiter_start(fp); /* Read and verify logbase (ONE BIG HACK!!) */ if (line == NULL) { E_ERROR("Premature EOF(%s)\n", file); goto load_error; } if (strncmp(line->buf, "# getcwd: ", 10) != 0) { E_ERROR("%s does not begin with '# getcwd: '\n%s", file, line->buf); goto load_error; } if ((line = lineiter_next(line)) == NULL) { E_ERROR("Premature EOF(%s)\n", file); goto load_error; } if ((strncmp(line->buf, "# -logbase ", 11) != 0) || (sscanf(line->buf + 11, "%lf", &lb) != 1)) { E_WARN("%s: Cannot find -logbase in header\n", file); lb = 1.0001; } logratio = 1.0f; if (dag->lmath == NULL) dag->lmath = logmath_init(lb, 0, TRUE); else { float32 pb = logmath_get_base(dag->lmath); if (fabs(lb - pb) >= 0.0001) { E_WARN("Inconsistent logbases: %f vs %f: will compensate\n", lb, pb); logratio = (float32)(log(lb) / log(pb)); E_INFO("Lattice log ratio: %f\n", logratio); } } /* Read Frames parameter */ dag->n_frames = dag_param_read(line, "Frames"); if (dag->n_frames <= 0) { E_ERROR("Frames parameter missing or invalid\n"); goto load_error; } /* Read Nodes parameter */ n_nodes = dag_param_read(line, "Nodes"); if (n_nodes <= 0) { E_ERROR("Nodes parameter missing or invalid\n"); goto load_error; } /* Read nodes */ darray = ckd_calloc(n_nodes, sizeof(*darray)); for (i = 0; i < n_nodes; i++) { ps_latnode_t *d; int32 w; int seqid, sf, fef, lef; char wd[256]; if ((line = lineiter_next(line)) == NULL) { E_ERROR("Premature EOF while loading Nodes(%s)\n", file); goto load_error; } if ((k = sscanf(line->buf, "%d %255s %d %d %d", &seqid, wd, &sf, &fef, &lef)) != 5) { E_ERROR("Cannot parse line: %s, value of count %d\n", line->buf, k); goto load_error; } w = dict_wordid(dag->dict, wd); if (w < 0) { if (dag->search == NULL) { char *ww = ckd_salloc(wd); if (dict_word2basestr(ww) != -1) { if (dict_wordid(dag->dict, ww) == BAD_S3WID) dict_add_word(dag->dict, ww, NULL, 0); } ckd_free(ww); w = dict_add_word(dag->dict, wd, NULL, 0); } if (w < 0) { E_ERROR("Unknown word in line: %s\n", line->buf); goto load_error; } } if (seqid != i) { E_ERROR("Seqno error: %s\n", line->buf); goto load_error; } d = listelem_malloc(dag->latnode_alloc); darray[i] = d; d->wid = w; d->basewid = dict_basewid(dag->dict, w); d->id = seqid; d->sf = sf; d->fef = fef; d->lef = lef; d->reachable = 0; d->exits = d->entries = NULL; d->next = NULL; if (!dag->nodes) dag->nodes = d; else tail->next = d; tail = d; } /* Read initial node ID */ k = dag_param_read(line, "Initial"); if ((k < 0) || (k >= n_nodes)) { E_ERROR("Initial node parameter missing or invalid\n"); goto load_error; } dag->start = darray[k]; /* Read final node ID */ k = dag_param_read(line, "Final"); if ((k < 0) || (k >= n_nodes)) { E_ERROR("Final node parameter missing or invalid\n"); goto load_error; } dag->end = darray[k]; /* Read bestsegscore entries and ignore them. */ if ((k = dag_param_read(line, "BestSegAscr")) < 0) { E_ERROR("BestSegAscr parameter missing\n"); goto load_error; } for (i = 0; i < k; i++) { if ((line = lineiter_next(line)) == NULL) { E_ERROR("Premature EOF while (%s) ignoring BestSegAscr\n", line); goto load_error; } } /* Read in edges. */ while ((line = lineiter_next(line)) != NULL) { if (line->buf[0] == '#') continue; if (0 == strncmp(line->buf, "Edges", 5)) break; } if (line == NULL) { E_ERROR("Edges missing\n"); goto load_error; } while ((line = lineiter_next(line)) != NULL) { int from, to, ascr; ps_latnode_t *pd, *d; if (sscanf(line->buf, "%d %d %d", &from, &to, &ascr) != 3) break; if (ascr WORSE_THAN WORST_SCORE) continue; pd = darray[from]; d = darray[to]; if (logratio != 1.0f) ascr = (int32)(ascr * logratio); ps_lattice_link(dag, pd, d, ascr, d->sf - 1); } if (strcmp(line->buf, "End\n") != 0) { E_ERROR("Terminating 'End' missing\n"); goto load_error; } lineiter_free(line); fclose_comp(fp, ispipe); ckd_free(darray); /* Minor hack: If the final node is a filler word and not , * then set its base word ID to , so that the language model * scores won't be screwed up. */ if (dict_filler_word(dag->dict, dag->end->wid)) dag->end->basewid = dag->search ? ps_search_finish_wid(dag->search) : dict_wordid(dag->dict, S3_FINISH_WORD); /* Mark reachable from dag->end */ dag_mark_reachable(dag->end); /* Free nodes unreachable from dag->end and their links */ ps_lattice_delete_unreachable(dag); if (ps) { /* Build links around silence and filler words, since they do * not exist in the language model. FIXME: This is * potentially buggy, as we already do this before outputing * lattices. */ pip = logmath_log(dag->lmath, cmd_ln_float32_r(ps->config, "-pip")); silpen = pip + logmath_log(dag->lmath, cmd_ln_float32_r(ps->config, "-silprob")); fillpen = pip + logmath_log(dag->lmath, cmd_ln_float32_r(ps->config, "-fillprob")); ps_lattice_penalize_fillers(dag, silpen, fillpen); } return dag; load_error: E_ERROR("Failed to load %s\n", file); lineiter_free(line); if (fp) fclose_comp(fp, ispipe); ckd_free(darray); return NULL; } int ps_lattice_n_frames(ps_lattice_t *dag) { return dag->n_frames; } ps_lattice_t * ps_lattice_init_search(ps_search_t *search, int n_frame) { ps_lattice_t *dag; dag = ckd_calloc(1, sizeof(*dag)); dag->search = search; dag->dict = dict_retain(search->dict); dag->lmath = logmath_retain(search->acmod->lmath); dag->frate = cmd_ln_int32_r(dag->search->config, "-frate"); dag->silence = dict_silwid(dag->dict); dag->n_frames = n_frame; dag->latnode_alloc = listelem_alloc_init(sizeof(ps_latnode_t)); dag->latlink_alloc = listelem_alloc_init(sizeof(ps_latlink_t)); dag->latlink_list_alloc = listelem_alloc_init(sizeof(latlink_list_t)); dag->refcount = 1; return dag; } ps_lattice_t * ps_lattice_retain(ps_lattice_t *dag) { ++dag->refcount; return dag; } int ps_lattice_free(ps_lattice_t *dag) { if (dag == NULL) return 0; if (--dag->refcount > 0) return dag->refcount; logmath_free(dag->lmath); dict_free(dag->dict); listelem_alloc_free(dag->latnode_alloc); listelem_alloc_free(dag->latlink_alloc); listelem_alloc_free(dag->latlink_list_alloc); ckd_free(dag->hyp_str); ckd_free(dag); return 0; } logmath_t * ps_lattice_get_logmath(ps_lattice_t *dag) { return dag->lmath; } ps_latnode_iter_t * ps_latnode_iter(ps_lattice_t *dag) { return dag->nodes; } ps_latnode_iter_t * ps_latnode_iter_next(ps_latnode_iter_t *itor) { return itor->next; } void ps_latnode_iter_free(ps_latnode_iter_t *itor) { /* Do absolutely nothing. */ } ps_latnode_t * ps_latnode_iter_node(ps_latnode_iter_t *itor) { return itor; } int ps_latnode_times(ps_latnode_t *node, int16 *out_fef, int16 *out_lef) { if (out_fef) *out_fef = (int16)node->fef; if (out_lef) *out_lef = (int16)node->lef; return node->sf; } char const * ps_latnode_word(ps_lattice_t *dag, ps_latnode_t *node) { return dict_wordstr(dag->dict, node->wid); } char const * ps_latnode_baseword(ps_lattice_t *dag, ps_latnode_t *node) { return dict_wordstr(dag->dict, node->basewid); } int32 ps_latnode_prob(ps_lattice_t *dag, ps_latnode_t *node, ps_latlink_t **out_link) { latlink_list_t *links; int32 bestpost = logmath_get_zero(dag->lmath); for (links = node->exits; links; links = links->next) { int32 post = links->link->alpha + links->link->beta - dag->norm; if (post > bestpost) { if (out_link) *out_link = links->link; bestpost = post; } } return bestpost; } ps_latlink_iter_t * ps_latnode_exits(ps_latnode_t *node) { return node->exits; } ps_latlink_iter_t * ps_latnode_entries(ps_latnode_t *node) { return node->entries; } ps_latlink_iter_t * ps_latlink_iter_next(ps_latlink_iter_t *itor) { return itor->next; } void ps_latlink_iter_free(ps_latlink_iter_t *itor) { /* Do absolutely nothing. */ } ps_latlink_t * ps_latlink_iter_link(ps_latlink_iter_t *itor) { return itor->link; } int ps_latlink_times(ps_latlink_t *link, int16 *out_sf) { if (out_sf) { if (link->from) { *out_sf = link->from->sf; } else { *out_sf = 0; } } return link->ef; } ps_latnode_t * ps_latlink_nodes(ps_latlink_t *link, ps_latnode_t **out_src) { if (out_src) *out_src = link->from; return link->to; } char const * ps_latlink_word(ps_lattice_t *dag, ps_latlink_t *link) { if (link->from == NULL) return NULL; return dict_wordstr(dag->dict, link->from->wid); } char const * ps_latlink_baseword(ps_lattice_t *dag, ps_latlink_t *link) { if (link->from == NULL) return NULL; return dict_wordstr(dag->dict, link->from->basewid); } ps_latlink_t * ps_latlink_pred(ps_latlink_t *link) { return link->best_prev; } int32 ps_latlink_prob(ps_lattice_t *dag, ps_latlink_t *link, int32 *out_ascr) { int32 post = link->alpha + link->beta - dag->norm; if (out_ascr) *out_ascr = link->ascr << SENSCR_SHIFT; return post; } char const * ps_lattice_hyp(ps_lattice_t *dag, ps_latlink_t *link) { ps_latlink_t *l; size_t len; char *c; /* Backtrace once to get hypothesis length. */ len = 0; /* FIXME: There may not be a search, but actually there should be a dict. */ if (dict_real_word(dag->dict, link->to->basewid)) { char *wstr = dict_wordstr(dag->dict, link->to->basewid); if (wstr != NULL) len += strlen(wstr) + 1; } for (l = link; l; l = l->best_prev) { if (dict_real_word(dag->dict, l->from->basewid)) { char *wstr = dict_wordstr(dag->dict, l->from->basewid); if (wstr != NULL) len += strlen(wstr) + 1; } } /* Backtrace again to construct hypothesis string. */ ckd_free(dag->hyp_str); dag->hyp_str = ckd_calloc(1, len+1); /* extra one incase the hyp is empty */ c = dag->hyp_str + len - 1; if (dict_real_word(dag->dict, link->to->basewid)) { char *wstr = dict_wordstr(dag->dict, link->to->basewid); if (wstr != NULL) { len = strlen(wstr); c -= len; memcpy(c, wstr, len); if (c > dag->hyp_str) { --c; *c = ' '; } } } for (l = link; l; l = l->best_prev) { if (dict_real_word(dag->dict, l->from->basewid)) { char *wstr = dict_wordstr(dag->dict, l->from->basewid); if (wstr != NULL) { len = strlen(wstr); c -= len; memcpy(c, wstr, len); if (c > dag->hyp_str) { --c; *c = ' '; } } } } return dag->hyp_str; } static void ps_lattice_compute_lscr(ps_seg_t *seg, ps_latlink_t *link, int to) { ngram_model_t *lmset; /* Language model score is included in the link score for FSG * search. FIXME: Of course, this is sort of a hack :( */ if (0 != strcmp(ps_search_type(seg->search), PS_SEARCH_TYPE_NGRAM)) { seg->lback = 1; /* Unigram... */ seg->lscr = 0; return; } lmset = ((ngram_search_t *)seg->search)->lmset; if (link->best_prev == NULL) { if (to) /* Sentence has only two words. */ seg->lscr = ngram_bg_score(lmset, link->to->basewid, link->from->basewid, &seg->lback) >> SENSCR_SHIFT; else {/* This is the start symbol, its lscr is always 0. */ seg->lscr = 0; seg->lback = 1; } } else { /* Find the two predecessor words. */ if (to) { seg->lscr = ngram_tg_score(lmset, link->to->basewid, link->from->basewid, link->best_prev->from->basewid, &seg->lback) >> SENSCR_SHIFT; } else { if (link->best_prev->best_prev) seg->lscr = ngram_tg_score(lmset, link->from->basewid, link->best_prev->from->basewid, link->best_prev->best_prev->from->basewid, &seg->lback) >> SENSCR_SHIFT; else seg->lscr = ngram_bg_score(lmset, link->from->basewid, link->best_prev->from->basewid, &seg->lback) >> SENSCR_SHIFT; } } } static void ps_lattice_link2itor(ps_seg_t *seg, ps_latlink_t *link, int to) { dag_seg_t *itor = (dag_seg_t *)seg; ps_latnode_t *node; if (to) { node = link->to; seg->ef = node->lef; seg->prob = 0; /* norm + beta - norm */ } else { latlink_list_t *x; ps_latnode_t *n; logmath_t *lmath = ps_search_acmod(seg->search)->lmath; node = link->from; seg->ef = link->ef; seg->prob = link->alpha + link->beta - itor->norm; /* Sum over all exits for this word and any alternate pronunciations at the same frame. */ for (n = node; n; n = n->alt) { for (x = n->exits; x; x = x->next) { if (x->link == link) continue; seg->prob = logmath_add(lmath, seg->prob, x->link->alpha + x->link->beta - itor->norm); } } } seg->word = dict_wordstr(ps_search_dict(seg->search), node->wid); seg->sf = node->sf; seg->ascr = link->ascr << SENSCR_SHIFT; /* Compute language model score from best predecessors. */ ps_lattice_compute_lscr(seg, link, to); } static void ps_lattice_seg_free(ps_seg_t *seg) { dag_seg_t *itor = (dag_seg_t *)seg; ckd_free(itor->links); ckd_free(itor); } static ps_seg_t * ps_lattice_seg_next(ps_seg_t *seg) { dag_seg_t *itor = (dag_seg_t *)seg; ++itor->cur; if (itor->cur == itor->n_links + 1) { ps_lattice_seg_free(seg); return NULL; } else if (itor->cur == itor->n_links) { /* Re-use the last link but with the "to" node. */ ps_lattice_link2itor(seg, itor->links[itor->cur - 1], TRUE); } else { ps_lattice_link2itor(seg, itor->links[itor->cur], FALSE); } return seg; } static ps_segfuncs_t ps_lattice_segfuncs = { /* seg_next */ ps_lattice_seg_next, /* seg_free */ ps_lattice_seg_free }; ps_seg_t * ps_lattice_seg_iter(ps_lattice_t *dag, ps_latlink_t *link, float32 lwf) { dag_seg_t *itor; ps_latlink_t *l; int cur; /* Calling this an "iterator" is a bit of a misnomer since we have * to get the entire backtrace in order to produce it. */ itor = ckd_calloc(1, sizeof(*itor)); itor->base.vt = &ps_lattice_segfuncs; itor->base.search = dag->search; itor->base.lwf = lwf; itor->n_links = 0; itor->norm = dag->norm; for (l = link; l; l = l->best_prev) { ++itor->n_links; } if (itor->n_links == 0) { ckd_free(itor); return NULL; } itor->links = ckd_calloc(itor->n_links, sizeof(*itor->links)); cur = itor->n_links - 1; for (l = link; l; l = l->best_prev) { itor->links[cur] = l; --cur; } ps_lattice_link2itor((ps_seg_t *)itor, itor->links[0], FALSE); return (ps_seg_t *)itor; } latlink_list_t * latlink_list_new(ps_lattice_t *dag, ps_latlink_t *link, latlink_list_t *next) { latlink_list_t *ll; ll = listelem_malloc(dag->latlink_list_alloc); ll->link = link; ll->next = next; return ll; } void ps_lattice_pushq(ps_lattice_t *dag, ps_latlink_t *link) { if (dag->q_head == NULL) dag->q_head = dag->q_tail = latlink_list_new(dag, link, NULL); else { dag->q_tail->next = latlink_list_new(dag, link, NULL); dag->q_tail = dag->q_tail->next; } } ps_latlink_t * ps_lattice_popq(ps_lattice_t *dag) { latlink_list_t *x; ps_latlink_t *link; if (dag->q_head == NULL) return NULL; link = dag->q_head->link; x = dag->q_head->next; listelem_free(dag->latlink_list_alloc, dag->q_head); dag->q_head = x; if (dag->q_head == NULL) dag->q_tail = NULL; return link; } void ps_lattice_delq(ps_lattice_t *dag) { while (ps_lattice_popq(dag)) { /* Do nothing. */ } } ps_latlink_t * ps_lattice_traverse_edges(ps_lattice_t *dag, ps_latnode_t *start, ps_latnode_t *end) { ps_latnode_t *node; latlink_list_t *x; /* Cancel any unfinished traversal. */ ps_lattice_delq(dag); /* Initialize node fanin counts and path scores. */ for (node = dag->nodes; node; node = node->next) node->info.fanin = 0; for (node = dag->nodes; node; node = node->next) { for (x = node->exits; x; x = x->next) (x->link->to->info.fanin)++; } /* Initialize agenda with all exits from start. */ if (start == NULL) start = dag->start; for (x = start->exits; x; x = x->next) ps_lattice_pushq(dag, x->link); /* Pull the first edge off the queue. */ return ps_lattice_traverse_next(dag, end); } ps_latlink_t * ps_lattice_traverse_next(ps_lattice_t *dag, ps_latnode_t *end) { ps_latlink_t *next; next = ps_lattice_popq(dag); if (next == NULL) return NULL; /* Decrease fanin count for destination node and expand outgoing * edges if all incoming edges have been seen. */ --next->to->info.fanin; if (next->to->info.fanin == 0) { latlink_list_t *x; if (end == NULL) end = dag->end; if (next->to == end) { /* If we have traversed all links entering the end node, * clear the queue, causing future calls to this function * to return NULL. */ ps_lattice_delq(dag); return next; } /* Extend all outgoing edges. */ for (x = next->to->exits; x; x = x->next) ps_lattice_pushq(dag, x->link); } return next; } ps_latlink_t * ps_lattice_reverse_edges(ps_lattice_t *dag, ps_latnode_t *start, ps_latnode_t *end) { ps_latnode_t *node; latlink_list_t *x; /* Cancel any unfinished traversal. */ ps_lattice_delq(dag); /* Initialize node fanout counts and path scores. */ for (node = dag->nodes; node; node = node->next) { node->info.fanin = 0; for (x = node->exits; x; x = x->next) ++node->info.fanin; } /* Initialize agenda with all entries from end. */ if (end == NULL) end = dag->end; for (x = end->entries; x; x = x->next) ps_lattice_pushq(dag, x->link); /* Pull the first edge off the queue. */ return ps_lattice_reverse_next(dag, start); } ps_latlink_t * ps_lattice_reverse_next(ps_lattice_t *dag, ps_latnode_t *start) { ps_latlink_t *next; next = ps_lattice_popq(dag); if (next == NULL) return NULL; /* Decrease fanout count for source node and expand incoming * edges if all incoming edges have been seen. */ --next->from->info.fanin; if (next->from->info.fanin == 0) { latlink_list_t *x; if (start == NULL) start = dag->start; if (next->from == start) { /* If we have traversed all links entering the start node, * clear the queue, causing future calls to this function * to return NULL. */ ps_lattice_delq(dag); return next; } /* Extend all outgoing edges. */ for (x = next->from->entries; x; x = x->next) ps_lattice_pushq(dag, x->link); } return next; } /* * Find the best score from dag->start to end point of any link and * use it to update links further down the path. This is like * single-source shortest path search, except that it is done over * edges rather than nodes, which allows us to do exact trigram scoring. * * Helpfully enough, we get half of the posterior probability * calculation for free that way too. (interesting research topic: is * there a reliable Viterbi analogue to word-level Forward-Backward * like there is for state-level? Or, is it just lattice density?) */ ps_latlink_t * ps_lattice_bestpath(ps_lattice_t *dag, ngram_model_t *lmset, float32 lwf, float32 ascale) { ps_search_t *search; ps_latnode_t *node; ps_latlink_t *link; ps_latlink_t *bestend; latlink_list_t *x; logmath_t *lmath; int32 bestescr; search = dag->search; lmath = dag->lmath; /* Initialize path scores for all links exiting dag->start, and * set all other scores to the minimum. Also initialize alphas to * log-zero. */ for (node = dag->nodes; node; node = node->next) { for (x = node->exits; x; x = x->next) { x->link->path_scr = MAX_NEG_INT32; x->link->alpha = logmath_get_zero(lmath); } } for (x = dag->start->exits; x; x = x->next) { int32 n_used; int16 to_is_fil; to_is_fil = dict_filler_word(ps_search_dict(search), x->link->to->basewid) && x->link->to != dag->end; /* Best path points to dag->start, obviously. */ x->link->path_scr = x->link->ascr; if (lmset && !to_is_fil) x->link->path_scr += (ngram_bg_score(lmset, x->link->to->basewid, ps_search_start_wid(search), &n_used) >> SENSCR_SHIFT) * lwf; x->link->best_prev = NULL; /* No predecessors for start links. */ x->link->alpha = 0; } /* Traverse the edges in the graph, updating path scores. */ for (link = ps_lattice_traverse_edges(dag, NULL, NULL); link; link = ps_lattice_traverse_next(dag, NULL)) { int32 bprob, n_used; int32 w3_wid, w2_wid; int16 w3_is_fil, w2_is_fil; ps_latlink_t *prev_link; /* Sanity check, we should not be traversing edges that * weren't previously updated, otherwise nasty overflows will result. */ assert(link->path_scr != MAX_NEG_INT32); /* Find word predecessor if from-word is filler */ w3_wid = link->from->basewid; w2_wid = link->to->basewid; w3_is_fil = dict_filler_word(ps_search_dict(search), link->from->basewid) && link->from != dag->start; w2_is_fil = dict_filler_word(ps_search_dict(search), w2_wid) && link->to != dag->end; prev_link = link; if (w3_is_fil) { while (prev_link->best_prev != NULL) { prev_link = prev_link->best_prev; w3_wid = prev_link->from->basewid; if (!dict_filler_word(ps_search_dict(search), w3_wid) || prev_link->from == dag->start) { w3_is_fil = FALSE; break; } } } /* Calculate common bigram probability for all alphas. */ if (lmset && !w3_is_fil && !w2_is_fil) bprob = ngram_ng_prob(lmset, w2_wid, &w3_wid, 1, &n_used); else bprob = 0; /* Add in this link's acoustic score, which was a constant factor in previous computations (if any). */ link->alpha += (link->ascr << SENSCR_SHIFT) * ascale; if (w2_is_fil) { w2_is_fil = w3_is_fil; w3_is_fil = TRUE; w2_wid = w3_wid; while (prev_link->best_prev != NULL) { prev_link = prev_link->best_prev; w3_wid = prev_link->from->basewid; if (!dict_filler_word(ps_search_dict(search), w3_wid) || prev_link->from == dag->start) { w3_is_fil = FALSE; break; } } } /* Update scores for all paths exiting link->to. */ for (x = link->to->exits; x; x = x->next) { int32 score; int32 w1_wid; int16 w1_is_fil; w1_wid = x->link->to->basewid; w1_is_fil = dict_filler_word(ps_search_dict(search), w1_wid) && x->link->to != dag->end; /* Update alpha with sum of previous alphas. */ x->link->alpha = logmath_add(lmath, x->link->alpha, link->alpha + bprob); /* Update link score with maximum link score. */ score = link->path_scr + x->link->ascr; /* Calculate language score for bestpath if possible */ if (lmset && !w1_is_fil && !w2_is_fil) { if (w3_is_fil) //partial context available score += (ngram_bg_score(lmset, w1_wid, w2_wid, &n_used) >> SENSCR_SHIFT) * lwf; else //full context available score += (ngram_tg_score(lmset, w1_wid, w2_wid, w3_wid, &n_used) >> SENSCR_SHIFT) * lwf; } if (score BETTER_THAN x->link->path_scr) { x->link->path_scr = score; x->link->best_prev = link; } } } /* Find best link entering final node, and calculate normalizer * for posterior probabilities. */ bestend = NULL; bestescr = MAX_NEG_INT32; /* Normalizer is the alpha for the imaginary link exiting the final node. */ dag->norm = logmath_get_zero(lmath); for (x = dag->end->entries; x; x = x->next) { int32 bprob, n_used; int32 from_wid; int16 from_is_fil; from_wid = x->link->from->basewid; from_is_fil = dict_filler_word(ps_search_dict(search), from_wid) && x->link->from != dag->start; if (from_is_fil) { ps_latlink_t *prev_link = x->link; while (prev_link->best_prev != NULL) { prev_link = prev_link->best_prev; from_wid = prev_link->from->basewid; if (!dict_filler_word(ps_search_dict(search), from_wid) || prev_link->from == dag->start) { from_is_fil = FALSE; break; } } } if (lmset && !from_is_fil) bprob = ngram_ng_prob(lmset, x->link->to->basewid, &from_wid, 1, &n_used); else bprob = 0; dag->norm = logmath_add(lmath, dag->norm, x->link->alpha + bprob); if (x->link->path_scr BETTER_THAN bestescr) { bestescr = x->link->path_scr; bestend = x->link; } } /* FIXME: floating point... */ dag->norm += (int32)(dag->final_node_ascr << SENSCR_SHIFT) * ascale; E_INFO("Bestpath score: %d\n", bestescr); E_INFO("Normalizer P(O) = alpha(%s:%d:%d) = %d\n", dict_wordstr(dag->search->dict, dag->end->wid), dag->end->sf, dag->end->lef, dag->norm); return bestend; } static int32 ps_lattice_joint(ps_lattice_t *dag, ps_latlink_t *link, float32 ascale) { ngram_model_t *lmset; int32 jprob; /* Sort of a hack... */ if (dag->search && 0 == strcmp(ps_search_type(dag->search), PS_SEARCH_TYPE_NGRAM)) lmset = ((ngram_search_t *)dag->search)->lmset; else lmset = NULL; jprob = (dag->final_node_ascr << SENSCR_SHIFT) * ascale; while (link) { if (lmset) { int lback; int32 from_wid, to_wid; int16 from_is_fil, to_is_fil; from_wid = link->from->basewid; to_wid = link->to->basewid; from_is_fil = dict_filler_word(dag->dict, from_wid) && link->from != dag->start; to_is_fil = dict_filler_word(dag->dict, to_wid) && link->to != dag->end; /* Find word predecessor if from-word is filler */ if (!to_is_fil && from_is_fil) { ps_latlink_t *prev_link = link; while (prev_link->best_prev != NULL) { prev_link = prev_link->best_prev; from_wid = prev_link->from->basewid; if (!dict_filler_word(dag->dict, from_wid) || prev_link->from == dag->start) { from_is_fil = FALSE; break; } } } /* Compute unscaled language model probability. Note that this is actually not the language model probability that corresponds to this link, but that is okay, because we are just taking the sum over all links in the best path. */ if (!from_is_fil && !to_is_fil) jprob += ngram_ng_prob(lmset, to_wid, &from_wid, 1, &lback); } /* If there is no language model, we assume that the language model probability (such as it is) has been included in the link score. */ jprob += (link->ascr << SENSCR_SHIFT) * ascale; link = link->best_prev; } E_INFO("Joint P(O,S) = %d P(S|O) = %d\n", jprob, jprob - dag->norm); return jprob; } int32 ps_lattice_posterior(ps_lattice_t *dag, ngram_model_t *lmset, float32 ascale) { logmath_t *lmath; ps_latnode_t *node; ps_latlink_t *link; latlink_list_t *x; ps_latlink_t *bestend; int32 bestescr; lmath = dag->lmath; /* Reset all betas to zero. */ for (node = dag->nodes; node; node = node->next) { for (x = node->exits; x; x = x->next) { x->link->beta = logmath_get_zero(lmath); } } bestend = NULL; bestescr = MAX_NEG_INT32; /* Accumulate backward probabilities for all links. */ for (link = ps_lattice_reverse_edges(dag, NULL, NULL); link; link = ps_lattice_reverse_next(dag, NULL)) { int32 bprob, n_used; int32 from_wid, to_wid; int16 from_is_fil, to_is_fil; from_wid = link->from->basewid; to_wid = link->to->basewid; from_is_fil = dict_filler_word(dag->dict, from_wid) && link->from != dag->start; to_is_fil = dict_filler_word(dag->dict, to_wid) && link->to != dag->end; /* Find word predecessor if from-word is filler */ if (!to_is_fil && from_is_fil) { ps_latlink_t *prev_link = link; while (prev_link->best_prev != NULL) { prev_link = prev_link->best_prev; from_wid = prev_link->from->basewid; if (!dict_filler_word(dag->dict, from_wid) || prev_link->from == dag->start) { from_is_fil = FALSE; break; } } } /* Calculate LM probability. */ if (lmset && !from_is_fil && !to_is_fil) bprob = ngram_ng_prob(lmset, to_wid, &from_wid, 1, &n_used); else bprob = 0; if (link->to == dag->end) { /* Track the best path - we will backtrace in order to calculate the unscaled joint probability for sentence posterior. */ if (link->path_scr BETTER_THAN bestescr) { bestescr = link->path_scr; bestend = link; } /* Imaginary exit link from final node has beta = 1.0 */ link->beta = bprob + (dag->final_node_ascr << SENSCR_SHIFT) * ascale; } else { /* Update beta from all outgoing betas. */ for (x = link->to->exits; x; x = x->next) { link->beta = logmath_add(lmath, link->beta, x->link->beta + bprob + (x->link->ascr << SENSCR_SHIFT) * ascale); } } } /* Return P(S|O) = P(O,S)/P(O) */ return ps_lattice_joint(dag, bestend, ascale) - dag->norm; } int32 ps_lattice_posterior_prune(ps_lattice_t *dag, int32 beam) { ps_latlink_t *link; int npruned = 0; for (link = ps_lattice_traverse_edges(dag, dag->start, dag->end); link; link = ps_lattice_traverse_next(dag, dag->end)) { link->from->reachable = FALSE; if (link->alpha + link->beta - dag->norm < beam) { latlink_list_t *x, *tmp, *next; tmp = NULL; for (x = link->from->exits; x; x = next) { next = x->next; if (x->link == link) { listelem_free(dag->latlink_list_alloc, x); } else { x->next = tmp; tmp = x; } } link->from->exits = tmp; tmp = NULL; for (x = link->to->entries; x; x = next) { next = x->next; if (x->link == link) { listelem_free(dag->latlink_list_alloc, x); } else { x->next = tmp; tmp = x; } } link->to->entries = tmp; listelem_free(dag->latlink_alloc, link); ++npruned; } } dag_mark_reachable(dag->end); ps_lattice_delete_unreachable(dag); return npruned; } /* Parameters to prune n-best alternatives search */ #define MAX_PATHS 500 /* Max allowed active paths at any time */ #define MAX_HYP_TRIES 10000 /* * For each node in any path between from and end of utt, find the * best score from "from".sf to end of utt. (NOTE: Uses bigram probs; * this is an estimate of the best score from "from".) (NOTE #2: yes, * this is the "heuristic score" used in A* search) */ static int32 best_rem_score(ps_astar_t *nbest, ps_latnode_t * from) { latlink_list_t *x; int32 bestscore, score; if (from->info.rem_score <= 0) return (from->info.rem_score); /* Best score from "from" to end of utt not known; compute from successors */ bestscore = WORST_SCORE; for (x = from->exits; x; x = x->next) { int32 n_used; score = best_rem_score(nbest, x->link->to); score += x->link->ascr; if (nbest->lmset) score += (ngram_bg_score(nbest->lmset, x->link->to->basewid, from->basewid, &n_used) >> SENSCR_SHIFT) * nbest->lwf; if (score BETTER_THAN bestscore) bestscore = score; } from->info.rem_score = bestscore; return bestscore; } /* * Insert newpath in sorted (by path score) list of paths. But if newpath is * too far down the list, drop it (FIXME: necessary?) * total_score = path score (newpath) + rem_score to end of utt. */ static void path_insert(ps_astar_t *nbest, ps_latpath_t *newpath, int32 total_score) { ps_latpath_t *prev, *p; int32 i; prev = NULL; for (i = 0, p = nbest->path_list; (i < MAX_PATHS) && p; p = p->next, i++) { if ((p->score + p->node->info.rem_score) < total_score) break; prev = p; } /* newpath should be inserted between prev and p */ if (i < MAX_PATHS) { /* Insert new partial hyp */ newpath->next = p; if (!prev) nbest->path_list = newpath; else prev->next = newpath; if (!p) nbest->path_tail = newpath; nbest->n_path++; nbest->n_hyp_insert++; nbest->insert_depth += i; } else { /* newpath score too low; reject it and also prune paths beyond MAX_PATHS */ nbest->path_tail = prev; prev->next = NULL; nbest->n_path = MAX_PATHS; listelem_free(nbest->latpath_alloc, newpath); nbest->n_hyp_reject++; for (; p; p = newpath) { newpath = p->next; listelem_free(nbest->latpath_alloc, p); nbest->n_hyp_reject++; } } } /* Find all possible extensions to given partial path */ static void path_extend(ps_astar_t *nbest, ps_latpath_t * path) { latlink_list_t *x; ps_latpath_t *newpath; int32 total_score, tail_score; /* Consider all successors of path->node */ for (x = path->node->exits; x; x = x->next) { int32 n_used; /* Skip successor if no path from it reaches the final node */ if (x->link->to->info.rem_score <= WORST_SCORE) continue; /* Create path extension and compute exact score for this extension */ newpath = listelem_malloc(nbest->latpath_alloc); newpath->node = x->link->to; newpath->parent = path; newpath->score = path->score + x->link->ascr; if (nbest->lmset) { if (path->parent) { newpath->score += nbest->lwf * (ngram_tg_score(nbest->lmset, newpath->node->basewid, path->node->basewid, path->parent->node->basewid, &n_used) >> SENSCR_SHIFT); } else newpath->score += nbest->lwf * (ngram_bg_score(nbest->lmset, newpath->node->basewid, path->node->basewid, &n_used) >> SENSCR_SHIFT); } /* Insert new partial path hypothesis into sorted path_list */ nbest->n_hyp_tried++; total_score = newpath->score + newpath->node->info.rem_score; /* First see if hyp would be worse than the worst */ if (nbest->n_path >= MAX_PATHS) { tail_score = nbest->path_tail->score + nbest->path_tail->node->info.rem_score; if (total_score < tail_score) { listelem_free(nbest->latpath_alloc, newpath); nbest->n_hyp_reject++; continue; } } path_insert(nbest, newpath, total_score); } } ps_astar_t * ps_astar_start(ps_lattice_t *dag, ngram_model_t *lmset, float32 lwf, int sf, int ef, int w1, int w2) { ps_astar_t *nbest; ps_latnode_t *node; nbest = ckd_calloc(1, sizeof(*nbest)); nbest->dag = dag; nbest->lmset = lmset; nbest->lwf = lwf; nbest->sf = sf; if (ef < 0) nbest->ef = dag->n_frames + 1; else nbest->ef = ef; nbest->w1 = w1; nbest->w2 = w2; nbest->latpath_alloc = listelem_alloc_init(sizeof(ps_latpath_t)); /* Initialize rem_score (A* heuristic) to default values */ for (node = dag->nodes; node; node = node->next) { if (node == dag->end) node->info.rem_score = 0; else if (node->exits == NULL) node->info.rem_score = WORST_SCORE; else node->info.rem_score = 1; /* +ve => unknown value */ } /* Create initial partial hypotheses list consisting of nodes starting at sf */ nbest->path_list = nbest->path_tail = NULL; for (node = dag->nodes; node; node = node->next) { if (node->sf == sf) { ps_latpath_t *path; int32 n_used; best_rem_score(nbest, node); path = listelem_malloc(nbest->latpath_alloc); path->node = node; path->parent = NULL; if (nbest->lmset) path->score = nbest->lwf * ((w1 < 0) ? ngram_bg_score(nbest->lmset, node->basewid, w2, &n_used) : ngram_tg_score(nbest->lmset, node->basewid, w2, w1, &n_used)); else path->score = 0; path->score >>= SENSCR_SHIFT; path_insert(nbest, path, path->score + node->info.rem_score); } } return nbest; } ps_latpath_t * ps_astar_next(ps_astar_t *nbest) { ps_lattice_t *dag; dag = nbest->dag; /* Pop the top (best) partial hypothesis */ while ((nbest->top = nbest->path_list) != NULL) { nbest->path_list = nbest->path_list->next; if (nbest->top == nbest->path_tail) nbest->path_tail = NULL; nbest->n_path--; /* Complete hypothesis? */ if ((nbest->top->node->sf >= nbest->ef) || ((nbest->top->node == dag->end) && (nbest->ef > dag->end->sf))) { /* FIXME: Verify that it is non-empty. Also we may want * to verify that it is actually distinct from other * paths, since often this is not the case*/ return nbest->top; } else { if (nbest->top->node->fef < nbest->ef) path_extend(nbest, nbest->top); } } /* Did not find any more paths to extend. */ return NULL; } char const * ps_astar_hyp(ps_astar_t *nbest, ps_latpath_t *path) { ps_search_t *search; ps_latpath_t *p; size_t len; char *c; char *hyp; search = nbest->dag->search; /* Backtrace once to get hypothesis length. */ len = 0; for (p = path; p; p = p->parent) { if (dict_real_word(ps_search_dict(search), p->node->basewid)) { char *wstr = dict_wordstr(ps_search_dict(search), p->node->basewid); if (wstr != NULL) len += strlen(wstr) + 1; } } if (len == 0) { return NULL; } /* Backtrace again to construct hypothesis string. */ hyp = ckd_calloc(1, len); c = hyp + len - 1; for (p = path; p; p = p->parent) { if (dict_real_word(ps_search_dict(search), p->node->basewid)) { char *wstr = dict_wordstr(ps_search_dict(search), p->node->basewid); if (wstr != NULL) { len = strlen(wstr); c -= len; memcpy(c, wstr, len); if (c > hyp) { --c; *c = ' '; } } } } nbest->hyps = glist_add_ptr(nbest->hyps, hyp); return hyp; } static void ps_astar_node2itor(astar_seg_t *itor) { ps_seg_t *seg = (ps_seg_t *)itor; ps_latnode_t *node; assert(itor->cur < itor->n_nodes); node = itor->nodes[itor->cur]; if (itor->cur == itor->n_nodes - 1) seg->ef = node->lef; else seg->ef = itor->nodes[itor->cur + 1]->sf - 1; seg->word = dict_wordstr(ps_search_dict(seg->search), node->wid); seg->sf = node->sf; seg->prob = 0; /* FIXME: implement forward-backward */ } static void ps_astar_seg_free(ps_seg_t *seg) { astar_seg_t *itor = (astar_seg_t *)seg; ckd_free(itor->nodes); ckd_free(itor); } static ps_seg_t * ps_astar_seg_next(ps_seg_t *seg) { astar_seg_t *itor = (astar_seg_t *)seg; ++itor->cur; if (itor->cur == itor->n_nodes) { ps_astar_seg_free(seg); return NULL; } else { ps_astar_node2itor(itor); } return seg; } static ps_segfuncs_t ps_astar_segfuncs = { /* seg_next */ ps_astar_seg_next, /* seg_free */ ps_astar_seg_free }; ps_seg_t * ps_astar_seg_iter(ps_astar_t *astar, ps_latpath_t *path, float32 lwf) { astar_seg_t *itor; ps_latpath_t *p; int cur; /* Backtrace and make an iterator, this should look familiar by now. */ itor = ckd_calloc(1, sizeof(*itor)); itor->base.vt = &ps_astar_segfuncs; itor->base.search = astar->dag->search; itor->base.lwf = lwf; itor->n_nodes = itor->cur = 0; for (p = path; p; p = p->parent) { ++itor->n_nodes; } itor->nodes = ckd_calloc(itor->n_nodes, sizeof(*itor->nodes)); cur = itor->n_nodes - 1; for (p = path; p; p = p->parent) { itor->nodes[cur] = p->node; --cur; } ps_astar_node2itor(itor); return (ps_seg_t *)itor; } void ps_astar_finish(ps_astar_t *nbest) { gnode_t *gn; /* Free all hyps. */ for (gn = nbest->hyps; gn; gn = gnode_next(gn)) { ckd_free(gnode_ptr(gn)); } glist_free(nbest->hyps); /* Free all paths. */ listelem_alloc_free(nbest->latpath_alloc); /* Free the Henge. */ ckd_free(nbest); } pocketsphinx-5prealpha/src/libpocketsphinx/ps_lattice_internal.h0000664000175000017500000002264512504317100022572 00000000000000/* -*- 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 ps_lattice_internal.h Word graph search implementation */ #ifndef __PS_LATTICE_INTERNAL_H__ #define __PS_LATTICE_INTERNAL_H__ /** * Linked list of DAG link pointers. * * Because the same link structure is used for forward and reverse * links, as well as for the agenda used in bestpath search, we can't * store the list pointer inside latlink_t. We could use glist_t * here, but it wastes 4 bytes per entry on 32-bit machines. */ typedef struct latlink_list_s { ps_latlink_t *link; struct latlink_list_s *next; } latlink_list_t; /** * Word graph structure used in bestpath/nbest search. */ struct ps_lattice_s { int refcount; /**< Reference count. */ logmath_t *lmath; /**< Log-math object. */ ps_search_t *search; /**< Search (if generated by search). */ dict_t *dict; /**< Dictionary for this DAG. */ int32 silence; /**< Silence word ID. */ int32 frate; /**< Frame rate. */ ps_latnode_t *nodes; /**< List of all nodes. */ ps_latnode_t *start; /**< Starting node. */ ps_latnode_t *end; /**< Ending node. */ frame_idx_t n_frames; /**< Number of frames for this utterance. */ int32 n_nodes; /**< Number of nodes in this lattice. */ int32 final_node_ascr; /**< Acoustic score of implicit link exiting final node. */ int32 norm; /**< Normalizer for posterior probabilities. */ char *hyp_str; /**< Current hypothesis string. */ listelem_alloc_t *latnode_alloc; /**< Node allocator for this DAG. */ listelem_alloc_t *latlink_alloc; /**< Link allocator for this DAG. */ listelem_alloc_t *latlink_list_alloc; /**< List element allocator for this DAG. */ /* This will probably be replaced with a heap. */ latlink_list_t *q_head; /**< Queue of links for traversal. */ latlink_list_t *q_tail; /**< Queue of links for traversal. */ }; /** * Links between DAG nodes. * * A link corresponds to a single hypothesized instance of a word with * a given start and end point. */ struct ps_latlink_s { struct ps_latnode_s *from; /**< From node */ struct ps_latnode_s *to; /**< To node */ struct ps_latlink_s *best_prev; int32 ascr; /**< Score for from->wid (from->sf to this->ef) */ int32 path_scr; /**< Best path score from root of DAG */ frame_idx_t ef; /**< Ending frame of this word */ int32 alpha; /**< Forward probability of this link P(w,o_1^{ef}) */ int32 beta; /**< Backward probability of this link P(w|o_{ef+1}^T) */ }; /** * DAG nodes. * * A node corresponds to a number of hypothesized instances of a word * which all share the same starting point. */ struct ps_latnode_s { int32 id; /**< Unique id for this node */ int32 wid; /**< Dictionary word id */ int32 basewid; /**< Dictionary base word id */ /* FIXME: These are (ab)used to store backpointer indices, therefore they MUST be 32 bits. */ int32 fef; /**< First end frame */ int32 lef; /**< Last end frame */ frame_idx_t sf; /**< Start frame */ int16 reachable; /**< From \verbatim \endverbatim or \verbatim \endverbatim */ int32 node_id; /**< Node from fsg model, used to map lattice back to model */ union { glist_t velist; /**< List of history entries with different lmstate (tst only) */ int32 fanin; /**< Number nodes with links to this node */ int32 rem_score; /**< Estimated best score from node.sf to end */ int32 best_exit; /**< Best exit score (used for final nodes only) */ } info; latlink_list_t *exits; /**< Links out of this node */ latlink_list_t *entries; /**< Links into this node */ struct ps_latnode_s *alt; /**< Node with alternate pronunciation for this word */ struct ps_latnode_s *next; /**< Next node in DAG (no ordering implied) */ }; /** * Segmentation "iterator" for backpointer table results. */ typedef struct dag_seg_s { ps_seg_t base; /**< Base structure. */ ps_latlink_t **links; /**< Array of lattice links. */ int32 norm; /**< Normalizer for posterior probabilities. */ int16 n_links; /**< Number of lattice links. */ int16 cur; /**< Current position in bpidx. */ } dag_seg_t; /** * Partial path structure used in N-best (A*) search. * * Each partial path (latpath_t) is constructed by extending another * partial path--parent--by one node. */ typedef struct ps_latpath_s { ps_latnode_t *node; /**< Node ending this path. */ struct ps_latpath_s *parent; /**< Previous element in this path. */ struct ps_latpath_s *next; /**< Pointer to next path in list of paths. */ int32 score; /**< Exact score from start node up to node->sf. */ } ps_latpath_t; /** * A* search structure. */ typedef struct ps_astar_s { ps_lattice_t *dag; ngram_model_t *lmset; float32 lwf; frame_idx_t sf; frame_idx_t ef; int32 w1; int32 w2; int32 n_hyp_tried; int32 n_hyp_insert; int32 n_hyp_reject; int32 insert_depth; int32 n_path; ps_latpath_t *path_list; ps_latpath_t *path_tail; ps_latpath_t *top; glist_t hyps; /**< List of hypothesis strings. */ listelem_alloc_t *latpath_alloc; /**< Path allocator for N-best search. */ } ps_astar_t; /** * Segmentation "iterator" for A* search results. */ typedef struct astar_seg_s { ps_seg_t base; ps_latnode_t **nodes; int n_nodes; int cur; } astar_seg_t; /** * Construct an empty word graph with reference to a search structure. */ ps_lattice_t *ps_lattice_init_search(ps_search_t *search, int n_frame); /** * Insert penalty for fillers */ void ps_lattice_penalize_fillers(ps_lattice_t *dag, int32 silpen, int32 fillpen); /** * Remove nodes marked as unreachable. */ void ps_lattice_delete_unreachable(ps_lattice_t *dag); /** * Add an edge to the traversal queue. */ void ps_lattice_pushq(ps_lattice_t *dag, ps_latlink_t *link); /** * Remove an edge from the traversal queue. */ ps_latlink_t *ps_lattice_popq(ps_lattice_t *dag); /** * Clear and reset the traversal queue. */ void ps_lattice_delq(ps_lattice_t *dag); /** * Create a new lattice link element. */ latlink_list_t *latlink_list_new(ps_lattice_t *dag, ps_latlink_t *link, latlink_list_t *next); /** * Get hypothesis string after bestpath search. */ char const *ps_lattice_hyp(ps_lattice_t *dag, ps_latlink_t *link); /** * Get hypothesis segmentation iterator after bestpath search. */ ps_seg_t *ps_lattice_seg_iter(ps_lattice_t *dag, ps_latlink_t *link, float32 lwf); /** * Begin N-Gram based A* search on a word graph. * * @param sf Starting frame for N-best search. * @param ef Ending frame for N-best search, or -1 for last frame. * @param w1 First context word, or -1 for none. * @param w2 Second context word, or -1 for none. * @return 0 for success, <0 on error. */ ps_astar_t *ps_astar_start(ps_lattice_t *dag, ngram_model_t *lmset, float32 lwf, int sf, int ef, int w1, int w2); /** * Find next best hypothesis of A* on a word graph. * * @return a complete path, or NULL if no more hypotheses exist. */ ps_latpath_t *ps_astar_next(ps_astar_t *nbest); /** * Finish N-best search, releasing resources associated with it. */ void ps_astar_finish(ps_astar_t *nbest); /** * Get hypothesis string from A* search. */ char const *ps_astar_hyp(ps_astar_t *nbest, ps_latpath_t *path); /** * Get hypothesis segmentation from A* search. */ ps_seg_t *ps_astar_seg_iter(ps_astar_t *astar, ps_latpath_t *path, float32 lwf); #endif /* __PS_LATTICE_INTERNAL_H__ */ pocketsphinx-5prealpha/src/libpocketsphinx/fsg_search_internal.h0000664000175000017500000001207312520771215022552 00000000000000/* -*- 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_search_internal.h -- Search structures for FSG decoding. */ #ifndef __S2_FSG_SEARCH_H__ #define __S2_FSG_SEARCH_H__ /* SphinxBase headers. */ #include #include #include /* Local headers. */ #include "pocketsphinx_internal.h" #include "hmm.h" #include "fsg_history.h" #include "fsg_lextree.h" /** * Segmentation "iterator" for FSG history. */ typedef struct fsg_seg_s { ps_seg_t base; /**< Base structure. */ fsg_hist_entry_t **hist; /**< Sequence of history entries. */ int16 n_hist; /**< Number of history entries. */ int16 cur; /**< Current position in hist. */ } fsg_seg_t; /** * Implementation of FSG search (and "FSG set") structure. */ typedef struct fsg_search_s { ps_search_t base; hmm_context_t *hmmctx; /**< HMM context. */ fsg_model_t *fsg; /**< FSG model */ struct fsg_lextree_s *lextree;/**< Lextree structure for the currently active FSG */ struct fsg_history_s *history;/**< For storing the Viterbi search history */ glist_t pnode_active; /**< Those active in this frame */ glist_t pnode_active_next; /**< Those activated for the next frame */ int32 beam_orig; /**< Global pruning threshold */ int32 pbeam_orig; /**< Pruning threshold for phone transition */ int32 wbeam_orig; /**< Pruning threshold for word exit */ float32 beam_factor; /**< Dynamic/adaptive factor (<=1) applied to above beams to determine actual effective beams. For implementing absolute pruning. */ int32 beam, pbeam, wbeam; /**< Effective beams after applying beam_factor */ int32 lw, pip, wip; /**< Language weights */ frame_idx_t frame; /**< Current frame. */ uint8 final; /**< Decoding is finished for this utterance. */ uint8 bestpath; /**< Whether to run bestpath search and confidence annotation at end. */ float32 ascale; /**< Acoustic score scale for posterior probabilities. */ int32 bestscore; /**< For beam pruning */ int32 bpidx_start; /**< First history entry index this frame */ int32 ascr, lscr; /**< Total acoustic and lm score for utt */ int32 n_hmm_eval; /**< Total HMMs evaluated this utt */ int32 n_sen_eval; /**< Total senones evaluated this utt */ } fsg_search_t; /* Access macros */ #define fsg_search_frame(s) ((s)->frame) /** * Create, initialize and return a search module. */ ps_search_t *fsg_search_init(const char *name, fsg_model_t *fsg, cmd_ln_t *config, acmod_t *acmod, dict_t *dict, dict2pid_t *d2p); /** * Deallocate search structure. */ void fsg_search_free(ps_search_t *search); /** * Update FSG search module for new or updated FSGs. */ int fsg_search_reinit(ps_search_t *fsgs, dict_t *dict, dict2pid_t *d2p); /** * Prepare the FSG search structure for beginning decoding of the next * utterance. */ int fsg_search_start(ps_search_t *search); /** * Step one frame forward through the Viterbi search. */ int fsg_search_step(ps_search_t *search, int frame_idx); /** * Windup and clean the FSG search structure after utterance. */ int fsg_search_finish(ps_search_t *search); /** * Get hypothesis string from the FSG search. */ char const *fsg_search_hyp(ps_search_t *search, int32 *out_score, int32 *out_is_final); #endif pocketsphinx-5prealpha/src/libpocketsphinx/blkarray_list.h0000664000175000017500000001116212504317100021401 00000000000000/* ==================================================================== * 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. * * ==================================================================== * */ /* * blkarray_list.h -- array-based list structure, for memory and access * efficiency. * * HISTORY * * $Log: blkarray_list.h,v $ * Revision 1.1.1.1 2006/05/23 18:45:02 dhuggins * re-importation * * Revision 1.2 2004/12/10 16:48:58 rkm * Added continuous density acoustic model handling * * Revision 1.1 2004/07/16 00:57:12 egouvea * Added Ravi's implementation of FSG support. * * Revision 1.2 2004/05/27 14:22:57 rkm * FSG cross-word triphones completed (but for single-phone words) * * Revision 1.1.1.1 2004/03/01 14:30:31 rkm * * * Revision 1.1 2004/02/26 01:14:48 rkm * *** empty log message *** * * * 18-Feb-2004 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon * Started. */ #ifndef __S2_BLKARRAY_LIST_H__ #define __S2_BLKARRAY_LIST_H__ #include /* * For maintaining a (conceptual) "list" of pointers to arbitrary data. * The application is responsible for knowing the true data type. * Use an array instead of a true list for efficiency (both memory and * speed). But use a blocked (2-D) array to allow dynamic resizing at a * coarse grain. An entire block is allocated or freed, as appropriate. */ typedef struct blkarray_list_s { void ***ptr; /* ptr[][] is the user-supplied ptr */ int32 maxblks; /* size of ptr (#rows) */ int32 blksize; /* size of ptr[] (#cols, ie, size of each row) */ int32 n_valid; /* # entries actually stored in the list */ int32 cur_row; /* The current row being that has empty entry */ int32 cur_row_free; /* First entry valid within the current row */ } blkarray_list_t; /* Access macros */ #define blkarray_list_ptr(l,r,c) ((l)->ptr[r][c]) #define blkarray_list_maxblks(l) ((l)->maxblks) #define blkarray_list_blksize(l) ((l)->blksize) #define blkarray_list_n_valid(l) ((l)->n_valid) #define blkarray_list_cur_row(l) ((l)->cur_row) #define blkarray_list_cur_row_free(l) ((l)->cur_row_free) /* * Initialize and return a new blkarray_list containing an empty list * (i.e., 0 length). Sized for the given values of maxblks and blksize. * NOTE: (maxblks * blksize) should not overflow int32, but this is not * checked. * Return the allocated entry if successful, NULL if any error. */ blkarray_list_t *_blkarray_list_init (int32 maxblks, int32 blksize); /* * Like _blkarray_list_init() above, but for some default values of * maxblks and blksize. */ blkarray_list_t *blkarray_list_init ( void ); /** * Completely finalize a blkarray_list. */ void blkarray_list_free(blkarray_list_t *bl); /* * Append the given new entry (data) to the end of the list. * Return the index of the entry if successful, -1 if any error. * The returned indices are guaranteed to be successive integers (i.e., * 0, 1, 2...) for successive append operations, until the list is reset, * when they resume from 0. */ int32 blkarray_list_append (blkarray_list_t *, void *data); /* * Free all the entries in the list (using ckd_free) and reset the * list length to 0. */ void blkarray_list_reset (blkarray_list_t *); /* Gets n-th element of the array list */ void * blkarray_list_get(blkarray_list_t *, int32 n); #endif pocketsphinx-5prealpha/src/libpocketsphinx/kws_search.c0000664000175000017500000004772512560370305020711 00000000000000/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* ==================================================================== * Copyright (c) 2013 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. * * ==================================================================== * */ /* * kws_search.c -- Search object for key phrase spotting. */ #include #include #include #include #include #include #include #include #include "pocketsphinx_internal.h" #include "kws_search.h" /** Access macros */ #define hmm_is_active(hmm) ((hmm)->frame > 0) #define kws_nth_hmm(keyword,n) (&((keyword)->hmms[n])) static ps_lattice_t * kws_search_lattice(ps_search_t * search) { return NULL; } static int kws_search_prob(ps_search_t * search) { return 0; } static void kws_seg_free(ps_seg_t *seg) { kws_seg_t *itor = (kws_seg_t *)seg; ckd_free(itor); } static void kws_seg_fill(kws_seg_t *itor) { kws_detection_t* detection = (kws_detection_t*)gnode_ptr(itor->detection); itor->base.word = detection->keyphrase; itor->base.sf = detection->sf; itor->base.ef = detection->ef; itor->base.prob = detection->prob; itor->base.ascr = detection->ascr; itor->base.lscr = 0; } static ps_seg_t * kws_seg_next(ps_seg_t *seg) { kws_seg_t *itor = (kws_seg_t *)seg; gnode_t *detect_head = gnode_next(itor->detection); while (detect_head != NULL && ((kws_detection_t*)gnode_ptr(detect_head))->ef > itor->last_frame) detect_head = gnode_next(detect_head); itor->detection = detect_head; if (!itor->detection) { kws_seg_free(seg); return NULL; } kws_seg_fill(itor); return seg; } static ps_segfuncs_t kws_segfuncs = { /* seg_next */ kws_seg_next, /* seg_free */ kws_seg_free }; static ps_seg_t * kws_search_seg_iter(ps_search_t * search, int32 * out_score) { kws_search_t *kwss = (kws_search_t *)search; kws_seg_t *itor; gnode_t *detect_head = kwss->detections->detect_list; while (detect_head != NULL && ((kws_detection_t*)gnode_ptr(detect_head))->ef > kwss->frame - kwss->delay) detect_head = gnode_next(detect_head); if (!detect_head) return NULL; if (out_score) *out_score = 0; itor = (kws_seg_t *)ckd_calloc(1, sizeof(*itor)); itor->base.vt = &kws_segfuncs; itor->base.search = search; itor->base.lwf = 1.0; itor->detection = detect_head; itor->last_frame = kwss->frame - kwss->delay; kws_seg_fill(itor); return (ps_seg_t *)itor; } static ps_searchfuncs_t kws_funcs = { /* start: */ kws_search_start, /* step: */ kws_search_step, /* finish: */ kws_search_finish, /* reinit: */ kws_search_reinit, /* free: */ kws_search_free, /* lattice: */ kws_search_lattice, /* hyp: */ kws_search_hyp, /* prob: */ kws_search_prob, /* seg_iter: */ kws_search_seg_iter, }; /* Scans the dictionary and check if all words are present. */ static int kws_search_check_dict(kws_search_t * kwss) { dict_t *dict; char **wrdptr; char *tmp_keyphrase; int32 nwrds, wid; int keyword_iter, i; uint8 success; success = TRUE; dict = ps_search_dict(kwss); for (keyword_iter = 0; keyword_iter < kwss->n_keyphrases; keyword_iter++) { tmp_keyphrase = (char *) ckd_salloc(kwss->keyphrases[keyword_iter].word); nwrds = str2words(tmp_keyphrase, NULL, 0); wrdptr = (char **) ckd_calloc(nwrds, sizeof(*wrdptr)); str2words(tmp_keyphrase, wrdptr, nwrds); for (i = 0; i < nwrds; i++) { wid = dict_wordid(dict, wrdptr[i]); if (wid == BAD_S3WID) { E_ERROR("The word '%s' is missing in the dictionary\n", wrdptr[i]); success = FALSE; break; } } ckd_free(wrdptr); ckd_free(tmp_keyphrase); } return success; } /* Activate senones for scoring */ static void kws_search_sen_active(kws_search_t * kwss) { int i, keyword_iter; acmod_clear_active(ps_search_acmod(kwss)); /* active phone loop hmms */ for (i = 0; i < kwss->n_pl; i++) acmod_activate_hmm(ps_search_acmod(kwss), &kwss->pl_hmms[i]); /* activate hmms in active nodes */ for (keyword_iter = 0; keyword_iter < kwss->n_keyphrases; keyword_iter++) { kws_keyword_t *keyword = &kwss->keyphrases[keyword_iter]; for (i = 0; i < keyword->n_hmms; i++) { if (hmm_is_active(kws_nth_hmm(keyword, i))) acmod_activate_hmm(ps_search_acmod(kwss), kws_nth_hmm(keyword, i)); } } } /* * Evaluate all the active HMMs. * (Executed once per frame.) */ static void kws_search_hmm_eval(kws_search_t * kwss, int16 const *senscr) { int32 i, keyword_iter; int32 bestscore = WORST_SCORE; hmm_context_set_senscore(kwss->hmmctx, senscr); /* evaluate hmms from phone loop */ for (i = 0; i < kwss->n_pl; ++i) { hmm_t *hmm = &kwss->pl_hmms[i]; int32 score; score = hmm_vit_eval(hmm); if (score BETTER_THAN bestscore) bestscore = score; } /* evaluate hmms for active nodes */ for (keyword_iter = 0; keyword_iter < kwss->n_keyphrases; keyword_iter++) { kws_keyword_t *keyword = &kwss->keyphrases[keyword_iter]; for (i = 0; i < keyword->n_hmms; i++) { hmm_t *hmm = kws_nth_hmm(keyword, i); if (hmm_is_active(hmm)) { int32 score; score = hmm_vit_eval(hmm); if (score BETTER_THAN bestscore) bestscore = score; } } } kwss->bestscore = bestscore; } /* * (Beam) prune the just evaluated HMMs, determine which ones remain * active. Executed once per frame. */ static void kws_search_hmm_prune(kws_search_t * kwss) { int32 thresh, i, keyword_iter; thresh = kwss->bestscore + kwss->beam; for (keyword_iter = 0; keyword_iter < kwss->n_keyphrases; keyword_iter++) { kws_keyword_t *keyword = &kwss->keyphrases[keyword_iter]; for (i = 0; i < keyword->n_hmms; i++) { hmm_t *hmm = kws_nth_hmm(keyword, i); if (hmm_is_active(hmm) && hmm_bestscore(hmm) < thresh) hmm_clear(hmm); } } } /** * Do phone transitions */ static void kws_search_trans(kws_search_t * kwss) { hmm_t *pl_best_hmm = NULL; int32 best_out_score = WORST_SCORE; int i, keyword_iter; /* select best hmm in phone-loop to be a predecessor */ for (i = 0; i < kwss->n_pl; i++) if (hmm_out_score(&kwss->pl_hmms[i]) BETTER_THAN best_out_score) { best_out_score = hmm_out_score(&kwss->pl_hmms[i]); pl_best_hmm = &kwss->pl_hmms[i]; } /* out probs are not ready yet */ if (!pl_best_hmm) return; /* Check whether keyword wasn't spotted yet */ for (keyword_iter = 0; keyword_iter < kwss->n_keyphrases; keyword_iter++) { kws_keyword_t *keyword; hmm_t *last_hmm; keyword = &kwss->keyphrases[keyword_iter]; last_hmm = kws_nth_hmm(keyword, keyword->n_hmms - 1); if (hmm_is_active(last_hmm) && hmm_out_score(pl_best_hmm) BETTER_THAN WORST_SCORE) { if (hmm_out_score(last_hmm) - hmm_out_score(pl_best_hmm) >= keyword->threshold) { int32 prob = hmm_out_score(last_hmm) - hmm_out_score(pl_best_hmm); kws_detections_add(kwss->detections, keyword->word, hmm_out_history(last_hmm), kwss->frame, prob, hmm_out_score(last_hmm)); } /* keyword is spotted */ } /* last hmm of keyword is active */ } /* keywords loop */ /* Make transition for all phone loop hmms */ for (i = 0; i < kwss->n_pl; i++) { if (hmm_out_score(pl_best_hmm) + kwss->plp BETTER_THAN hmm_in_score(&kwss->pl_hmms[i])) { hmm_enter(&kwss->pl_hmms[i], hmm_out_score(pl_best_hmm) + kwss->plp, hmm_out_history(pl_best_hmm), kwss->frame + 1); } } /* Activate new keyword nodes, enter their hmms */ for (keyword_iter = 0; keyword_iter < kwss->n_keyphrases; keyword_iter++) { kws_keyword_t *keyword = &kwss->keyphrases[keyword_iter]; for (i = keyword->n_hmms - 1; i > 0; i--) { hmm_t *pred_hmm = kws_nth_hmm(keyword, i - 1); hmm_t *hmm = kws_nth_hmm(keyword, i); if (hmm_is_active(pred_hmm)) { if (!hmm_is_active(hmm) || hmm_out_score(pred_hmm) BETTER_THAN hmm_in_score(hmm)) hmm_enter(hmm, hmm_out_score(pred_hmm), hmm_out_history(pred_hmm), kwss->frame + 1); } } /* Enter keyword start node from phone loop */ if (hmm_out_score(pl_best_hmm) BETTER_THAN hmm_in_score(kws_nth_hmm(keyword, 0))) hmm_enter(kws_nth_hmm(keyword, 0), hmm_out_score(pl_best_hmm), kwss->frame, kwss->frame + 1); } /* keywords loop */ } static int kws_search_read_list(kws_search_t *kwss, const char* keyfile) { FILE *list_file; lineiter_t *li; char *line; int i; if ((list_file = fopen(keyfile, "r")) == NULL) { E_ERROR_SYSTEM("Failed to open keyword file '%s'", keyfile); return -1; } /* count keyphrases */ kwss->n_keyphrases = 0; for (li = lineiter_start(list_file); li; li = lineiter_next(li)) if (li->len > 0) kwss->n_keyphrases++; kwss->keyphrases = (kws_keyword_t *)ckd_calloc(kwss->n_keyphrases, sizeof(*kwss->keyphrases)); fseek(list_file, 0L, SEEK_SET); /* read keyphrases */ for (li = lineiter_start(list_file), i=0; li; li = lineiter_next(li), i++) { size_t begin, end; kwss->keyphrases[i].threshold = kwss->def_threshold; line = string_trim(li->buf, STRING_BOTH); end = strlen(line) - 1; begin = end - 1; if (line[end] == '/') { while (line[begin] != '/' && begin > 0) begin--; line[end] = 0; line[begin] = 0; kwss->keyphrases[i].threshold = (int32) logmath_log(kwss->base.acmod->lmath, atof_c(line + begin + 1)) >> SENSCR_SHIFT; } kwss->keyphrases[i].word = ckd_salloc(line); } fclose(list_file); return 0; } ps_search_t * kws_search_init(const char *name, const char *keyphrase, const char *keyfile, cmd_ln_t * config, acmod_t * acmod, dict_t * dict, dict2pid_t * d2p) { kws_search_t *kwss = (kws_search_t *) ckd_calloc(1, sizeof(*kwss)); ps_search_init(ps_search_base(kwss), &kws_funcs, PS_SEARCH_TYPE_KWS, name, config, acmod, dict, d2p); kwss->detections = (kws_detections_t *)ckd_calloc(1, sizeof(*kwss->detections)); kwss->beam = (int32) logmath_log(acmod->lmath, cmd_ln_float64_r(config, "-beam")) >> SENSCR_SHIFT; kwss->plp = (int32) logmath_log(acmod->lmath, cmd_ln_float32_r(config, "-kws_plp")) >> SENSCR_SHIFT; kwss->def_threshold = (int32) logmath_log(acmod->lmath, cmd_ln_float64_r(config, "-kws_threshold")) >> SENSCR_SHIFT; kwss->delay = (int32) cmd_ln_int32_r(config, "-kws_delay"); E_INFO("KWS(beam: %d, plp: %d, default threshold %d, delay %d)\n", kwss->beam, kwss->plp, kwss->def_threshold, kwss->delay); if (keyfile) { if (kws_search_read_list(kwss, keyfile) < 0) { E_ERROR("Failed to create kws search\n"); kws_search_free(ps_search_base(kwss)); return NULL; } } else { kwss->n_keyphrases = 1; kwss->keyphrases = (kws_keyword_t *)ckd_calloc(kwss->n_keyphrases, sizeof(*kwss->keyphrases)); kwss->keyphrases[0].threshold = kwss->def_threshold; kwss->keyphrases[0].word = ckd_salloc(keyphrase); } /* Check if all words are in dictionary */ if (!kws_search_check_dict(kwss)) { kws_search_free(ps_search_base(kwss)); return NULL; } /* Reinit for provided keyword */ if (kws_search_reinit(ps_search_base(kwss), ps_search_dict(kwss), ps_search_dict2pid(kwss)) < 0) { ps_search_free(ps_search_base(kwss)); return NULL; } return ps_search_base(kwss); } void kws_search_free(ps_search_t * search) { int i; kws_search_t *kwss; kwss = (kws_search_t *) search; ps_search_base_free(search); hmm_context_free(kwss->hmmctx); kws_detections_reset(kwss->detections); ckd_free(kwss->detections); ckd_free(kwss->pl_hmms); for (i = 0; i < kwss->n_keyphrases; i++) { ckd_free(kwss->keyphrases[i].hmms); ckd_free(kwss->keyphrases[i].word); } ckd_free(kwss->keyphrases); ckd_free(kwss); } int kws_search_reinit(ps_search_t * search, dict_t * dict, dict2pid_t * d2p) { char **wrdptr; char *tmp_keyphrase; int32 wid, pronlen; int32 n_hmms, n_wrds; int32 ssid, tmatid; int i, j, p, keyword_iter; kws_search_t *kwss = (kws_search_t *) search; bin_mdef_t *mdef = search->acmod->mdef; int32 silcipid = bin_mdef_silphone(mdef); /* Free old dict2pid, dict */ ps_search_base_reinit(search, dict, d2p); /* Initialize HMM context. */ if (kwss->hmmctx) hmm_context_free(kwss->hmmctx); kwss->hmmctx = hmm_context_init(bin_mdef_n_emit_state(search->acmod->mdef), search->acmod->tmat->tp, NULL, search->acmod->mdef->sseq); if (kwss->hmmctx == NULL) return -1; /* Initialize phone loop HMMs. */ if (kwss->pl_hmms) { for (i = 0; i < kwss->n_pl; ++i) hmm_deinit((hmm_t *) & kwss->pl_hmms[i]); ckd_free(kwss->pl_hmms); } kwss->n_pl = bin_mdef_n_ciphone(search->acmod->mdef); kwss->pl_hmms = (hmm_t *) ckd_calloc(kwss->n_pl, sizeof(*kwss->pl_hmms)); for (i = 0; i < kwss->n_pl; ++i) { hmm_init(kwss->hmmctx, (hmm_t *) & kwss->pl_hmms[i], FALSE, bin_mdef_pid2ssid(search->acmod->mdef, i), bin_mdef_pid2tmatid(search->acmod->mdef, i)); } for (keyword_iter = 0; keyword_iter < kwss->n_keyphrases; keyword_iter++) { kws_keyword_t *keyword = &kwss->keyphrases[keyword_iter]; /* Initialize keyphrase HMMs */ tmp_keyphrase = (char *) ckd_salloc(keyword->word); n_wrds = str2words(tmp_keyphrase, NULL, 0); wrdptr = (char **) ckd_calloc(n_wrds, sizeof(*wrdptr)); str2words(tmp_keyphrase, wrdptr, n_wrds); /* count amount of hmms */ n_hmms = 0; for (i = 0; i < n_wrds; i++) { wid = dict_wordid(dict, wrdptr[i]); pronlen = dict_pronlen(dict, wid); n_hmms += pronlen; } /* allocate node array */ if (keyword->hmms) ckd_free(keyword->hmms); keyword->hmms = (hmm_t *) ckd_calloc(n_hmms, sizeof(hmm_t)); keyword->n_hmms = n_hmms; /* fill node array */ j = 0; for (i = 0; i < n_wrds; i++) { wid = dict_wordid(dict, wrdptr[i]); pronlen = dict_pronlen(dict, wid); for (p = 0; p < pronlen; p++) { int32 ci = dict_pron(dict, wid, p); if (p == 0) { /* first phone of word */ int32 rc = pronlen > 1 ? dict_pron(dict, wid, 1) : silcipid; ssid = dict2pid_ldiph_lc(d2p, ci, rc, silcipid); } else if (p == pronlen - 1) { /* last phone of the word */ int32 lc = dict_pron(dict, wid, p - 1); xwdssid_t *rssid = dict2pid_rssid(d2p, ci, lc); int j = rssid->cimap[silcipid]; ssid = rssid->ssid[j]; } else { /* word internal phone */ ssid = dict2pid_internal(d2p, wid, p); } tmatid = bin_mdef_pid2tmatid(mdef, ci); hmm_init(kwss->hmmctx, &keyword->hmms[j], FALSE, ssid, tmatid); j++; } } ckd_free(wrdptr); ckd_free(tmp_keyphrase); } return 0; } int kws_search_start(ps_search_t * search) { int i; kws_search_t *kwss = (kws_search_t *) search; kwss->frame = 0; kwss->bestscore = 0; kws_detections_reset(kwss->detections); /* Reset and enter all phone-loop HMMs. */ for (i = 0; i < kwss->n_pl; ++i) { hmm_t *hmm = (hmm_t *) & kwss->pl_hmms[i]; hmm_clear(hmm); hmm_enter(hmm, 0, -1, 0); } return 0; } int kws_search_step(ps_search_t * search, int frame_idx) { int16 const *senscr; kws_search_t *kwss = (kws_search_t *) search; acmod_t *acmod = search->acmod; /* Activate senones */ if (!acmod->compallsen) kws_search_sen_active(kwss); /* Calculate senone scores for current frame. */ senscr = acmod_score(acmod, &frame_idx); /* Evaluate hmms in phone loop and in active keyword nodes */ kws_search_hmm_eval(kwss, senscr); /* Prune hmms with low prob */ kws_search_hmm_prune(kwss); /* Do hmms transitions */ kws_search_trans(kwss); ++kwss->frame; return 0; } int kws_search_finish(ps_search_t * search) { /* Nothing here */ return 0; } char const * kws_search_hyp(ps_search_t * search, int32 * out_score, int32 * out_is_final) { kws_search_t *kwss = (kws_search_t *) search; if (out_score) *out_score = 0; if (search->hyp_str) ckd_free(search->hyp_str); search->hyp_str = kws_detections_hyp_str(kwss->detections, kwss->frame, kwss->delay); return search->hyp_str; } char * kws_search_get_keywords(ps_search_t * search) { int i, c, len; kws_search_t *kwss; char* line; kwss = (kws_search_t *) search; len = 0; for (i = 0; i < kwss->n_keyphrases; i++) len += strlen(kwss->keyphrases[i].word); len += kwss->n_keyphrases; c = 0; line = (char *)ckd_calloc(len, sizeof(*line)); for (i = 0; i < kwss->n_keyphrases; i++) { char *keyword_str = kwss->keyphrases[i].word; memcpy(&line[c], keyword_str, strlen(keyword_str)); c += strlen(keyword_str); line[c++] = '\n'; } line[--c] = '\0'; return line; } pocketsphinx-5prealpha/src/libpocketsphinx/ms_mgau.h0000664000175000017500000001271112504317100020170 00000000000000/* -*- 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. * * ==================================================================== * */ /* * ms_mgau.h -- Essentially a wrapper that wrap up gauden and * senone. It supports multi-stream. * * * ********************************************** * CMU ARPA Speech Project * * Copyright (c) 1997 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.3 2006/02/22 16:57:15 arthchan2003 * Fixed minor dox-doc issue * * Revision 1.2 2006/02/22 16:56:01 arthchan2003 * Merged from SPHINX3_5_2_RCI_IRII_BRANCH: Added ms_mgau.[ch] into the trunk. It is a wrapper of ms_gauden and ms_senone * * Revision 1.1.2.4 2005/09/25 18:55:19 arthchan2003 * Added a flag to turn on and off precomputation. * * Revision 1.1.2.3 2005/08/03 18:53:44 dhdfu * Add memory deallocation functions. Also move all the initialization * of ms_mgau_model_t into ms_mgau_init (duh!), which entails removing it * from decode_anytopo and friends. * * Revision 1.1.2.2 2005/08/02 21:05:38 arthchan2003 * 1, Added dist and mgau_active as intermediate variable for computation. 2, Added ms_cont_mgau_frame_eval, which is a multi stream version of GMM computation mainly s3.0 family of tools. 3, Fixed dox-doc. * * Revision 1.1.2.1 2005/07/20 19:37:09 arthchan2003 * Added a multi-stream cont_mgau (ms_mgau) which is a wrapper of both gauden and senone. Add ms_mgau_init and model_set_mllr. This allow eliminating 600 lines of code in decode_anytopo/align/allphone. * * * */ /** \file ms_mgau.h * * \brief (Sphinx 3.0 specific) A module that wraps up the code of * gauden and senone because they are closely related. * * At the time at Sphinx 3.1 to 3.2, Ravi has decided to rewrite only * single-stream part of the code into cont_mgau.[ch]. This marks the * beginning of historical problem of having two sets of Gaussian * distribution computation routine, one for single-stream and one of * multi-stream. * * In Sphinx 3.5, when we figure out that it is possible to allow both * 3.0 family of tools and 3.x family of tools to coexist. This * becomes one problem we found that very hard to reconcile. That is * why we currently allow two versions of the code in the code * base. This is likely to change in the future. */ #ifndef _LIBFBS_MS_CONT_MGAU_H_ #define _LIBFBS_MS_CONT_MGAU_H_ /* SphinxBase headers. */ #include #include #include /* Local headers. */ #include "acmod.h" #include "bin_mdef.h" #include "ms_gauden.h" #include "ms_senone.h" /** \struct ms_mgau_t \brief Multi-stream mixture gaussian. It is not necessary to be continr */ typedef struct { ps_mgau_t base; gauden_t* g; /**< The codebook */ senone_t* s; /**< The senone */ int topn; /**< Top-n gaussian will be computed */ /**< Intermediate used in computation */ gauden_dist_t ***dist; uint8 *mgau_active; cmd_ln_t *config; } ms_mgau_model_t; #define ms_mgau_gauden(msg) (msg->g) #define ms_mgau_senone(msg) (msg->s) #define ms_mgau_topn(msg) (msg->topn) ps_mgau_t* ms_mgau_init(acmod_t *acmod, logmath_t *lmath, bin_mdef_t *mdef); void ms_mgau_free(ps_mgau_t *g); int32 ms_cont_mgau_frame_eval(ps_mgau_t * msg, int16 *senscr, uint8 *senone_active, int32 n_senone_active, mfcc_t ** feat, int32 frame, int32 compallsen); int32 ms_mgau_mllr_transform(ps_mgau_t *s, ps_mllr_t *mllr); #endif /* _LIBFBS_MS_CONT_MGAU_H_*/ pocketsphinx-5prealpha/src/libpocketsphinx/ps_alignment.h0000664000175000017500000001212712504317656021241 00000000000000/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* ==================================================================== * Copyright (c) 2010 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 ps_alignment.h Multi-level alignment structure */ #ifndef __PS_ALIGNMENT_H__ #define __PS_ALIGNMENT_H__ /* System headers. */ /* SphinxBase headers. */ #include /* Local headers. */ #include "dict2pid.h" #include "hmm.h" #define PS_ALIGNMENT_NONE ((uint16)0xffff) struct ps_alignment_entry_s { union { int32 wid; struct { uint16 ssid; uint16 cipid; uint16 tmatid; } pid; uint16 senid; } id; int16 start; int16 duration; int32 score; uint16 parent; uint16 child; }; typedef struct ps_alignment_entry_s ps_alignment_entry_t; struct ps_alignment_vector_s { ps_alignment_entry_t *seq; uint16 n_ent, n_alloc; }; typedef struct ps_alignment_vector_s ps_alignment_vector_t; struct ps_alignment_s { dict2pid_t *d2p; ps_alignment_vector_t word; ps_alignment_vector_t sseq; ps_alignment_vector_t state; }; typedef struct ps_alignment_s ps_alignment_t; struct ps_alignment_iter_s { ps_alignment_t *al; ps_alignment_vector_t *vec; int pos; }; typedef struct ps_alignment_iter_s ps_alignment_iter_t; /** * Create a new, empty alignment. */ ps_alignment_t *ps_alignment_init(dict2pid_t *d2p); /** * Release an alignment */ int ps_alignment_free(ps_alignment_t *al); /** * Append a word. */ int ps_alignment_add_word(ps_alignment_t *al, int32 wid, int duration); /** * Populate lower layers using available word information. */ int ps_alignment_populate(ps_alignment_t *al); /** * Populate lower layers using context-independent phones. */ int ps_alignment_populate_ci(ps_alignment_t *al); /** * Propagate timing information up from state sequence. */ int ps_alignment_propagate(ps_alignment_t *al); /** * Number of words. */ int ps_alignment_n_words(ps_alignment_t *al); /** * Number of phones. */ int ps_alignment_n_phones(ps_alignment_t *al); /** * Number of states. */ int ps_alignment_n_states(ps_alignment_t *al); /** * Iterate over the alignment starting at the first word. */ ps_alignment_iter_t *ps_alignment_words(ps_alignment_t *al); /** * Iterate over the alignment starting at the first phone. */ ps_alignment_iter_t *ps_alignment_phones(ps_alignment_t *al); /** * Iterate over the alignment starting at the first state. */ ps_alignment_iter_t *ps_alignment_states(ps_alignment_t *al); /** * Get the alignment entry pointed to by an iterator. */ ps_alignment_entry_t *ps_alignment_iter_get(ps_alignment_iter_t *itor); /** * Move alignment iterator to given index. */ ps_alignment_iter_t *ps_alignment_iter_goto(ps_alignment_iter_t *itor, int pos); /** * Move an alignment iterator forward. */ ps_alignment_iter_t *ps_alignment_iter_next(ps_alignment_iter_t *itor); /** * Move an alignment iterator back. */ ps_alignment_iter_t *ps_alignment_iter_prev(ps_alignment_iter_t *itor); /** * Get a new iterator starting at the parent of the current node. */ ps_alignment_iter_t *ps_alignment_iter_up(ps_alignment_iter_t *itor); /** * Get a new iterator starting at the first child of the current node. */ ps_alignment_iter_t *ps_alignment_iter_down(ps_alignment_iter_t *itor); /** * Release an iterator before completing all iterations. */ int ps_alignment_iter_free(ps_alignment_iter_t *itor); #endif /* __PS_ALIGNMENT_H__ */ pocketsphinx-5prealpha/src/libpocketsphinx/Makefile.am0000664000175000017500000000302512504317100020421 00000000000000ARCH = `uname -m | sed s/i.86/i386/`_`uname -s | tr A-Z a-z` lib_LTLIBRARIES = libpocketsphinx.la libpocketsphinx_la_LDFLAGS = -version-info 3:0:0 -lm libpocketsphinx_la_SOURCES = \ acmod.c \ bin_mdef.c \ blkarray_list.c \ dict.c \ dict2pid.c \ fsg_history.c \ fsg_lextree.c \ fsg_search.c \ allphone_search.c \ kws_search.c \ kws_detections.c \ hmm.c \ mdef.c \ ms_gauden.c \ ms_mgau.c \ ms_senone.c \ ngram_search.c \ ngram_search_fwdtree.c \ ngram_search_fwdflat.c \ phone_loop_search.c \ ps_alignment.c \ ps_lattice.c \ ps_mllr.c \ ptm_mgau.c \ s2_semi_mgau.c \ state_align_search.c \ tmat.c \ vector.c \ pocketsphinx.c noinst_HEADERS = \ pocketsphinx_internal.h \ acmod.h \ ngram_search.h \ bin_mdef.h \ blkarray_list.h \ dict.h \ dict2pid.h \ fsg_history.h \ fsg_lextree.h \ fsg_search_internal.h \ allphone_search.h \ kws_search.h \ kws_detections.h \ hmm.h \ mdef.h \ ms_gauden.h \ ms_mgau.h \ ms_senone.h \ ngram_search.h \ ngram_search_fwdtree.h \ ngram_search_fwdflat.h \ phone_loop_search.h \ ps_alignment.h \ ps_lattice_internal.h \ ptm_mgau.h \ s2_semi_mgau.h \ s3types.h \ state_align_search.h \ tied_mgau_common.h \ tmat.h \ vector.h AM_CFLAGS =\ -I$(top_srcdir)/include \ -I$(top_builddir)/include \ -DMODELDIR=\"${prefix}/share/pocketsphinx/model\" pocketsphinx-5prealpha/src/libpocketsphinx/ngram_search.h0000664000175000017500000003652112520771215021207 00000000000000/* -*- 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_search.h N-Gram based multi-pass search ("FBS") */ #ifndef __NGRAM_SEARCH_H__ #define __NGRAM_SEARCH_H__ /* SphinxBase headers. */ #include #include #include #include #include /* Local headers. */ #include "pocketsphinx_internal.h" #include "hmm.h" /** * Lexical tree node data type. * * Not the first HMM for words, which multiplex HMMs based on * different left contexts. This structure is used both in the * dynamic HMM tree structure and in the per-word last-phone right * context fanout. */ typedef struct chan_s { hmm_t hmm; /**< Basic HMM structure. This *must* be first in the structure because chan_t and root_chan_t are sometimes used interchangeably */ struct chan_s *next; /**< first descendant of this channel; or, in the case of the last phone of a word, the next alternative right context channel */ struct chan_s *alt; /**< sibling; i.e., next descendant of parent HMM */ int32 ciphone; /**< ciphone for this node */ union { int32 penult_phn_wid; /**< list of words whose last phone follows this one; this field indicates the first of the list; the rest must be built up in a separate array. Used only within HMM tree. -1 if none */ int32 rc_id; /**< right-context id for last phone of words */ } info; } chan_t; /** * Lexical tree node data type for the first phone (root) of each dynamic HMM tree * structure. * * Each state may have a different parent static HMM. Most fields are * similar to those in chan_t. */ typedef struct root_chan_s { hmm_t hmm; /**< Basic HMM structure. This *must* be first in the structure because chan_t and root_chan_t are sometimes used interchangeably. */ chan_t *next; /**< first descendant of this channel */ int32 penult_phn_wid; int32 this_phn_wid; /**< list of words consisting of this single phone; actually the first of the list, like penult_phn_wid; -1 if none */ int16 ciphone; /**< first ciphone of this node; all words rooted at this node begin with this ciphone */ int16 ci2phone; /**< second ciphone of this node; one root HMM for each unique right context */ } root_chan_t; /** * Back pointer table (forward pass lattice; actually a tree) */ typedef struct bptbl_s { frame_idx_t frame; /**< start or end frame */ uint8 valid; /**< For absolute pruning */ uint8 refcnt; /**< Reference count (number of successors) */ int32 wid; /**< Word index */ int32 bp; /**< Back Pointer */ int32 score; /**< Score (best among all right contexts) */ int32 s_idx; /**< Start of BScoreStack for various right contexts*/ int32 real_wid; /**< wid of this or latest predecessor real word */ int32 prev_real_wid; /**< wid of second-last real word */ int16 last_phone; /**< last phone of this word */ int16 last2_phone; /**< next-to-last phone of this word */ } bptbl_t; /** * Segmentation "iterator" for backpointer table results. */ typedef struct bptbl_seg_s { ps_seg_t base; /**< Base structure. */ int32 *bpidx; /**< Sequence of backpointer IDs. */ int16 n_bpidx; /**< Number of backpointer IDs. */ int16 cur; /**< Current position in bpidx. */ } bptbl_seg_t; /* * Candidates words for entering their last phones. Cleared and rebuilt in each * frame. * NOTE: candidates can only be multi-phone, real dictionary words. */ typedef struct lastphn_cand_s { int32 wid; int32 score; int32 bp; int32 next; /* next candidate starting at the same frame */ } lastphn_cand_t; /* * Since the same instance of a word (i.e., ) reaches its last * phone several times, we can compute its best BP and LM transition score info * just the first time and cache it for future occurrences. Structure for such * a cache. */ typedef struct { int32 sf; /* Start frame */ int32 dscr; /* Delta-score upon entering last phone */ int32 bp; /* Best BP */ } last_ltrans_t; #define CAND_SF_ALLOCSIZE 32 typedef struct { int32 bp_ef; int32 cand; } cand_sf_t; /* * Structure for reorganizing the BP table entries in the current frame according * to distinct right context ci-phones. Each entry contains the best BP entry for * a given right context. Each successor word will pick up the correct entry based * on its first ci-phone. */ typedef struct bestbp_rc_s { int32 score; int32 path; /* BP table index corresponding to this entry */ int32 lc; /* right most ci-phone of above BP entry word */ } bestbp_rc_t; #define NO_BP -1 /** * Various statistics for profiling. */ typedef struct ngram_search_stats_s { int32 n_phone_eval; int32 n_root_chan_eval; int32 n_nonroot_chan_eval; int32 n_last_chan_eval; int32 n_word_lastchan_eval; int32 n_lastphn_cand_utt; int32 n_fwdflat_chan; int32 n_fwdflat_words; int32 n_fwdflat_word_transition; int32 n_senone_active_utt; } ngram_search_stats_t; /** * N-Gram search module structure. */ struct ngram_search_s { ps_search_t base; ngram_model_t *lmset; /**< Set of language models. */ hmm_context_t *hmmctx; /**< HMM context. */ /* Flags to quickly indicate which passes are enabled. */ uint8 fwdtree; uint8 fwdflat; uint8 bestpath; /* State of procesing. */ uint8 done; /* Allocators */ listelem_alloc_t *chan_alloc; /**< For chan_t */ listelem_alloc_t *root_chan_alloc; /**< For root_chan_t */ listelem_alloc_t *latnode_alloc; /**< For latnode_t */ /** * Search structure of HMM instances. * * The word triphone sequences (HMM instances) are transformed * into tree structures, one tree per unique left triphone in the * entire dictionary (actually diphone, since its left context * varies dyamically during the search process). The entire set * of trees of channels is allocated once and for all during * initialization (since dynamic management of active CHANs is * time consuming), with one exception: the last phones of words, * that need multiple right context modelling, are not maintained * in this static structure since there are too many of them and * few are active at any time. Instead they are maintained as * linked lists of CHANs, one list per word, and each CHAN in this * set is allocated only on demand and freed if inactive. */ root_chan_t *root_chan; /**< Roots of search tree. */ int32 n_root_chan_alloc; /**< Number of root_chan allocated */ int32 n_root_chan; /**< Number of valid root_chan */ int32 n_nonroot_chan; /**< Number of valid non-root channels */ int32 max_nonroot_chan; /**< Maximum possible number of non-root channels */ root_chan_t *rhmm_1ph; /**< Root HMMs for single-phone words */ /** * Channels associated with a given word (only used for right * contexts, single-phone words in fwdtree search, and word HMMs * in fwdflat search). WARNING: For single-phone words and * fwdflat search, this actually contains pointers to root_chan_t, * which are allocated using root_chan_alloc. This is a * suboptimal state of affairs. */ chan_t **word_chan; bitvec_t *word_active; /**< array of active flags for all words. */ /** * Each node in the HMM tree structure may point to a set of words * whose last phone would follow that node in the tree structure * (but is not included in the tree structure for reasons * explained above). The channel node points to one word in this * set of words. The remaining words are linked through * homophone_set[]. * * Single-phone words are not represented in the HMM tree; they * are kept in word_chan. * * Specifically, homophone_set[w] = wid of next word in the same * set as w. */ int32 *homophone_set; int32 *single_phone_wid; /**< list of single-phone word ids */ int32 n_1ph_words; /**< Number single phone words in dict (total) */ int32 n_1ph_LMwords; /**< Number single phone dict words also in LM; these come first in single_phone_wid */ /** * Array of active channels for current and next frame. * * In any frame, only some HMM tree nodes are active. * active_chan_list[f mod 2] = list of nonroot channels in the HMM * tree active in frame f. */ chan_t ***active_chan_list; int32 n_active_chan[2]; /**< Number entries in active_chan_list */ /** * Array of active multi-phone words for current and next frame. * * Similarly to active_chan_list, active_word_list[f mod 2] = list * of word ids for which active channels exist in word_chan in * frame f. * * Statically allocated single-phone words are always active and * should not appear in this list. */ int32 **active_word_list; int32 n_active_word[2]; /**< Number entries in active_word_list */ /* * FIXME: Document all of these bits. */ lastphn_cand_t *lastphn_cand; int32 n_lastphn_cand; last_ltrans_t *last_ltrans; /* one per word */ int32 cand_sf_alloc; cand_sf_t *cand_sf; bestbp_rc_t *bestbp_rc; bptbl_t *bp_table; /* Forward pass lattice */ int32 bpidx; /* First free BPTable entry */ int32 bp_table_size; int32 *bscore_stack; /* Score stack for all possible right contexts */ int32 bss_head; /* First free BScoreStack entry */ int32 bscore_stack_size; int32 n_frame_alloc; /**< Number of frames allocated in bp_table_idx and friends. */ int32 n_frame; /**< Number of frames actually present. */ int32 *bp_table_idx; /* First BPTable entry for each frame */ int32 *word_lat_idx; /* BPTable index for any word in current frame; cleared before each frame */ /* * Flat lexicon (2nd pass) search stuff. */ ps_latnode_t **frm_wordlist; /**< List of active words in each frame. */ int32 *fwdflat_wordlist; /**< List of active word IDs for utterance. */ bitvec_t *expand_word_flag; int32 *expand_word_list; int32 n_expand_words; int32 min_ef_width; int32 max_sf_win; float32 fwdflat_fwdtree_lw_ratio; int32 best_score; /**< Best Viterbi path score. */ int32 last_phone_best_score; /**< Best Viterbi path score for last phone. */ int32 renormalized; /* * DAG (3rd pass) search stuff. */ float32 bestpath_fwdtree_lw_ratio; float32 ascale; /**< Acoustic score scale for posterior probabilities. */ ngram_search_stats_t st; /**< Various statistics for profiling. */ ptmr_t fwdtree_perf; ptmr_t fwdflat_perf; ptmr_t bestpath_perf; int32 n_tot_frame; /* A collection of beam widths. */ int32 beam; int32 dynamic_beam; int32 pbeam; int32 wbeam; int32 lpbeam; int32 lponlybeam; int32 fwdflatbeam; int32 fwdflatwbeam; int32 fillpen; int32 silpen; int32 wip; int32 nwpen; int32 pip; int32 maxwpf; int32 maxhmmpf; }; typedef struct ngram_search_s ngram_search_t; /** * Initialize the N-Gram search module. */ ps_search_t *ngram_search_init(const char *name, ngram_model_t *lm, cmd_ln_t *config, acmod_t *acmod, dict_t *dict, dict2pid_t *d2p); /** * Finalize the N-Gram search module. */ void ngram_search_free(ps_search_t *ngs); /** * Record the current frame's index in the backpointer table. * * @return the current backpointer index. */ int ngram_search_mark_bptable(ngram_search_t *ngs, int frame_idx); /** * Enter a word in the backpointer table. */ void ngram_search_save_bp(ngram_search_t *ngs, int frame_idx, int32 w, int32 score, int32 path, int32 rc); /** * Allocate last phone channels for all possible right contexts for word w. */ void ngram_search_alloc_all_rc(ngram_search_t *ngs, int32 w); /** * Allocate last phone channels for all possible right contexts for word w. */ void ngram_search_free_all_rc(ngram_search_t *ngs, int32 w); /** * Find the best word exit for the current frame in the backpointer table. * * @return the backpointer index of the best word exit. */ int ngram_search_find_exit(ngram_search_t *ngs, int frame_idx, int32 *out_best_score, int32 *out_is_final); /** * Backtrace from a given backpointer index to obtain a word hypothesis. * * @return a read-only string with the best hypothesis. */ char const *ngram_search_bp_hyp(ngram_search_t *ngs, int bpidx); /** * Compute language and acoustic scores for backpointer table entries. */ void ngram_compute_seg_scores(ngram_search_t *ngs, float32 lwf); /** * Construct a word lattice from the current hypothesis. */ ps_lattice_t *ngram_search_lattice(ps_search_t *search); /** * Get the exit score for a backpointer entry with a given right context. */ int32 ngram_search_exit_score(ngram_search_t *ngs, bptbl_t *pbe, int rcphone); /** * Sets the global language model. * * Sets the language model to use if nothing was passed in configuration */ void ngram_search_set_lm(ngram_model_t *lm); #endif /* __NGRAM_SEARCH_H__ */ pocketsphinx-5prealpha/src/libpocketsphinx/dict2pid.h0000664000175000017500000001347212504317100020247 00000000000000/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* ==================================================================== * Copyright (c) 1999-2014 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 _S3_DICT2PID_H_ #define _S3_DICT2PID_H_ /* System headers. */ #include /* SphinxBase headers. */ #include #include /* Local headers. */ #include "s3types.h" #include "bin_mdef.h" #include "dict.h" /** \file dict2pid.h * \brief Building triphones for a dictionary. * * This is one of the more complicated parts of a cross-word * triphone model decoder. The first and last phones of each word * get their left and right contexts, respectively, from other * words. For single-phone words, both its contexts are from other * words, simultaneously. As these words are not known beforehand, * life gets complicated. */ #ifdef __cplusplus extern "C" { #endif /** * \struct xwdssid_t * \brief cross word triphone model structure */ typedef struct { s3ssid_t *ssid; /**< Senone Sequence ID list for all context ciphones */ s3cipid_t *cimap; /**< Index into ssid[] above for each ci phone */ int32 n_ssid; /**< #Unique ssid in above, compressed ssid list */ } xwdssid_t; /** \struct dict2pid_t \brief Building composite triphone (as well as word internal triphones) with the dictionary. */ typedef struct { int refcount; bin_mdef_t *mdef; /**< Model definition, used to generate internal ssids on the fly. */ dict_t *dict; /**< Dictionary this table refers to. */ /*Notice the order of the arguments */ /* FIXME: This is crying out for compression - in Mandarin we have * 180 context independent phones, which makes this an 11MB * array. */ s3ssid_t ***ldiph_lc; /**< For multi-phone words, [base][rc][lc] -> ssid; filled out for word-initial base x rc combinations in current vocabulary */ xwdssid_t **rssid; /**< Right context state sequence id table First dimension: base phone, Second dimension: left context. */ s3ssid_t ***lrdiph_rc; /**< For single-phone words, [base][lc][rc] -> ssid; filled out for single-phone base x lc combinations in current vocabulary */ xwdssid_t **lrssid; /**< Left-Right context state sequence id table First dimension: base phone, Second dimension: left context. */ } dict2pid_t; /** Access macros; not designed for arbitrary use */ #define dict2pid_rssid(d,ci,lc) (&(d)->rssid[ci][lc]) #define dict2pid_ldiph_lc(d,b,r,l) ((d)->ldiph_lc[b][r][l]) #define dict2pid_lrdiph_rc(d,b,l,r) ((d)->lrdiph_rc[b][l][r]) /** * Build the dict2pid structure for the given model/dictionary */ dict2pid_t *dict2pid_build(bin_mdef_t *mdef, /**< A model definition*/ dict_t *dict /**< An initialized dictionary */ ); /** * Retain a pointer to dict2pid */ dict2pid_t *dict2pid_retain(dict2pid_t *d2p); /** * Free the memory dict2pid structure */ int dict2pid_free(dict2pid_t *d2p /**< In: the d2p */ ); /** * Return the senone sequence ID for the given word position. */ s3ssid_t dict2pid_internal(dict2pid_t *d2p, int32 wid, int pos); /** * Add a word to the dict2pid structure (after adding it to dict). */ int dict2pid_add_word(dict2pid_t *d2p, int32 wid); /** * For debugging */ void dict2pid_dump(FILE *fp, /**< In: a file pointer */ dict2pid_t *d2p /**< In: a dict2pid_t structure */ ); /** Report a dict2pid data structure */ void dict2pid_report(dict2pid_t *d2p /**< In: a dict2pid_t structure */ ); /** * Get number of rc */ int32 get_rc_nssid(dict2pid_t *d2p, /**< In: a dict2pid */ s3wid_t w /**< In: a wid */ ); /** * Get RC map */ s3cipid_t* dict2pid_get_rcmap(dict2pid_t *d2p, /**< In: a dict2pid */ s3wid_t w /**< In: a wid */ ); #ifdef __cplusplus } #endif #endif pocketsphinx-5prealpha/src/libpocketsphinx/dict2pid.c0000664000175000017500000004633112504317100020242 00000000000000/* -*- 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 #include "dict2pid.h" #include "hmm.h" /** * @file dict2pid.c - dictionary word to senone sequence mappings */ void compress_table(s3ssid_t * uncomp_tab, s3ssid_t * com_tab, s3cipid_t * ci_map, int32 n_ci) { int32 found; int32 r; int32 tmp_r; for (r = 0; r < n_ci; r++) { com_tab[r] = BAD_S3SSID; ci_map[r] = BAD_S3CIPID; } /** Compress this map */ for (r = 0; r < n_ci; r++) { found = 0; for (tmp_r = 0; tmp_r < r && com_tab[tmp_r] != BAD_S3SSID; tmp_r++) { /* If it appears before, just filled in cimap; */ if (uncomp_tab[r] == com_tab[tmp_r]) { found = 1; ci_map[r] = tmp_r; break; } } if (found == 0) { com_tab[tmp_r] = uncomp_tab[r]; ci_map[r] = tmp_r; } } } static void compress_right_context_tree(dict2pid_t * d2p, s3ssid_t ***rdiph_rc) { int32 n_ci; int32 b, l, r; s3ssid_t *rmap; s3ssid_t *tmpssid; s3cipid_t *tmpcimap; bin_mdef_t *mdef = d2p->mdef; size_t alloc; n_ci = mdef->n_ciphone; tmpssid = ckd_calloc(n_ci, sizeof(s3ssid_t)); tmpcimap = ckd_calloc(n_ci, sizeof(s3cipid_t)); d2p->rssid = (xwdssid_t **) ckd_calloc(mdef->n_ciphone, sizeof(xwdssid_t *)); alloc = mdef->n_ciphone * sizeof(xwdssid_t *); for (b = 0; b < n_ci; b++) { d2p->rssid[b] = (xwdssid_t *) ckd_calloc(mdef->n_ciphone, sizeof(xwdssid_t)); alloc += mdef->n_ciphone * sizeof(xwdssid_t); for (l = 0; l < n_ci; l++) { rmap = rdiph_rc[b][l]; compress_table(rmap, tmpssid, tmpcimap, mdef->n_ciphone); for (r = 0; r < mdef->n_ciphone && tmpssid[r] != BAD_S3SSID; r++); if (tmpssid[0] != BAD_S3SSID) { d2p->rssid[b][l].ssid = ckd_calloc(r, sizeof(s3ssid_t)); memcpy(d2p->rssid[b][l].ssid, tmpssid, r * sizeof(s3ssid_t)); d2p->rssid[b][l].cimap = ckd_calloc(mdef->n_ciphone, sizeof(s3cipid_t)); memcpy(d2p->rssid[b][l].cimap, tmpcimap, (mdef->n_ciphone) * sizeof(s3cipid_t)); d2p->rssid[b][l].n_ssid = r; } else { d2p->rssid[b][l].ssid = NULL; d2p->rssid[b][l].cimap = NULL; d2p->rssid[b][l].n_ssid = 0; } } } E_INFO("Allocated %d bytes (%d KiB) for word-final triphones\n", (int)alloc, (int)alloc / 1024); ckd_free(tmpssid); ckd_free(tmpcimap); } static void compress_left_right_context_tree(dict2pid_t * d2p) { int32 n_ci; int32 b, l, r; s3ssid_t *rmap; s3ssid_t *tmpssid; s3cipid_t *tmpcimap; bin_mdef_t *mdef = d2p->mdef; size_t alloc; n_ci = mdef->n_ciphone; tmpssid = ckd_calloc(n_ci, sizeof(s3ssid_t)); tmpcimap = ckd_calloc(n_ci, sizeof(s3cipid_t)); assert(d2p->lrdiph_rc); d2p->lrssid = (xwdssid_t **) ckd_calloc(mdef->n_ciphone, sizeof(xwdssid_t *)); alloc = mdef->n_ciphone * sizeof(xwdssid_t *); for (b = 0; b < n_ci; b++) { d2p->lrssid[b] = (xwdssid_t *) ckd_calloc(mdef->n_ciphone, sizeof(xwdssid_t)); alloc += mdef->n_ciphone * sizeof(xwdssid_t); for (l = 0; l < n_ci; l++) { rmap = d2p->lrdiph_rc[b][l]; compress_table(rmap, tmpssid, tmpcimap, mdef->n_ciphone); for (r = 0; r < mdef->n_ciphone && tmpssid[r] != BAD_S3SSID; r++); if (tmpssid[0] != BAD_S3SSID) { d2p->lrssid[b][l].ssid = ckd_calloc(r, sizeof(s3ssid_t)); memcpy(d2p->lrssid[b][l].ssid, tmpssid, r * sizeof(s3ssid_t)); d2p->lrssid[b][l].cimap = ckd_calloc(mdef->n_ciphone, sizeof(s3cipid_t)); memcpy(d2p->lrssid[b][l].cimap, tmpcimap, (mdef->n_ciphone) * sizeof(s3cipid_t)); d2p->lrssid[b][l].n_ssid = r; } else { d2p->lrssid[b][l].ssid = NULL; d2p->lrssid[b][l].cimap = NULL; d2p->lrssid[b][l].n_ssid = 0; } } } /* Try to compress lrdiph_rc into lrdiph_rc_compressed */ ckd_free(tmpssid); ckd_free(tmpcimap); E_INFO("Allocated %d bytes (%d KiB) for single-phone word triphones\n", (int)alloc, (int)alloc / 1024); } /** ARCHAN, A duplicate of get_rc_npid in ctxt_table.h. I doubt whether it is correct because the compressed map has not been checked. */ int32 get_rc_nssid(dict2pid_t * d2p, s3wid_t w) { int32 pronlen; s3cipid_t b, lc; dict_t *dict = d2p->dict; pronlen = dict->word[w].pronlen; b = dict->word[w].ciphone[pronlen - 1]; if (pronlen == 1) { /* Is this true ? No known left context. But all cimaps (for any l) are identical; pick one */ /*E_INFO("Single phone word\n"); */ return (d2p->lrssid[b][0].n_ssid); } else { /* E_INFO("Multiple phone word\n"); */ lc = dict->word[w].ciphone[pronlen - 2]; return (d2p->rssid[b][lc].n_ssid); } } s3cipid_t * dict2pid_get_rcmap(dict2pid_t * d2p, s3wid_t w) { int32 pronlen; s3cipid_t b, lc; dict_t *dict = d2p->dict; pronlen = dict->word[w].pronlen; b = dict->word[w].ciphone[pronlen - 1]; if (pronlen == 1) { /* Is this true ? No known left context. But all cimaps (for any l) are identical; pick one */ /*E_INFO("Single phone word\n"); */ return (d2p->lrssid[b][0].cimap); } else { /* E_INFO("Multiple phone word\n"); */ lc = dict->word[w].ciphone[pronlen - 2]; return (d2p->rssid[b][lc].cimap); } } static void free_compress_map(xwdssid_t ** tree, int32 n_ci) { int32 b, l; for (b = 0; b < n_ci; b++) { for (l = 0; l < n_ci; l++) { ckd_free(tree[b][l].ssid); ckd_free(tree[b][l].cimap); } ckd_free(tree[b]); } ckd_free(tree); } static void populate_lrdiph(dict2pid_t *d2p, s3ssid_t ***rdiph_rc, s3cipid_t b) { bin_mdef_t *mdef = d2p->mdef; s3cipid_t l, r; for (l = 0; l < bin_mdef_n_ciphone(mdef); l++) { for (r = 0; r < bin_mdef_n_ciphone(mdef); r++) { s3pid_t p; p = bin_mdef_phone_id_nearest(mdef, (s3cipid_t) b, (s3cipid_t) l, (s3cipid_t) r, WORD_POSN_SINGLE); d2p->lrdiph_rc[b][l][r] = bin_mdef_pid2ssid(mdef, p); if (r == bin_mdef_silphone(mdef)) d2p->ldiph_lc[b][r][l] = bin_mdef_pid2ssid(mdef, p); if (rdiph_rc && l == bin_mdef_silphone(mdef)) rdiph_rc[b][l][r] = bin_mdef_pid2ssid(mdef, p); assert(IS_S3SSID(bin_mdef_pid2ssid(mdef, p))); E_DEBUG(2,("%s(%s,%s) => %d / %d\n", bin_mdef_ciphone_str(mdef, b), bin_mdef_ciphone_str(mdef, l), bin_mdef_ciphone_str(mdef, r), p, bin_mdef_pid2ssid(mdef, p))); } } } int dict2pid_add_word(dict2pid_t *d2p, int32 wid) { bin_mdef_t *mdef = d2p->mdef; dict_t *d = d2p->dict; if (dict_pronlen(d, wid) > 1) { s3cipid_t l; /* Make sure we have left and right context diphones for this * word. */ if (d2p->ldiph_lc[dict_first_phone(d, wid)][dict_second_phone(d, wid)][0] == BAD_S3SSID) { E_DEBUG(2, ("Filling in left-context diphones for %s(?,%s)\n", bin_mdef_ciphone_str(mdef, dict_first_phone(d, wid)), bin_mdef_ciphone_str(mdef, dict_second_phone(d, wid)))); for (l = 0; l < bin_mdef_n_ciphone(mdef); l++) { int p = bin_mdef_phone_id_nearest(mdef, dict_first_phone(d, wid), l, dict_second_phone(d, wid), WORD_POSN_BEGIN); d2p->ldiph_lc[dict_first_phone(d, wid)][dict_second_phone(d, wid)][l] = bin_mdef_pid2ssid(mdef, p); } } if (d2p->rssid[dict_last_phone(d, wid)][dict_second_last_phone(d, wid)].n_ssid == 0) { s3ssid_t *rmap; s3ssid_t *tmpssid; s3cipid_t *tmpcimap; s3cipid_t r; E_DEBUG(2, ("Filling in right-context diphones for %s(%s,?)\n", bin_mdef_ciphone_str(mdef, dict_last_phone(d, wid)), bin_mdef_ciphone_str(mdef, dict_second_last_phone(d, wid)))); rmap = ckd_calloc(bin_mdef_n_ciphone(mdef), sizeof(*rmap)); for (r = 0; r < bin_mdef_n_ciphone(mdef); r++) { int p = bin_mdef_phone_id_nearest(mdef, dict_last_phone(d, wid), dict_second_last_phone(d, wid), r, WORD_POSN_END); rmap[r] = bin_mdef_pid2ssid(mdef, p); } tmpssid = ckd_calloc(bin_mdef_n_ciphone(mdef), sizeof(*tmpssid)); tmpcimap = ckd_calloc(bin_mdef_n_ciphone(mdef), sizeof(*tmpcimap)); compress_table(rmap, tmpssid, tmpcimap, bin_mdef_n_ciphone(mdef)); for (r = 0; r < mdef->n_ciphone && tmpssid[r] != BAD_S3SSID; r++) ; d2p->rssid[dict_last_phone(d, wid)][dict_second_last_phone(d, wid)].ssid = tmpssid; d2p->rssid[dict_last_phone(d, wid)][dict_second_last_phone(d, wid)].cimap = tmpcimap; d2p->rssid[dict_last_phone(d, wid)][dict_second_last_phone(d, wid)].n_ssid = r; ckd_free(rmap); } } else { /* Make sure we have a left-right context triphone entry for * this word. */ E_INFO("Filling in context triphones for %s(?,?)\n", bin_mdef_ciphone_str(mdef, dict_first_phone(d, wid))); if (d2p->lrdiph_rc[dict_first_phone(d, wid)][0][0] == BAD_S3SSID) { populate_lrdiph(d2p, NULL, dict_first_phone(d, wid)); } } return 0; } s3ssid_t dict2pid_internal(dict2pid_t *d2p, int32 wid, int pos) { int b, l, r, p; dict_t *dict = d2p->dict; bin_mdef_t *mdef = d2p->mdef; if (pos == 0 || pos == dict_pronlen(dict, wid)) return BAD_S3SSID; b = dict_pron(dict, wid, pos); l = dict_pron(dict, wid, pos - 1); r = dict_pron(dict, wid, pos + 1); p = bin_mdef_phone_id_nearest(mdef, (s3cipid_t) b, (s3cipid_t) l, (s3cipid_t) r, WORD_POSN_INTERNAL); return bin_mdef_pid2ssid(mdef, p); } dict2pid_t * dict2pid_build(bin_mdef_t * mdef, dict_t * dict) { dict2pid_t *dict2pid; s3ssid_t ***rdiph_rc; bitvec_t *ldiph, *rdiph, *single; int32 pronlen; int32 b, l, r, w, p; E_INFO("Building PID tables for dictionary\n"); assert(mdef); assert(dict); dict2pid = (dict2pid_t *) ckd_calloc(1, sizeof(dict2pid_t)); dict2pid->refcount = 1; dict2pid->mdef = bin_mdef_retain(mdef); dict2pid->dict = dict_retain(dict); E_INFO("Allocating %d^3 * %d bytes (%d KiB) for word-initial triphones\n", mdef->n_ciphone, sizeof(s3ssid_t), mdef->n_ciphone * mdef->n_ciphone * mdef->n_ciphone * sizeof(s3ssid_t) / 1024); dict2pid->ldiph_lc = (s3ssid_t ***) ckd_calloc_3d(mdef->n_ciphone, mdef->n_ciphone, mdef->n_ciphone, sizeof(s3ssid_t)); /* Only used internally to generate rssid */ rdiph_rc = (s3ssid_t ***) ckd_calloc_3d(mdef->n_ciphone, mdef->n_ciphone, mdef->n_ciphone, sizeof(s3ssid_t)); dict2pid->lrdiph_rc = (s3ssid_t ***) ckd_calloc_3d(mdef->n_ciphone, mdef->n_ciphone, mdef->n_ciphone, sizeof (s3ssid_t)); /* Actually could use memset for this, if BAD_S3SSID is guaranteed * to be 65535... */ for (b = 0; b < mdef->n_ciphone; ++b) { for (r = 0; r < mdef->n_ciphone; ++r) { for (l = 0; l < mdef->n_ciphone; ++l) { dict2pid->ldiph_lc[b][r][l] = BAD_S3SSID; dict2pid->lrdiph_rc[b][l][r] = BAD_S3SSID; rdiph_rc[b][l][r] = BAD_S3SSID; } } } /* Track which diphones / ciphones have been seen. */ ldiph = bitvec_alloc(mdef->n_ciphone * mdef->n_ciphone); rdiph = bitvec_alloc(mdef->n_ciphone * mdef->n_ciphone); single = bitvec_alloc(mdef->n_ciphone); for (w = 0; w < dict_size(dict2pid->dict); w++) { pronlen = dict_pronlen(dict, w); if (pronlen >= 2) { b = dict_first_phone(dict, w); r = dict_second_phone(dict, w); /* Populate ldiph_lc */ if (bitvec_is_clear(ldiph, b * mdef->n_ciphone + r)) { /* Mark this diphone as done */ bitvec_set(ldiph, b * mdef->n_ciphone + r); /* Record all possible ssids for b(?,r) */ for (l = 0; l < bin_mdef_n_ciphone(mdef); l++) { p = bin_mdef_phone_id_nearest(mdef, (s3cipid_t) b, (s3cipid_t) l, (s3cipid_t) r, WORD_POSN_BEGIN); dict2pid->ldiph_lc[b][r][l] = bin_mdef_pid2ssid(mdef, p); } } /* Populate rdiph_rc */ l = dict_second_last_phone(dict, w); b = dict_last_phone(dict, w); if (bitvec_is_clear(rdiph, b * mdef->n_ciphone + l)) { /* Mark this diphone as done */ bitvec_set(rdiph, b * mdef->n_ciphone + l); for (r = 0; r < bin_mdef_n_ciphone(mdef); r++) { p = bin_mdef_phone_id_nearest(mdef, (s3cipid_t) b, (s3cipid_t) l, (s3cipid_t) r, WORD_POSN_END); rdiph_rc[b][l][r] = bin_mdef_pid2ssid(mdef, p); } } } else if (pronlen == 1) { b = dict_pron(dict, w, 0); E_DEBUG(1,("Building tables for single phone word %s phone %d = %s\n", dict_wordstr(dict, w), b, bin_mdef_ciphone_str(mdef, b))); /* Populate lrdiph_rc (and also ldiph_lc, rdiph_rc if needed) */ if (bitvec_is_clear(single, b)) { populate_lrdiph(dict2pid, rdiph_rc, b); bitvec_set(single, b); } } } bitvec_free(ldiph); bitvec_free(rdiph); bitvec_free(single); /* Try to compress rdiph_rc into rdiph_rc_compressed */ compress_right_context_tree(dict2pid, rdiph_rc); compress_left_right_context_tree(dict2pid); ckd_free_3d(rdiph_rc); dict2pid_report(dict2pid); return dict2pid; } dict2pid_t * dict2pid_retain(dict2pid_t *d2p) { ++d2p->refcount; return d2p; } int dict2pid_free(dict2pid_t * d2p) { if (d2p == NULL) return 0; if (--d2p->refcount > 0) return d2p->refcount; if (d2p->ldiph_lc) ckd_free_3d((void ***) d2p->ldiph_lc); if (d2p->lrdiph_rc) ckd_free_3d((void ***) d2p->lrdiph_rc); if (d2p->rssid) free_compress_map(d2p->rssid, bin_mdef_n_ciphone(d2p->mdef)); if (d2p->lrssid) free_compress_map(d2p->lrssid, bin_mdef_n_ciphone(d2p->mdef)); bin_mdef_free(d2p->mdef); dict_free(d2p->dict); ckd_free(d2p); return 0; } void dict2pid_report(dict2pid_t * d2p) { } void dict2pid_dump(FILE * fp, dict2pid_t * d2p) { int32 w, p, pronlen; int32 i, j, b, l, r; bin_mdef_t *mdef = d2p->mdef; dict_t *dict = d2p->dict; fprintf(fp, "# INTERNAL (wd comssid ssid ssid ... ssid comssid)\n"); for (w = 0; w < dict_size(dict); w++) { fprintf(fp, "%30s ", dict_wordstr(dict, w)); pronlen = dict_pronlen(dict, w); for (p = 0; p < pronlen; p++) fprintf(fp, " %5d", dict2pid_internal(d2p, w, p)); fprintf(fp, "\n"); } fprintf(fp, "#\n"); fprintf(fp, "# LDIPH_LC (b r l ssid)\n"); for (b = 0; b < bin_mdef_n_ciphone(mdef); b++) { for (r = 0; r < bin_mdef_n_ciphone(mdef); r++) { for (l = 0; l < bin_mdef_n_ciphone(mdef); l++) { if (IS_S3SSID(d2p->ldiph_lc[b][r][l])) fprintf(fp, "%6s %6s %6s %5d\n", bin_mdef_ciphone_str(mdef, (s3cipid_t) b), bin_mdef_ciphone_str(mdef, (s3cipid_t) r), bin_mdef_ciphone_str(mdef, (s3cipid_t) l), d2p->ldiph_lc[b][r][l]); /* RAH, ldiph_lc is returning an int32, %d expects an int16 */ } } } fprintf(fp, "#\n"); fprintf(fp, "# SSEQ %d (senid senid ...)\n", mdef->n_sseq); for (i = 0; i < mdef->n_sseq; i++) { fprintf(fp, "%5d ", i); for (j = 0; j < bin_mdef_n_emit_state(mdef); j++) fprintf(fp, " %5d", mdef->sseq[i][j]); fprintf(fp, "\n"); } fprintf(fp, "#\n"); fprintf(fp, "# END\n"); fflush(fp); } pocketsphinx-5prealpha/src/libpocketsphinx/fsg_history.c0000664000175000017500000002130412504317100021071 00000000000000/* -*- 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_history.c -- FSG Viterbi decode history * * ********************************************** * CMU ARPA Speech Project * * Copyright (c) 1999 Carnegie Mellon University. * ALL RIGHTS RESERVED. * ********************************************** * * HISTORY * * 25-Feb-2004 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University * Started.. */ /* System headers. */ #include /* SphinxBase headers. */ #include #include #include /* Local headers. */ #include "fsg_search_internal.h" #include "fsg_history.h" #define __FSG_DBG__ 0 fsg_history_t * fsg_history_init(fsg_model_t * fsg, dict_t *dict) { fsg_history_t *h; h = (fsg_history_t *) ckd_calloc(1, sizeof(fsg_history_t)); h->fsg = fsg; h->entries = blkarray_list_init(); if (fsg && dict) { h->n_ciphone = bin_mdef_n_ciphone(dict->mdef); h->frame_entries = (glist_t **) ckd_calloc_2d(fsg_model_n_state(fsg), bin_mdef_n_ciphone(dict->mdef), sizeof(**h->frame_entries)); } else { h->frame_entries = NULL; } return h; } void fsg_history_free(fsg_history_t *h) { int32 s, lc, ns, np; gnode_t *gn; if (h->fsg) { ns = fsg_model_n_state(h->fsg); np = h->n_ciphone; for (s = 0; s < ns; s++) { for (lc = 0; lc < np; lc++) { for (gn = h->frame_entries[s][lc]; gn; gn = gnode_next(gn)) { ckd_free(gnode_ptr(gn)); } glist_free(h->frame_entries[s][lc]); } } } ckd_free_2d(h->frame_entries); blkarray_list_free(h->entries); ckd_free(h); } void fsg_history_set_fsg(fsg_history_t *h, fsg_model_t *fsg, dict_t *dict) { if (blkarray_list_n_valid(h->entries) != 0) { E_WARN("Switching FSG while history not empty; history cleared\n"); blkarray_list_reset(h->entries); } if (h->frame_entries) ckd_free_2d((void **) h->frame_entries); h->frame_entries = NULL; h->fsg = fsg; if (fsg && dict) { h->n_ciphone = bin_mdef_n_ciphone(dict->mdef); h->frame_entries = (glist_t **) ckd_calloc_2d(fsg_model_n_state(fsg), bin_mdef_n_ciphone(dict->mdef), sizeof(glist_t)); } } void fsg_history_entry_add(fsg_history_t * h, fsg_link_t * link, int32 frame, int32 score, int32 pred, int32 lc, fsg_pnode_ctxt_t rc) { fsg_hist_entry_t *entry, *new_entry; int32 s; gnode_t *gn, *prev_gn; /* Skip the optimization for the initial dummy entries; always enter them */ if (frame < 0) { new_entry = (fsg_hist_entry_t *) ckd_calloc(1, sizeof(fsg_hist_entry_t)); new_entry->fsglink = link; new_entry->frame = frame; new_entry->score = score; new_entry->pred = pred; new_entry->lc = lc; new_entry->rc = rc; blkarray_list_append(h->entries, (void *) new_entry); return; } s = fsg_link_to_state(link); /* Locate where this entry should be inserted in frame_entries[s][lc] */ prev_gn = NULL; for (gn = h->frame_entries[s][lc]; gn; gn = gnode_next(gn)) { entry = (fsg_hist_entry_t *) gnode_ptr(gn); if (score BETTER_THAN entry->score) break; /* Found where to insert new entry */ /* Existing entry score not worse than new score */ if (FSG_PNODE_CTXT_SUB(&rc, &(entry->rc)) == 0) return; /* rc set reduced to 0; new entry can be ignored */ prev_gn = gn; } /* Create new entry after prev_gn (if prev_gn is NULL, at head) */ new_entry = (fsg_hist_entry_t *) ckd_calloc(1, sizeof(fsg_hist_entry_t)); new_entry->fsglink = link; new_entry->frame = frame; new_entry->score = score; new_entry->pred = pred; new_entry->lc = lc; new_entry->rc = rc; /* Note: rc set must be non-empty at this point */ if (!prev_gn) { h->frame_entries[s][lc] = glist_add_ptr(h->frame_entries[s][lc], (void *) new_entry); prev_gn = h->frame_entries[s][lc]; } else prev_gn = glist_insert_ptr(prev_gn, (void *) new_entry); /* * Update the rc set of all the remaining entries in the list. At this * point, gn is the entry, if any, immediately following new entry. */ while (gn) { entry = (fsg_hist_entry_t *) gnode_ptr(gn); if (FSG_PNODE_CTXT_SUB(&(entry->rc), &rc) == 0) { /* rc set of entry reduced to 0; can prune this entry */ ckd_free((void *) entry); gn = gnode_free(gn, prev_gn); } else { prev_gn = gn; gn = gnode_next(gn); } } } /* * Transfer the surviving history entries for this frame into the permanent * history table. */ void fsg_history_end_frame(fsg_history_t * h) { int32 s, lc, ns, np; gnode_t *gn; fsg_hist_entry_t *entry; ns = fsg_model_n_state(h->fsg); np = h->n_ciphone; for (s = 0; s < ns; s++) { for (lc = 0; lc < np; lc++) { for (gn = h->frame_entries[s][lc]; gn; gn = gnode_next(gn)) { entry = (fsg_hist_entry_t *) gnode_ptr(gn); blkarray_list_append(h->entries, (void *) entry); } glist_free(h->frame_entries[s][lc]); h->frame_entries[s][lc] = NULL; } } } fsg_hist_entry_t * fsg_history_entry_get(fsg_history_t * h, int32 id) { return ((fsg_hist_entry_t *) blkarray_list_get(h->entries, id)); } void fsg_history_reset(fsg_history_t * h) { blkarray_list_reset(h->entries); } int32 fsg_history_n_entries(fsg_history_t * h) { return (blkarray_list_n_valid(h->entries)); } void fsg_history_utt_start(fsg_history_t * h) { int32 s, lc, ns, np; assert(blkarray_list_n_valid(h->entries) == 0); assert(h->frame_entries); ns = fsg_model_n_state(h->fsg); np = h->n_ciphone; for (s = 0; s < ns; s++) { for (lc = 0; lc < np; lc++) { assert(h->frame_entries[s][lc] == NULL); } } } void fsg_history_utt_end(fsg_history_t * h) { } void fsg_history_print(fsg_history_t *h, dict_t *dict) { int bpidx, bp; for (bpidx = 0; bpidx < blkarray_list_n_valid(h->entries); bpidx++) { bp = bpidx; printf("History entry: "); while (bp > 0) { fsg_hist_entry_t *hist_entry = fsg_history_entry_get(h, bp); fsg_link_t *fl = fsg_hist_entry_fsglink(hist_entry); char const *baseword; int32 wid; bp = fsg_hist_entry_pred(hist_entry); wid = fsg_link_wid(fl); if (fl == NULL) continue; baseword = fsg_model_word_str(h->fsg, wid); printf("%s(%d->%d:%d) ", baseword, fsg_link_from_state(hist_entry->fsglink), fsg_link_to_state(hist_entry->fsglink), hist_entry->frame); } printf("\n"); } } pocketsphinx-5prealpha/src/libpocketsphinx/pocketsphinx_internal.h0000664000175000017500000002132712520771215023167 00000000000000/* -*- 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 pocketsphinx_internal.h Internal implementation of * PocketSphinx decoder. * @author David Huggins-Daines */ #ifndef __POCKETSPHINX_INTERNAL_H__ #define __POCKETSPHINX_INTERNAL_H__ /* SphinxBase headers. */ #include #include #include #include #include #include /* Local headers. */ #include "pocketsphinx.h" #include "acmod.h" #include "dict.h" #include "dict2pid.h" /** * Search algorithm structure. */ typedef struct ps_search_s ps_search_t; /* Search names*/ #define PS_DEFAULT_SEARCH "_default" #define PS_DEFAULT_PL_SEARCH "_default_pl" /* Search types */ #define PS_SEARCH_TYPE_KWS "kws" #define PS_SEARCH_TYPE_FSG "fsg" #define PS_SEARCH_TYPE_NGRAM "ngram" #define PS_SEARCH_TYPE_ALLPHONE "allphone" #define PS_SEARCH_TYPE_STATE_ALIGN "state_align" #define PS_SEARCH_TYPE_PHONE_LOOP "phone_loop" /** * V-table for search algorithm. */ typedef struct ps_searchfuncs_s { int (*start)(ps_search_t *search); int (*step)(ps_search_t *search, int frame_idx); int (*finish)(ps_search_t *search); int (*reinit)(ps_search_t *search, dict_t *dict, dict2pid_t *d2p); void (*free)(ps_search_t *search); ps_lattice_t *(*lattice)(ps_search_t *search); char const *(*hyp)(ps_search_t *search, int32 *out_score, int32 *out_is_final); int32 (*prob)(ps_search_t *search); ps_seg_t *(*seg_iter)(ps_search_t *search, int32 *out_score); } ps_searchfuncs_t; /** * Base structure for search module. */ struct ps_search_s { ps_searchfuncs_t *vt; /**< V-table of search methods. */ char *type; char *name; ps_search_t *pls; /**< Phoneme loop for lookahead. */ cmd_ln_t *config; /**< Configuration. */ acmod_t *acmod; /**< Acoustic model. */ dict_t *dict; /**< Pronunciation dictionary. */ dict2pid_t *d2p; /**< Dictionary to senone mappings. */ char *hyp_str; /**< Current hypothesis string. */ ps_lattice_t *dag; /**< Current hypothesis word graph. */ ps_latlink_t *last_link; /**< Final link in best path. */ int32 post; /**< Utterance posterior probability. */ int32 n_words; /**< Number of words known to search (may be less than in the dictionary) */ /* Magical word IDs that must exist in the dictionary: */ int32 start_wid; /**< Start word ID. */ int32 silence_wid; /**< Silence word ID. */ int32 finish_wid; /**< Finish word ID. */ }; #define ps_search_base(s) ((ps_search_t *)s) #define ps_search_config(s) ps_search_base(s)->config #define ps_search_acmod(s) ps_search_base(s)->acmod #define ps_search_dict(s) ps_search_base(s)->dict #define ps_search_dict2pid(s) ps_search_base(s)->d2p #define ps_search_dag(s) ps_search_base(s)->dag #define ps_search_last_link(s) ps_search_base(s)->last_link #define ps_search_post(s) ps_search_base(s)->post #define ps_search_lookahead(s) ps_search_base(s)->pls #define ps_search_n_words(s) ps_search_base(s)->n_words #define ps_search_type(s) ps_search_base(s)->type #define ps_search_name(s) ps_search_base(s)->name #define ps_search_start(s) (*(ps_search_base(s)->vt->start))(s) #define ps_search_step(s,i) (*(ps_search_base(s)->vt->step))(s,i) #define ps_search_finish(s) (*(ps_search_base(s)->vt->finish))(s) #define ps_search_reinit(s,d,d2p) (*(ps_search_base(s)->vt->reinit))(s,d,d2p) #define ps_search_free(s) (*(ps_search_base(s)->vt->free))(s) #define ps_search_lattice(s) (*(ps_search_base(s)->vt->lattice))(s) #define ps_search_hyp(s,sc,final) (*(ps_search_base(s)->vt->hyp))(s,sc,final) #define ps_search_prob(s) (*(ps_search_base(s)->vt->prob))(s) #define ps_search_seg_iter(s,sc) (*(ps_search_base(s)->vt->seg_iter))(s,sc) /* For convenience... */ #define ps_search_silence_wid(s) ps_search_base(s)->silence_wid #define ps_search_start_wid(s) ps_search_base(s)->start_wid #define ps_search_finish_wid(s) ps_search_base(s)->finish_wid /** * Initialize base structure. */ void ps_search_init(ps_search_t *search, ps_searchfuncs_t *vt, const char *type, const char *name, cmd_ln_t *config, acmod_t *acmod, dict_t *dict, dict2pid_t *d2p); /** * Free search */ void ps_search_base_free(ps_search_t *search); /** * Re-initialize base structure with new dictionary. */ void ps_search_base_reinit(ps_search_t *search, dict_t *dict, dict2pid_t *d2p); typedef struct ps_segfuncs_s { ps_seg_t *(*seg_next)(ps_seg_t *seg); void (*seg_free)(ps_seg_t *seg); } ps_segfuncs_t; /** * Base structure for hypothesis segmentation iterator. */ struct ps_seg_s { ps_segfuncs_t *vt; /**< V-table of seg methods */ ps_search_t *search; /**< Search object from whence this came */ char const *word; /**< Word string (pointer into dictionary hash) */ frame_idx_t sf; /**< Start frame. */ frame_idx_t ef; /**< End frame. */ int32 ascr; /**< Acoustic score. */ int32 lscr; /**< Language model score. */ int32 prob; /**< Log posterior probability. */ /* This doesn't need to be 32 bits, so once the scores above are * reduced to 16 bits (or less!), this will be too. */ int32 lback; /**< Language model backoff. */ /* Not sure if this should be here at all. */ float32 lwf; /**< Language weight factor (for second-pass searches) */ }; #define ps_search_seg_next(seg) (*(seg->vt->seg_next))(seg) #define ps_search_seg_free(s) (*(seg->vt->seg_free))(seg) /** * Decoder object. */ struct ps_decoder_s { /* Model parameters and such. */ cmd_ln_t *config; /**< Configuration. */ int refcount; /**< Reference count. */ /* Basic units of computation. */ acmod_t *acmod; /**< Acoustic model. */ dict_t *dict; /**< Pronunciation dictionary. */ dict2pid_t *d2p; /**< Dictionary to senone mapping. */ logmath_t *lmath; /**< Log math computation. */ /* Search modules. */ hash_table_t *searches; /**< Set of search modules. */ /* TODO: Convert this to a stack of searches each with their own * lookahead value. */ ps_search_t *search; /**< Currently active search module. */ ps_search_t *phone_loop; /**< Phone loop search for lookahead. */ int pl_window; /**< Window size for phoneme lookahead. */ /* Utterance-processing related stuff. */ uint32 uttno; /**< Utterance counter. */ ptmr_t perf; /**< Performance counter for all of decoding. */ uint32 n_frame; /**< Total number of frames processed. */ char const *mfclogdir; /**< Log directory for MFCC files. */ char const *rawlogdir; /**< Log directory for audio files. */ char const *senlogdir; /**< Log directory for senone score files. */ }; struct ps_search_iter_s { hash_iter_t itor; }; #endif /* __POCKETSPHINX_INTERNAL_H__ */ pocketsphinx-5prealpha/src/libpocketsphinx/kws_detections.c0000664000175000017500000000732112525215405021571 00000000000000/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* ==================================================================== * Copyright (c) 2014 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. * * ==================================================================== * */ /* * kws_detections.c -- Object for storing keyword search results */ #include "kws_detections.h" void kws_detections_reset(kws_detections_t *detections) { gnode_t *gn; if (!detections->detect_list) return; for (gn = detections->detect_list; gn; gn = gnode_next(gn)) ckd_free(gnode_ptr(gn)); glist_free(detections->detect_list); detections->detect_list = NULL; } void kws_detections_add(kws_detections_t *detections, const char* keyphrase, int sf, int ef, int prob, int ascr) { gnode_t *gn; kws_detection_t* detection; for (gn = detections->detect_list; gn; gn = gnode_next(gn)) { kws_detection_t *det = (kws_detection_t *)gnode_ptr(gn); if (strcmp(keyphrase, det->keyphrase) == 0 && det->sf < ef && det->ef > sf) { if (det->prob < prob) { det->sf = sf; det->ef = ef; det->prob = prob; det->ascr = ascr; } return; } } /* Nothing found */ detection = (kws_detection_t *)ckd_calloc(1, sizeof(*detection)); detection->sf = sf; detection->ef = ef; detection->keyphrase = keyphrase; detection->prob = prob; detection->ascr = ascr; detections->detect_list = glist_add_ptr(detections->detect_list, detection); } char * kws_detections_hyp_str(kws_detections_t *detections, int frame, int delay) { gnode_t *gn; char *c; int len; char *hyp_str; len = 0; for (gn = detections->detect_list; gn; gn = gnode_next(gn)) { kws_detection_t *det = (kws_detection_t *)gnode_ptr(gn); if (det->ef < frame - delay) { len += strlen(det->keyphrase) + 1; } } if (len == 0) { return NULL; } hyp_str = (char *)ckd_calloc(len, sizeof(char)); c = hyp_str; for (gn = detections->detect_list; gn; gn = gnode_next(gn)) { kws_detection_t *det = (kws_detection_t *)gnode_ptr(gn); if (det->ef < frame - delay) { memcpy(c, det->keyphrase, strlen(det->keyphrase)); c += strlen(det->keyphrase); *c = ' '; c++; } } if (c > hyp_str) { c--; *c = '\0'; } return hyp_str; } pocketsphinx-5prealpha/src/libpocketsphinx/vector.h0000664000175000017500000000604612504317100020046 00000000000000/* ==================================================================== * 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. * * ==================================================================== * */ /* * vector.h -- vector routines. * * ********************************************** * CMU ARPA Speech Project * * Copyright (c) 1997 Carnegie Mellon University. * ALL RIGHTS RESERVED. * ********************************************** */ #ifndef __VECTOR_H__ #define __VECTOR_H__ /* System headers. */ #include /* SphinxBase headers. */ #include typedef float32 *vector_t; /* * The reason for some of the "trivial" routines below is that they could be OPTIMIZED for SPEED * at some point. */ /* Floor all elements of v[0..dim-1] to min value of f */ void vector_floor(vector_t v, int32 dim, float64 f); /* Floor all non-0 elements of v[0..dim-1] to min value of f */ void vector_nz_floor(vector_t v, int32 dim, float64 f); /* * Normalize the elements of the given vector so that they sum to 1.0. If the sum is 0.0 * to begin with, the vector is left untouched. Return value: The normalization factor. */ float64 vector_sum_norm(vector_t v, int32 dim); /* Print vector in one line, in %11.4e format, terminated by newline */ void vector_print(FILE *fp, vector_t v, int32 dim); /* Return TRUE iff given vector is all 0.0 */ int32 vector_is_zero (float32 *vec, /* In: Vector to be checked */ int32 len); /* In: Length of above vector */ #endif /* VECTOR_H */ pocketsphinx-5prealpha/src/libpocketsphinx/s2_semi_mgau.c0000664000175000017500000012506512504317100021114 00000000000000/* -*- 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. * * ==================================================================== * */ /* System headers */ #include #include #include #include #include #include #if defined(__ADSPBLACKFIN__) #elif !defined(_WIN32_WCE) #include #endif /* SphinxBase headers */ #include #include #include #include #include #include #include /* Local headers */ #include "s2_semi_mgau.h" #include "tied_mgau_common.h" static ps_mgaufuncs_t s2_semi_mgau_funcs = { "s2_semi", s2_semi_mgau_frame_eval, /* frame_eval */ s2_semi_mgau_mllr_transform, /* transform */ s2_semi_mgau_free /* free */ }; struct vqFeature_s { int32 score; /* score or distance */ int32 codeword; /* codeword (vector index) */ }; static void eval_topn(s2_semi_mgau_t *s, int32 feat, mfcc_t *z) { int i, ceplen; vqFeature_t *topn; topn = s->f[feat]; ceplen = s->g->featlen[feat]; for (i = 0; i < s->max_topn; i++) { mfcc_t *mean, diff, sqdiff, compl; /* diff, diff^2, component likelihood */ vqFeature_t vtmp; mfcc_t *var, d; mfcc_t *obs; int32 cw, j; cw = topn[i].codeword; mean = s->g->mean[0][feat][0] + cw * ceplen; var = s->g->var[0][feat][0] + cw * ceplen; d = s->g->det[0][feat][cw]; obs = z; for (j = 0; j < ceplen; j++) { diff = *obs++ - *mean++; sqdiff = MFCCMUL(diff, diff); compl = MFCCMUL(sqdiff, *var); d = GMMSUB(d, compl); ++var; } topn[i].score = (int32)d; if (i == 0) continue; vtmp = topn[i]; for (j = i - 1; j >= 0 && (int32)d > topn[j].score; j--) { topn[j + 1] = topn[j]; } topn[j + 1] = vtmp; } } static void eval_cb(s2_semi_mgau_t *s, int32 feat, mfcc_t *z) { vqFeature_t *worst, *best, *topn; mfcc_t *mean; mfcc_t *var, *det, *detP, *detE; int32 i, ceplen; best = topn = s->f[feat]; worst = topn + (s->max_topn - 1); mean = s->g->mean[0][feat][0]; var = s->g->var[0][feat][0]; det = s->g->det[0][feat]; detE = det + s->g->n_density; ceplen = s->g->featlen[feat]; for (detP = det; detP < detE; ++detP) { mfcc_t diff, sqdiff, compl; /* diff, diff^2, component likelihood */ mfcc_t d; mfcc_t *obs; vqFeature_t *cur; int32 cw, j; d = *detP; obs = z; cw = (int)(detP - det); for (j = 0; (j < ceplen) && (d >= worst->score); ++j) { diff = *obs++ - *mean++; sqdiff = MFCCMUL(diff, diff); compl = MFCCMUL(sqdiff, *var); d = GMMSUB(d, compl); ++var; } if (j < ceplen) { /* terminated early, so not in topn */ mean += (ceplen - j); var += (ceplen - j); continue; } if ((int32)d < worst->score) continue; for (i = 0; i < s->max_topn; i++) { /* already there, so don't need to insert */ if (topn[i].codeword == cw) break; } if (i < s->max_topn) continue; /* already there. Don't insert */ /* remaining code inserts codeword and dist in correct spot */ for (cur = worst - 1; cur >= best && (int32)d >= cur->score; --cur) memcpy(cur + 1, cur, sizeof(vqFeature_t)); ++cur; cur->codeword = cw; cur->score = (int32)d; } } static void mgau_dist(s2_semi_mgau_t * s, int32 frame, int32 feat, mfcc_t * z) { eval_topn(s, feat, z); /* If this frame is skipped, do nothing else. */ if (frame % s->ds_ratio) return; /* Evaluate the rest of the codebook (or subset thereof). */ eval_cb(s, feat, z); } static int mgau_norm(s2_semi_mgau_t *s, int feat) { int32 norm; int j; /* Compute quantized normalizing constant. */ norm = s->f[feat][0].score >> SENSCR_SHIFT; /* Normalize the scores, negate them, and clamp their dynamic range. */ for (j = 0; j < s->max_topn; ++j) { s->f[feat][j].score = -((s->f[feat][j].score >> SENSCR_SHIFT) - norm); if (s->f[feat][j].score > MAX_NEG_ASCR) s->f[feat][j].score = MAX_NEG_ASCR; if (s->topn_beam[feat] && s->f[feat][j].score > s->topn_beam[feat]) break; } return j; } static int32 get_scores_8b_feat_6(s2_semi_mgau_t * s, int i, int16 *senone_scores, uint8 *senone_active, int32 n_senone_active) { int32 j, l; uint8 *pid_cw0, *pid_cw1, *pid_cw2, *pid_cw3, *pid_cw4, *pid_cw5; pid_cw0 = s->mixw[i][s->f[i][0].codeword]; pid_cw1 = s->mixw[i][s->f[i][1].codeword]; pid_cw2 = s->mixw[i][s->f[i][2].codeword]; pid_cw3 = s->mixw[i][s->f[i][3].codeword]; pid_cw4 = s->mixw[i][s->f[i][4].codeword]; pid_cw5 = s->mixw[i][s->f[i][5].codeword]; for (l = j = 0; j < n_senone_active; j++) { int sen = senone_active[j] + l; int32 tmp = pid_cw0[sen] + s->f[i][0].score; tmp = fast_logmath_add(s->lmath_8b, tmp, pid_cw1[sen] + s->f[i][1].score); tmp = fast_logmath_add(s->lmath_8b, tmp, pid_cw2[sen] + s->f[i][2].score); tmp = fast_logmath_add(s->lmath_8b, tmp, pid_cw3[sen] + s->f[i][3].score); tmp = fast_logmath_add(s->lmath_8b, tmp, pid_cw4[sen] + s->f[i][4].score); tmp = fast_logmath_add(s->lmath_8b, tmp, pid_cw5[sen] + s->f[i][5].score); senone_scores[sen] += tmp; l = sen; } return 0; } static int32 get_scores_8b_feat_5(s2_semi_mgau_t * s, int i, int16 *senone_scores, uint8 *senone_active, int32 n_senone_active) { int32 j, l; uint8 *pid_cw0, *pid_cw1, *pid_cw2, *pid_cw3, *pid_cw4; pid_cw0 = s->mixw[i][s->f[i][0].codeword]; pid_cw1 = s->mixw[i][s->f[i][1].codeword]; pid_cw2 = s->mixw[i][s->f[i][2].codeword]; pid_cw3 = s->mixw[i][s->f[i][3].codeword]; pid_cw4 = s->mixw[i][s->f[i][4].codeword]; for (l = j = 0; j < n_senone_active; j++) { int sen = senone_active[j] + l; int32 tmp = pid_cw0[sen] + s->f[i][0].score; tmp = fast_logmath_add(s->lmath_8b, tmp, pid_cw1[sen] + s->f[i][1].score); tmp = fast_logmath_add(s->lmath_8b, tmp, pid_cw2[sen] + s->f[i][2].score); tmp = fast_logmath_add(s->lmath_8b, tmp, pid_cw3[sen] + s->f[i][3].score); tmp = fast_logmath_add(s->lmath_8b, tmp, pid_cw4[sen] + s->f[i][4].score); senone_scores[sen] += tmp; l = sen; } return 0; } static int32 get_scores_8b_feat_4(s2_semi_mgau_t * s, int i, int16 *senone_scores, uint8 *senone_active, int32 n_senone_active) { int32 j, l; uint8 *pid_cw0, *pid_cw1, *pid_cw2, *pid_cw3; pid_cw0 = s->mixw[i][s->f[i][0].codeword]; pid_cw1 = s->mixw[i][s->f[i][1].codeword]; pid_cw2 = s->mixw[i][s->f[i][2].codeword]; pid_cw3 = s->mixw[i][s->f[i][3].codeword]; for (l = j = 0; j < n_senone_active; j++) { int sen = senone_active[j] + l; int32 tmp = pid_cw0[sen] + s->f[i][0].score; tmp = fast_logmath_add(s->lmath_8b, tmp, pid_cw1[sen] + s->f[i][1].score); tmp = fast_logmath_add(s->lmath_8b, tmp, pid_cw2[sen] + s->f[i][2].score); tmp = fast_logmath_add(s->lmath_8b, tmp, pid_cw3[sen] + s->f[i][3].score); senone_scores[sen] += tmp; l = sen; } return 0; } static int32 get_scores_8b_feat_3(s2_semi_mgau_t * s, int i, int16 *senone_scores, uint8 *senone_active, int32 n_senone_active) { int32 j, l; uint8 *pid_cw0, *pid_cw1, *pid_cw2; pid_cw0 = s->mixw[i][s->f[i][0].codeword]; pid_cw1 = s->mixw[i][s->f[i][1].codeword]; pid_cw2 = s->mixw[i][s->f[i][2].codeword]; for (l = j = 0; j < n_senone_active; j++) { int sen = senone_active[j] + l; int32 tmp = pid_cw0[sen] + s->f[i][0].score; tmp = fast_logmath_add(s->lmath_8b, tmp, pid_cw1[sen] + s->f[i][1].score); tmp = fast_logmath_add(s->lmath_8b, tmp, pid_cw2[sen] + s->f[i][2].score); senone_scores[sen] += tmp; l = sen; } return 0; } static int32 get_scores_8b_feat_2(s2_semi_mgau_t * s, int i, int16 *senone_scores, uint8 *senone_active, int32 n_senone_active) { int32 j, l; uint8 *pid_cw0, *pid_cw1; pid_cw0 = s->mixw[i][s->f[i][0].codeword]; pid_cw1 = s->mixw[i][s->f[i][1].codeword]; for (l = j = 0; j < n_senone_active; j++) { int sen = senone_active[j] + l; int32 tmp = pid_cw0[sen] + s->f[i][0].score; tmp = fast_logmath_add(s->lmath_8b, tmp, pid_cw1[sen] + s->f[i][1].score); senone_scores[sen] += tmp; l = sen; } return 0; } static int32 get_scores_8b_feat_1(s2_semi_mgau_t * s, int i, int16 *senone_scores, uint8 *senone_active, int32 n_senone_active) { int32 j, l; uint8 *pid_cw0; pid_cw0 = s->mixw[i][s->f[i][0].codeword]; for (l = j = 0; j < n_senone_active; j++) { int sen = senone_active[j] + l; int32 tmp = pid_cw0[sen] + s->f[i][0].score; senone_scores[sen] += tmp; l = sen; } return 0; } static int32 get_scores_8b_feat_any(s2_semi_mgau_t * s, int i, int topn, int16 *senone_scores, uint8 *senone_active, int32 n_senone_active) { int32 j, k, l; for (l = j = 0; j < n_senone_active; j++) { int sen = senone_active[j] + l; uint8 *pid_cw; int32 tmp; pid_cw = s->mixw[i][s->f[i][0].codeword]; tmp = pid_cw[sen] + s->f[i][0].score; for (k = 1; k < topn; ++k) { pid_cw = s->mixw[i][s->f[i][k].codeword]; tmp = fast_logmath_add(s->lmath_8b, tmp, pid_cw[sen] + s->f[i][k].score); } senone_scores[sen] += tmp; l = sen; } return 0; } static int32 get_scores_8b_feat(s2_semi_mgau_t * s, int i, int topn, int16 *senone_scores, uint8 *senone_active, int32 n_senone_active) { switch (topn) { case 6: return get_scores_8b_feat_6(s, i, senone_scores, senone_active, n_senone_active); case 5: return get_scores_8b_feat_5(s, i, senone_scores, senone_active, n_senone_active); case 4: return get_scores_8b_feat_4(s, i, senone_scores, senone_active, n_senone_active); case 3: return get_scores_8b_feat_3(s, i, senone_scores, senone_active, n_senone_active); case 2: return get_scores_8b_feat_2(s, i, senone_scores, senone_active, n_senone_active); case 1: return get_scores_8b_feat_1(s, i, senone_scores, senone_active, n_senone_active); default: return get_scores_8b_feat_any(s, i, topn, senone_scores, senone_active, n_senone_active); } } static int32 get_scores_8b_feat_all(s2_semi_mgau_t * s, int i, int topn, int16 *senone_scores) { int32 j, k; for (j = 0; j < s->n_sen; j++) { uint8 *pid_cw; int32 tmp; pid_cw = s->mixw[i][s->f[i][0].codeword]; tmp = pid_cw[j] + s->f[i][0].score; for (k = 1; k < topn; ++k) { pid_cw = s->mixw[i][s->f[i][k].codeword]; tmp = fast_logmath_add(s->lmath_8b, tmp, pid_cw[j] + s->f[i][k].score); } senone_scores[j] += tmp; } return 0; } static int32 get_scores_4b_feat_6(s2_semi_mgau_t * s, int i, int16 *senone_scores, uint8 *senone_active, int32 n_senone_active) { int32 j, l; uint8 *pid_cw0, *pid_cw1, *pid_cw2, *pid_cw3, *pid_cw4, *pid_cw5; uint8 w_den[6][16]; /* Precompute scaled densities. */ for (j = 0; j < 16; ++j) { w_den[0][j] = s->mixw_cb[j] + s->f[i][0].score; w_den[1][j] = s->mixw_cb[j] + s->f[i][1].score; w_den[2][j] = s->mixw_cb[j] + s->f[i][2].score; w_den[3][j] = s->mixw_cb[j] + s->f[i][3].score; w_den[4][j] = s->mixw_cb[j] + s->f[i][4].score; w_den[5][j] = s->mixw_cb[j] + s->f[i][5].score; } pid_cw0 = s->mixw[i][s->f[i][0].codeword]; pid_cw1 = s->mixw[i][s->f[i][1].codeword]; pid_cw2 = s->mixw[i][s->f[i][2].codeword]; pid_cw3 = s->mixw[i][s->f[i][3].codeword]; pid_cw4 = s->mixw[i][s->f[i][4].codeword]; pid_cw5 = s->mixw[i][s->f[i][5].codeword]; for (l = j = 0; j < n_senone_active; j++) { int n = senone_active[j] + l; int tmp, cw; if (n & 1) { cw = pid_cw0[n/2] >> 4; tmp = w_den[0][cw]; cw = pid_cw1[n/2] >> 4; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[1][cw]); cw = pid_cw2[n/2] >> 4; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[2][cw]); cw = pid_cw3[n/2] >> 4; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[3][cw]); cw = pid_cw4[n/2] >> 4; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[4][cw]); cw = pid_cw5[n/2] >> 4; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[5][cw]); } else { cw = pid_cw0[n/2] & 0x0f; tmp = w_den[0][cw]; cw = pid_cw1[n/2] & 0x0f; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[1][cw]); cw = pid_cw2[n/2] & 0x0f; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[2][cw]); cw = pid_cw3[n/2] & 0x0f; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[3][cw]); cw = pid_cw4[n/2] & 0x0f; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[4][cw]); cw = pid_cw5[n/2] & 0x0f; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[5][cw]); } senone_scores[n] += tmp; l = n; } return 0; } static int32 get_scores_4b_feat_5(s2_semi_mgau_t * s, int i, int16 *senone_scores, uint8 *senone_active, int32 n_senone_active) { int32 j, l; uint8 *pid_cw0, *pid_cw1, *pid_cw2, *pid_cw3, *pid_cw4; uint8 w_den[5][16]; /* Precompute scaled densities. */ for (j = 0; j < 16; ++j) { w_den[0][j] = s->mixw_cb[j] + s->f[i][0].score; w_den[1][j] = s->mixw_cb[j] + s->f[i][1].score; w_den[2][j] = s->mixw_cb[j] + s->f[i][2].score; w_den[3][j] = s->mixw_cb[j] + s->f[i][3].score; w_den[4][j] = s->mixw_cb[j] + s->f[i][4].score; } pid_cw0 = s->mixw[i][s->f[i][0].codeword]; pid_cw1 = s->mixw[i][s->f[i][1].codeword]; pid_cw2 = s->mixw[i][s->f[i][2].codeword]; pid_cw3 = s->mixw[i][s->f[i][3].codeword]; pid_cw4 = s->mixw[i][s->f[i][4].codeword]; for (l = j = 0; j < n_senone_active; j++) { int n = senone_active[j] + l; int tmp, cw; if (n & 1) { cw = pid_cw0[n/2] >> 4; tmp = w_den[0][cw]; cw = pid_cw1[n/2] >> 4; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[1][cw]); cw = pid_cw2[n/2] >> 4; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[2][cw]); cw = pid_cw3[n/2] >> 4; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[3][cw]); cw = pid_cw4[n/2] >> 4; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[4][cw]); } else { cw = pid_cw0[n/2] & 0x0f; tmp = w_den[0][cw]; cw = pid_cw1[n/2] & 0x0f; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[1][cw]); cw = pid_cw2[n/2] & 0x0f; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[2][cw]); cw = pid_cw3[n/2] & 0x0f; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[3][cw]); cw = pid_cw4[n/2] & 0x0f; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[4][cw]); } senone_scores[n] += tmp; l = n; } return 0; } static int32 get_scores_4b_feat_4(s2_semi_mgau_t * s, int i, int16 *senone_scores, uint8 *senone_active, int32 n_senone_active) { int32 j, l; uint8 *pid_cw0, *pid_cw1, *pid_cw2, *pid_cw3; uint8 w_den[4][16]; /* Precompute scaled densities. */ for (j = 0; j < 16; ++j) { w_den[0][j] = s->mixw_cb[j] + s->f[i][0].score; w_den[1][j] = s->mixw_cb[j] + s->f[i][1].score; w_den[2][j] = s->mixw_cb[j] + s->f[i][2].score; w_den[3][j] = s->mixw_cb[j] + s->f[i][3].score; } pid_cw0 = s->mixw[i][s->f[i][0].codeword]; pid_cw1 = s->mixw[i][s->f[i][1].codeword]; pid_cw2 = s->mixw[i][s->f[i][2].codeword]; pid_cw3 = s->mixw[i][s->f[i][3].codeword]; for (l = j = 0; j < n_senone_active; j++) { int n = senone_active[j] + l; int tmp, cw; if (n & 1) { cw = pid_cw0[n/2] >> 4; tmp = w_den[0][cw]; cw = pid_cw1[n/2] >> 4; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[1][cw]); cw = pid_cw2[n/2] >> 4; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[2][cw]); cw = pid_cw3[n/2] >> 4; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[3][cw]); } else { cw = pid_cw0[n/2] & 0x0f; tmp = w_den[0][cw]; cw = pid_cw1[n/2] & 0x0f; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[1][cw]); cw = pid_cw2[n/2] & 0x0f; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[2][cw]); cw = pid_cw3[n/2] & 0x0f; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[3][cw]); } senone_scores[n] += tmp; l = n; } return 0; } static int32 get_scores_4b_feat_3(s2_semi_mgau_t * s, int i, int16 *senone_scores, uint8 *senone_active, int32 n_senone_active) { int32 j, l; uint8 *pid_cw0, *pid_cw1, *pid_cw2; uint8 w_den[3][16]; /* Precompute scaled densities. */ for (j = 0; j < 16; ++j) { w_den[0][j] = s->mixw_cb[j] + s->f[i][0].score; w_den[1][j] = s->mixw_cb[j] + s->f[i][1].score; w_den[2][j] = s->mixw_cb[j] + s->f[i][2].score; } pid_cw0 = s->mixw[i][s->f[i][0].codeword]; pid_cw1 = s->mixw[i][s->f[i][1].codeword]; pid_cw2 = s->mixw[i][s->f[i][2].codeword]; for (l = j = 0; j < n_senone_active; j++) { int n = senone_active[j] + l; int tmp, cw; if (n & 1) { cw = pid_cw0[n/2] >> 4; tmp = w_den[0][cw]; cw = pid_cw1[n/2] >> 4; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[1][cw]); cw = pid_cw2[n/2] >> 4; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[2][cw]); } else { cw = pid_cw0[n/2] & 0x0f; tmp = w_den[0][cw]; cw = pid_cw1[n/2] & 0x0f; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[1][cw]); cw = pid_cw2[n/2] & 0x0f; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[2][cw]); } senone_scores[n] += tmp; l = n; } return 0; } static int32 get_scores_4b_feat_2(s2_semi_mgau_t * s, int i, int16 *senone_scores, uint8 *senone_active, int32 n_senone_active) { int32 j, l; uint8 *pid_cw0, *pid_cw1; uint8 w_den[2][16]; /* Precompute scaled densities. */ for (j = 0; j < 16; ++j) { w_den[0][j] = s->mixw_cb[j] + s->f[i][0].score; w_den[1][j] = s->mixw_cb[j] + s->f[i][1].score; } pid_cw0 = s->mixw[i][s->f[i][0].codeword]; pid_cw1 = s->mixw[i][s->f[i][1].codeword]; for (l = j = 0; j < n_senone_active; j++) { int n = senone_active[j] + l; int tmp, cw; if (n & 1) { cw = pid_cw0[n/2] >> 4; tmp = w_den[0][cw]; cw = pid_cw1[n/2] >> 4; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[1][cw]); } else { cw = pid_cw0[n/2] & 0x0f; tmp = w_den[0][cw]; cw = pid_cw1[n/2] & 0x0f; tmp = fast_logmath_add(s->lmath_8b, tmp, w_den[1][cw]); } senone_scores[n] += tmp; l = n; } return 0; } static int32 get_scores_4b_feat_1(s2_semi_mgau_t * s, int i, int16 *senone_scores, uint8 *senone_active, int32 n_senone_active) { int32 j, l; uint8 *pid_cw0; uint8 w_den[16]; /* Precompute scaled densities. */ for (j = 0; j < 16; ++j) { w_den[j] = s->mixw_cb[j] + s->f[i][0].score; } pid_cw0 = s->mixw[i][s->f[i][0].codeword]; for (l = j = 0; j < n_senone_active; j++) { int n = senone_active[j] + l; int tmp, cw; if (n & 1) { cw = pid_cw0[n/2] >> 4; tmp = w_den[cw]; } else { cw = pid_cw0[n/2] & 0x0f; tmp = w_den[cw]; } senone_scores[n] += tmp; l = n; } return 0; } static int32 get_scores_4b_feat_any(s2_semi_mgau_t * s, int i, int topn, int16 *senone_scores, uint8 *senone_active, int32 n_senone_active) { int32 j, k, l; for (l = j = 0; j < n_senone_active; j++) { int n = senone_active[j] + l; int tmp, cw; uint8 *pid_cw; pid_cw = s->mixw[i][s->f[i][0].codeword]; if (n & 1) cw = pid_cw[n/2] >> 4; else cw = pid_cw[n/2] & 0x0f; tmp = s->mixw_cb[cw] + s->f[i][0].score; for (k = 1; k < topn; ++k) { pid_cw = s->mixw[i][s->f[i][k].codeword]; if (n & 1) cw = pid_cw[n/2] >> 4; else cw = pid_cw[n/2] & 0x0f; tmp = fast_logmath_add(s->lmath_8b, tmp, s->mixw_cb[cw] + s->f[i][k].score); } senone_scores[n] += tmp; l = n; } return 0; } static int32 get_scores_4b_feat(s2_semi_mgau_t * s, int i, int topn, int16 *senone_scores, uint8 *senone_active, int32 n_senone_active) { switch (topn) { case 6: return get_scores_4b_feat_6(s, i, senone_scores, senone_active, n_senone_active); case 5: return get_scores_4b_feat_5(s, i, senone_scores, senone_active, n_senone_active); case 4: return get_scores_4b_feat_4(s, i, senone_scores, senone_active, n_senone_active); case 3: return get_scores_4b_feat_3(s, i, senone_scores, senone_active, n_senone_active); case 2: return get_scores_4b_feat_2(s, i, senone_scores, senone_active, n_senone_active); case 1: return get_scores_4b_feat_1(s, i, senone_scores, senone_active, n_senone_active); default: return get_scores_4b_feat_any(s, i, topn, senone_scores, senone_active, n_senone_active); } } static int32 get_scores_4b_feat_all(s2_semi_mgau_t * s, int i, int topn, int16 *senone_scores) { int j, last_sen; j = 0; /* Number of senones is always even, but don't overrun if it isn't. */ last_sen = s->n_sen & ~1; while (j < last_sen) { uint8 *pid_cw; int32 tmp0, tmp1; int k; pid_cw = s->mixw[i][s->f[i][0].codeword]; tmp0 = s->mixw_cb[pid_cw[j/2] & 0x0f] + s->f[i][0].score; tmp1 = s->mixw_cb[pid_cw[j/2] >> 4] + s->f[i][0].score; for (k = 1; k < topn; ++k) { int32 w_den0, w_den1; pid_cw = s->mixw[i][s->f[i][k].codeword]; w_den0 = s->mixw_cb[pid_cw[j/2] & 0x0f] + s->f[i][k].score; w_den1 = s->mixw_cb[pid_cw[j/2] >> 4] + s->f[i][k].score; tmp0 = fast_logmath_add(s->lmath_8b, tmp0, w_den0); tmp1 = fast_logmath_add(s->lmath_8b, tmp1, w_den1); } senone_scores[j++] += tmp0; senone_scores[j++] += tmp1; } return 0; } /* * Compute senone scores for the active senones. */ int32 s2_semi_mgau_frame_eval(ps_mgau_t *ps, int16 *senone_scores, uint8 *senone_active, int32 n_senone_active, mfcc_t ** featbuf, int32 frame, int32 compallsen) { s2_semi_mgau_t *s = (s2_semi_mgau_t *)ps; int i, topn_idx; int n_feat = s->g->n_feat; memset(senone_scores, 0, s->n_sen * sizeof(*senone_scores)); /* No bounds checking is done here, which just means you'll get * semi-random crap if you request a frame in the future or one * that's too far in the past. */ topn_idx = frame % s->n_topn_hist; s->f = s->topn_hist[topn_idx]; for (i = 0; i < n_feat; ++i) { /* For past frames this will already be computed. */ if (frame >= ps_mgau_base(ps)->frame_idx) { vqFeature_t **lastf; if (topn_idx == 0) lastf = s->topn_hist[s->n_topn_hist-1]; else lastf = s->topn_hist[topn_idx-1]; memcpy(s->f[i], lastf[i], sizeof(vqFeature_t) * s->max_topn); mgau_dist(s, frame, i, featbuf[i]); s->topn_hist_n[topn_idx][i] = mgau_norm(s, i); } if (s->mixw_cb) { if (compallsen) get_scores_4b_feat_all(s, i, s->topn_hist_n[topn_idx][i], senone_scores); else get_scores_4b_feat(s, i, s->topn_hist_n[topn_idx][i], senone_scores, senone_active, n_senone_active); } else { if (compallsen) get_scores_8b_feat_all(s, i, s->topn_hist_n[topn_idx][i], senone_scores); else get_scores_8b_feat(s, i, s->topn_hist_n[topn_idx][i], senone_scores, senone_active, n_senone_active); } } return 0; } static int32 read_sendump(s2_semi_mgau_t *s, bin_mdef_t *mdef, char const *file) { FILE *fp; char line[1000]; int32 i, n, r, c; int32 do_swap, do_mmap; size_t offset; int n_clust = 0; int n_feat = s->g->n_feat; int n_density = s->g->n_density; int n_sen = bin_mdef_n_sen(mdef); int n_bits = 8; s->n_sen = n_sen; /* FIXME: Should have been done earlier */ do_mmap = cmd_ln_boolean_r(s->config, "-mmap"); if ((fp = fopen(file, "rb")) == NULL) return -1; E_INFO("Loading senones from dump file %s\n", file); /* Read title size, title */ if (fread(&n, sizeof(int32), 1, fp) != 1) { E_ERROR_SYSTEM("Failed to read title size from %s", file); goto error_out; } /* This is extremely bogus */ do_swap = 0; if (n < 1 || n > 999) { SWAP_INT32(&n); if (n < 1 || n > 999) { E_ERROR("Title length %x in dump file %s out of range\n", n, file); goto error_out; } do_swap = 1; } if (fread(line, sizeof(char), n, fp) != n) { E_ERROR_SYSTEM("Cannot read title"); goto error_out; } if (line[n - 1] != '\0') { E_ERROR("Bad title in dump file\n"); goto error_out; } E_INFO("%s\n", line); /* Read header size, header */ if (fread(&n, sizeof(n), 1, fp) != 1) { E_ERROR_SYSTEM("Failed to read header size from %s", file); goto error_out; } if (do_swap) SWAP_INT32(&n); if (fread(line, sizeof(char), n, fp) != n) { E_ERROR_SYSTEM("Cannot read header"); goto error_out; } if (line[n - 1] != '\0') { E_ERROR("Bad header in dump file\n"); goto error_out; } /* Read other header strings until string length = 0 */ for (;;) { if (fread(&n, sizeof(n), 1, fp) != 1) { E_ERROR_SYSTEM("Failed to read header string size from %s", file); goto error_out; } if (do_swap) SWAP_INT32(&n); if (n == 0) break; if (fread(line, sizeof(char), n, fp) != n) { E_ERROR_SYSTEM("Cannot read header"); goto error_out; } /* Look for a cluster count, if present */ if (!strncmp(line, "feature_count ", strlen("feature_count "))) { n_feat = atoi(line + strlen("feature_count ")); } if (!strncmp(line, "mixture_count ", strlen("mixture_count "))) { n_density = atoi(line + strlen("mixture_count ")); } if (!strncmp(line, "model_count ", strlen("model_count "))) { n_sen = atoi(line + strlen("model_count ")); } if (!strncmp(line, "cluster_count ", strlen("cluster_count "))) { n_clust = atoi(line + strlen("cluster_count ")); } if (!strncmp(line, "cluster_bits ", strlen("cluster_bits "))) { n_bits = atoi(line + strlen("cluster_bits ")); } } /* Defaults for #rows, #columns in mixw array. */ c = n_sen; r = n_density; if (n_clust == 0) { /* Older mixw files have them here, and they might be padded. */ if (fread(&r, sizeof(r), 1, fp) != 1) { E_ERROR_SYSTEM("Cannot read #rows"); goto error_out; } if (do_swap) SWAP_INT32(&r); if (fread(&c, sizeof(c), 1, fp) != 1) { E_ERROR_SYSTEM("Cannot read #columns"); goto error_out; } if (do_swap) SWAP_INT32(&c); E_INFO("Rows: %d, Columns: %d\n", r, c); } if (n_feat != s->g->n_feat) { E_ERROR("Number of feature streams mismatch: %d != %d\n", n_feat, s->g->n_feat); goto error_out; } if (n_density != s->g->n_density) { E_ERROR("Number of densities mismatch: %d != %d\n", n_density, s->g->n_density); goto error_out; } if (n_sen != s->n_sen) { E_ERROR("Number of senones mismatch: %d != %d\n", n_sen, s->n_sen); goto error_out; } if (!((n_clust == 0) || (n_clust == 15) || (n_clust == 16))) { E_ERROR("Cluster count must be 0, 15, or 16\n"); goto error_out; } if (n_clust == 15) ++n_clust; if (!((n_bits == 8) || (n_bits == 4))) { E_ERROR("Cluster count must be 4 or 8\n"); goto error_out; } if (do_mmap) { E_INFO("Using memory-mapped I/O for senones\n"); } offset = ftell(fp); /* Allocate memory for pdfs (or memory map them) */ if (do_mmap) { s->sendump_mmap = mmio_file_read(file); /* Get cluster codebook if any. */ if (n_clust) { s->mixw_cb = ((uint8 *) mmio_file_ptr(s->sendump_mmap)) + offset; offset += n_clust; } } else { /* Get cluster codebook if any. */ if (n_clust) { s->mixw_cb = ckd_calloc(1, n_clust); if (fread(s->mixw_cb, 1, n_clust, fp) != (size_t) n_clust) { E_ERROR("Failed to read %d bytes from sendump\n", n_clust); goto error_out; } } } /* Set up pointers, or read, or whatever */ if (s->sendump_mmap) { s->mixw = ckd_calloc_2d(n_feat, n_density, sizeof(*s->mixw)); for (n = 0; n < n_feat; n++) { int step = c; if (n_bits == 4) step = (step + 1) / 2; for (i = 0; i < r; i++) { s->mixw[n][i] = ((uint8 *) mmio_file_ptr(s->sendump_mmap)) + offset; offset += step; } } } else { s->mixw = ckd_calloc_3d(n_feat, n_density, n_sen, sizeof(***s->mixw)); /* Read pdf values and ids */ for (n = 0; n < n_feat; n++) { int step = c; if (n_bits == 4) step = (step + 1) / 2; for (i = 0; i < r; i++) { if (fread(s->mixw[n][i], sizeof(***s->mixw), step, fp) != (size_t) step) { E_ERROR("Failed to read %d bytes from sendump\n", step); goto error_out; } } } } fclose(fp); return 0; error_out: fclose(fp); return -1; } static int32 read_mixw(s2_semi_mgau_t * s, char const *file_name, double SmoothMin) { char **argname, **argval; char eofchk; FILE *fp; int32 byteswap, chksum_present; uint32 chksum; float32 *pdf; int32 i, f, c, n; int32 n_sen; int32 n_feat; int32 n_comp; int32 n_err; E_INFO("Reading mixture weights file '%s'\n", file_name); if ((fp = fopen(file_name, "rb")) == NULL) E_FATAL_SYSTEM("Failed to open mixture weights file '%s' for reading", file_name); /* Read header, including argument-value info and 32-bit byteorder magic */ if (bio_readhdr(fp, &argname, &argval, &byteswap) < 0) E_FATAL("Failed to read header from file '%s'\n", file_name); /* Parse argument-value list */ chksum_present = 0; for (i = 0; argname[i]; i++) { if (strcmp(argname[i], "version") == 0) { if (strcmp(argval[i], MGAU_MIXW_VERSION) != 0) E_WARN("Version mismatch(%s): %s, expecting %s\n", file_name, argval[i], MGAU_MIXW_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; /* Read #senones, #features, #codewords, arraysize */ if ((bio_fread(&n_sen, sizeof(int32), 1, fp, byteswap, &chksum) != 1) || (bio_fread(&n_feat, sizeof(int32), 1, fp, byteswap, &chksum) != 1) || (bio_fread(&n_comp, sizeof(int32), 1, fp, byteswap, &chksum) != 1) || (bio_fread(&n, sizeof(int32), 1, fp, byteswap, &chksum) != 1)) { E_FATAL("bio_fread(%s) (arraysize) failed\n", file_name); } if (n_feat != s->g->n_feat) E_FATAL("#Features streams(%d) != %d\n", n_feat, s->g->n_feat); if (n != n_sen * n_feat * n_comp) { E_FATAL ("%s: #float32s(%d) doesn't match header dimensions: %d x %d x %d\n", file_name, i, n_sen, n_feat, n_comp); } /* n_sen = number of mixture weights per codeword, which is * fixed at the number of senones since we have only one codebook. */ s->n_sen = n_sen; /* Quantized mixture weight arrays. */ s->mixw = ckd_calloc_3d(n_feat, s->g->n_density, n_sen, sizeof(***s->mixw)); /* Temporary structure to read in floats before conversion to (int32) logs3 */ pdf = (float32 *) ckd_calloc(n_comp, sizeof(float32)); /* Read senone probs data, normalize, floor, convert to logs3, truncate to 8 bits */ n_err = 0; for (i = 0; i < n_sen; i++) { for (f = 0; f < n_feat; f++) { if (bio_fread((void *) pdf, sizeof(float32), n_comp, fp, byteswap, &chksum) != n_comp) { E_FATAL("bio_fread(%s) (arraydata) failed\n", file_name); } /* Normalize and floor */ if (vector_sum_norm(pdf, n_comp) <= 0.0) n_err++; vector_floor(pdf, n_comp, SmoothMin); vector_sum_norm(pdf, n_comp); /* Convert to LOG, quantize, and transpose */ for (c = 0; c < n_comp; c++) { int32 qscr; qscr = -logmath_log(s->lmath_8b, pdf[c]); if ((qscr > MAX_NEG_MIXW) || (qscr < 0)) qscr = MAX_NEG_MIXW; s->mixw[f][c][i] = qscr; } } } if (n_err > 0) E_WARN("Weight normalization failed for %d mixture weights components\n", n_err); ckd_free(pdf); if (chksum_present) bio_verify_chksum(fp, byteswap, chksum); if (fread(&eofchk, 1, 1, fp) == 1) E_FATAL("More data than expected in %s\n", file_name); fclose(fp); E_INFO("Read %d x %d x %d mixture weights\n", n_sen, n_feat, n_comp); return n_sen; } static int split_topn(char const *str, uint8 *out, int nfeat) { char *topn_list = ckd_salloc(str); char *c, *cc; int i, maxn; c = topn_list; i = 0; maxn = 0; while (i < nfeat && (cc = strchr(c, ',')) != NULL) { *cc = '\0'; out[i] = atoi(c); if (out[i] > maxn) maxn = out[i]; c = cc + 1; ++i; } if (i < nfeat && *c != '\0') { out[i] = atoi(c); if (out[i] > maxn) maxn = out[i]; ++i; } while (i < nfeat) out[i++] = maxn; ckd_free(topn_list); return maxn; } ps_mgau_t * s2_semi_mgau_init(acmod_t *acmod) { s2_semi_mgau_t *s; ps_mgau_t *ps; char const *sendump_path; int i; int n_feat; s = ckd_calloc(1, sizeof(*s)); s->config = acmod->config; s->lmath = logmath_retain(acmod->lmath); /* Log-add table. */ s->lmath_8b = logmath_init(logmath_get_base(acmod->lmath), SENSCR_SHIFT, TRUE); if (s->lmath_8b == NULL) goto error_out; /* Ensure that it is only 8 bits wide so that fast_logmath_add() works. */ if (logmath_get_width(s->lmath_8b) != 1) { E_ERROR("Log base %f is too small to represent add table in 8 bits\n", logmath_get_base(s->lmath_8b)); goto error_out; } /* Read means and variances. */ if ((s->g = gauden_init(cmd_ln_str_r(s->config, "-mean"), cmd_ln_str_r(s->config, "-var"), cmd_ln_float32_r(s->config, "-varfloor"), s->lmath)) == NULL) goto error_out; /* Currently only a single codebook is supported. */ if (s->g->n_mgau != 1) goto error_out; n_feat = s->g->n_feat; /* Verify n_feat and veclen, against acmod. */ if (n_feat != feat_dimension1(acmod->fcb)) { E_ERROR("Number of streams does not match: %d != %d\n", n_feat, feat_dimension1(acmod->fcb)); goto error_out; } for (i = 0; i < n_feat; ++i) { if (s->g->featlen[i] != feat_dimension2(acmod->fcb, i)) { E_ERROR("Dimension of stream %d does not match: %d != %d\n", i, s->g->featlen[i], feat_dimension2(acmod->fcb, i)); goto error_out; } } /* Read mixture weights */ if ((sendump_path = cmd_ln_str_r(s->config, "-sendump"))) { if (read_sendump(s, acmod->mdef, sendump_path) < 0) { goto error_out; } } else { if (read_mixw(s, cmd_ln_str_r(s->config, "-mixw"), cmd_ln_float32_r(s->config, "-mixwfloor")) < 0) { goto error_out; } } s->ds_ratio = cmd_ln_int32_r(s->config, "-ds"); /* Determine top-N for each feature */ s->topn_beam = ckd_calloc(n_feat, sizeof(*s->topn_beam)); s->max_topn = cmd_ln_int32_r(s->config, "-topn"); split_topn(cmd_ln_str_r(s->config, "-topn_beam"), s->topn_beam, n_feat); E_INFO("Maximum top-N: %d ", s->max_topn); E_INFOCONT("Top-N beams:"); for (i = 0; i < n_feat; ++i) { E_INFOCONT(" %d", s->topn_beam[i]); } E_INFOCONT("\n"); /* Top-N scores from recent frames */ s->n_topn_hist = cmd_ln_int32_r(s->config, "-pl_window") + 2; s->topn_hist = (vqFeature_t ***) ckd_calloc_3d(s->n_topn_hist, n_feat, s->max_topn, sizeof(***s->topn_hist)); s->topn_hist_n = ckd_calloc_2d(s->n_topn_hist, n_feat, sizeof(**s->topn_hist_n)); for (i = 0; i < s->n_topn_hist; ++i) { int j; for (j = 0; j < n_feat; ++j) { int k; for (k = 0; k < s->max_topn; ++k) { s->topn_hist[i][j][k].score = WORST_DIST; s->topn_hist[i][j][k].codeword = k; } } } ps = (ps_mgau_t *)s; ps->vt = &s2_semi_mgau_funcs; return ps; error_out: s2_semi_mgau_free(ps_mgau_base(s)); return NULL; } int s2_semi_mgau_mllr_transform(ps_mgau_t *ps, ps_mllr_t *mllr) { s2_semi_mgau_t *s = (s2_semi_mgau_t *)ps; return gauden_mllr_transform(s->g, mllr, s->config); } void s2_semi_mgau_free(ps_mgau_t *ps) { s2_semi_mgau_t *s = (s2_semi_mgau_t *)ps; logmath_free(s->lmath); logmath_free(s->lmath_8b); if (s->sendump_mmap) { ckd_free_2d(s->mixw); mmio_file_unmap(s->sendump_mmap); } else { ckd_free_3d(s->mixw); if (s->mixw_cb) ckd_free(s->mixw_cb); } gauden_free(s->g); ckd_free(s->topn_beam); ckd_free_2d(s->topn_hist_n); ckd_free_3d((void **)s->topn_hist); ckd_free(s); } pocketsphinx-5prealpha/src/libpocketsphinx/s2_semi_mgau.h0000664000175000017500000000747712504317100021127 00000000000000/* -*- 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. * * ==================================================================== * */ /* * Interface for "semi-continuous vector quantization", a.k.a. Sphinx2 * fast GMM computation. */ #ifndef __S2_SEMI_MGAU_H__ #define __S2_SEMI_MGAU_H__ /* SphinxBase headesr. */ #include #include #include /* Local headers. */ #include "acmod.h" #include "hmm.h" #include "bin_mdef.h" #include "ms_gauden.h" typedef struct vqFeature_s vqFeature_t; typedef struct s2_semi_mgau_s s2_semi_mgau_t; struct s2_semi_mgau_s { ps_mgau_t base; /**< base structure. */ cmd_ln_t *config; /* configuration parameters */ gauden_t *g; /* Set of Gaussians (pointers below point in here and will go away soon) */ uint8 ***mixw; /* mixture weight distributions */ mmio_file_t *sendump_mmap;/* memory map for mixw (or NULL if not mmap) */ uint8 *mixw_cb; /* mixture weight codebook, if any (assume it contains 16 values) */ int32 n_sen; /* Number of senones */ uint8 *topn_beam; /* Beam for determining per-frame top-N densities */ int16 max_topn; int16 ds_ratio; vqFeature_t ***topn_hist; /**< Top-N scores and codewords for past frames. */ uint8 **topn_hist_n; /**< Variable top-N for past frames. */ vqFeature_t **f; /**< Topn-N for currently scoring frame. */ int n_topn_hist; /**< Number of past frames tracked. */ /* Log-add table for compressed values. */ logmath_t *lmath_8b; /* Log-add object for reloading means/variances. */ logmath_t *lmath; }; ps_mgau_t *s2_semi_mgau_init(acmod_t *acmod); void s2_semi_mgau_free(ps_mgau_t *s); int s2_semi_mgau_frame_eval(ps_mgau_t *s, int16 *senone_scores, uint8 *senone_active, int32 n_senone_active, mfcc_t **featbuf, int32 frame, int32 compallsen); int s2_semi_mgau_mllr_transform(ps_mgau_t *s, ps_mllr_t *mllr); #endif /* __S2_SEMI_MGAU_H__ */ pocketsphinx-5prealpha/src/libpocketsphinx/ngram_search_fwdtree.h0000664000175000017500000000535012504317100022712 00000000000000/* -*- 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_search_fwdtree.h Lexicon tree based Viterbi search. */ #ifndef __NGRAM_SEARCH_FWDTREE_H__ #define __NGRAM_SEARCH_FWDTREE_H__ /* SphinxBase headers. */ /* Local headers. */ #include "ngram_search.h" /** * Initialize N-Gram search for fwdtree decoding. */ void ngram_fwdtree_init(ngram_search_t *ngs); /** * Release memory associated with fwdtree decoding. */ void ngram_fwdtree_deinit(ngram_search_t *ngs); /** * Rebuild search structures for updated language models. */ int ngram_fwdtree_reinit(ngram_search_t *ngs); /** * Start fwdtree decoding for an utterance. */ void ngram_fwdtree_start(ngram_search_t *ngs); /** * Search one frame forward in an utterance. * * @return Number of frames searched (either 0 or 1). */ int ngram_fwdtree_search(ngram_search_t *ngs, int frame_idx); /** * Finish fwdtree decoding for an utterance. */ void ngram_fwdtree_finish(ngram_search_t *ngs); #endif /* __NGRAM_SEARCH_FWDTREE_H__ */ pocketsphinx-5prealpha/src/libpocketsphinx/ms_gauden.c0000664000175000017500000004775612504317100020516 00000000000000/* -*- 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. * * ==================================================================== * */ /* * gauden.c -- gaussian density module. * *********************************************** * CMU ARPA Speech Project * * Copyright (c) 1996 Carnegie Mellon University. * ALL RIGHTS RESERVED. *********************************************** * * HISTORY * $Log$ * Revision 1.7 2006/02/22 17:09:55 arthchan2003 * Merged from SPHINX3_5_2_RCI_IRII_BRANCH: 1, Followed Dave's change, keep active to be uint8 instead int8 in gauden_dist_norm.\n 2, Introdued gauden_dump and gauden_dump_ind. This allows debugging of ms_gauden routine. \n 3, Introduced gauden_free, this fixed some minor memory leaks. \n 4, gauden_init accept an argument precompute to specify whether the distance is pre-computed or not.\n 5, Added license. \n 6, Fixed dox-doc. * * * Revision 1.5.4.7 2006/01/16 19:45:59 arthchan2003 * Change the gaussian density dumping routine to a function. * * Revision 1.5.4.6 2005/10/09 19:51:05 arthchan2003 * Followed Dave's changed in the trunk. * * Revision 1.5.4.5 2005/09/25 18:54:20 arthchan2003 * Added a flag to turn on and off precomputation. * * Revision 1.6 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.5.4.4 2005/09/07 23:29:07 arthchan2003 * Added FIXME warning. * * Revision 1.5.4.3 2005/09/07 23:25:10 arthchan2003 * 1, Behavior changes of cont_mgau, instead of remove Gaussian with zero variance vector before flooring, now remove Gaussian with zero mean and variance before flooring. Notice that this is not yet synchronize with ms_mgau. 2, Added warning message in multi-stream gaussian distribution. * * Revision 1.5.4.2 2005/08/03 18:53:44 dhdfu * Add memory deallocation functions. Also move all the initialization * of ms_mgau_model_t into ms_mgau_init (duh!), which entails removing it * from decode_anytopo and friends. * * Revision 1.5.4.1 2005/07/20 19:39:01 arthchan2003 * Added licences in ms_* series of code. * * Revision 1.5 2005/06/21 18:55:09 arthchan2003 * 1, Add comments to describe this modules, 2, Fixed doxygen documentation. 3, Added $ keyword. * * Revision 1.3 2005/03/30 01:22:47 archan * Fixed mistakes in last updates. Add * * * 20-Dec-96 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University. * Changed gauden_param_read to use the new libio/bio_fread functions. * * 26-Sep-96 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University. * Added gauden_mean_reload() for application of MLLR; and correspondingly * made gauden_param_read allocate memory for parameter only if not * already allocated. * * 09-Sep-96 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University. * Interleaved two density computations for speed improvement. * * 19-Aug-96 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University. * Added compute_dist_all special case for improving speed. * * 26-Jan-96 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University. * Added check for underflow and floor insertion in gauden_dist. * * 20-Jan-96 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University. * Added active argument to gauden_dist_norm and gauden_dist_norm_global, * and made the latter a static function. * * 07-Nov-95 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University. * Initial version created. * Very liberally borrowed/adapted from Eric's S3 trainer implementation. */ /* System headers. */ #include #include #include #include /* SphinxBase headers. */ #include #include #include /* Local headesr. */ #include "ms_gauden.h" #define GAUDEN_PARAM_VERSION "1.0" #ifndef M_PI #define M_PI 3.1415926535897932385e0 #endif #define WORST_DIST (int32)(0x80000000) void gauden_dump(const gauden_t * g) { int32 c; for (c = 0; c < g->n_mgau; c++) gauden_dump_ind(g, c); } void gauden_dump_ind(const gauden_t * g, int senidx) { int32 f, d, i; for (f = 0; f < g->n_feat; f++) { E_INFO("Codebook %d, Feature %d (%dx%d):\n", senidx, f, g->n_density, g->featlen[f]); for (d = 0; d < g->n_density; d++) { printf("m[%3d]", d); for (i = 0; i < g->featlen[f]; i++) printf(" %7.4f", MFCC2FLOAT(g->mean[senidx][f][d][i])); printf("\n"); } printf("\n"); for (d = 0; d < g->n_density; d++) { printf("v[%3d]", d); for (i = 0; i < g->featlen[f]; i++) printf(" %d", (int)g->var[senidx][f][d][i]); printf("\n"); } printf("\n"); for (d = 0; d < g->n_density; d++) printf("d[%3d] %d\n", d, (int)g->det[senidx][f][d]); } fflush(stderr); } static int32 gauden_param_read(float32 ***** out_param, /* Alloc space iff *out_param == NULL */ int32 * out_n_mgau, int32 * out_n_feat, int32 * out_n_density, int32 ** out_veclen, const char *file_name) { char tmp; FILE *fp; int32 i, j, k, l, n, blk; int32 n_mgau; int32 n_feat; int32 n_density; int32 *veclen; int32 byteswap, chksum_present; float32 ****out; float32 *buf; char **argname, **argval; uint32 chksum; E_INFO("Reading mixture gaussian parameter: %s\n", file_name); if ((fp = fopen(file_name, "rb")) == NULL) E_FATAL_SYSTEM("Failed to open file '%s' for reading", file_name); /* Read header, including argument-value info and 32-bit byteorder magic */ if (bio_readhdr(fp, &argname, &argval, &byteswap) < 0) E_FATAL("Failed to read header from file '%s'\n", file_name); /* Parse argument-value list */ chksum_present = 0; for (i = 0; argname[i]; i++) { if (strcmp(argname[i], "version") == 0) { if (strcmp(argval[i], GAUDEN_PARAM_VERSION) != 0) E_WARN("Version mismatch(%s): %s, expecting %s\n", file_name, argval[i], GAUDEN_PARAM_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; /* #Codebooks */ if (bio_fread(&n_mgau, sizeof(int32), 1, fp, byteswap, &chksum) != 1) E_FATAL("fread(%s) (#codebooks) failed\n", file_name); *out_n_mgau = n_mgau; /* #Features/codebook */ if (bio_fread(&n_feat, sizeof(int32), 1, fp, byteswap, &chksum) != 1) E_FATAL("fread(%s) (#features) failed\n", file_name); *out_n_feat = n_feat; /* #Gaussian densities/feature in each codebook */ if (bio_fread(&n_density, sizeof(int32), 1, fp, byteswap, &chksum) != 1) E_FATAL("fread(%s) (#density/codebook) failed\n", file_name); *out_n_density = n_density; /* #Dimensions in each feature stream */ veclen = ckd_calloc(n_feat, sizeof(uint32)); *out_veclen = veclen; if (bio_fread(veclen, sizeof(int32), n_feat, fp, byteswap, &chksum) != n_feat) E_FATAL("fread(%s) (feature-lengths) failed\n", file_name); /* blk = total vector length of all feature streams */ for (i = 0, blk = 0; i < n_feat; i++) blk += veclen[i]; /* #Floats to follow; for the ENTIRE SET of CODEBOOKS */ if (bio_fread(&n, sizeof(int32), 1, fp, byteswap, &chksum) != 1) E_FATAL("fread(%s) (total #floats) failed\n", file_name); if (n != n_mgau * n_density * blk) { E_FATAL ("%s: #mfcc_ts(%d) doesn't match dimensions: %d x %d x %d\n", file_name, n, n_mgau, n_density, blk); } /* Allocate memory for mixture gaussian densities if not already allocated */ if (!(*out_param)) { out = (float32 ****) ckd_calloc_3d(n_mgau, n_feat, n_density, sizeof(float32 *)); buf = (float32 *) ckd_calloc(n, sizeof(float32)); for (i = 0, l = 0; i < n_mgau; i++) { for (j = 0; j < n_feat; j++) { for (k = 0; k < n_density; k++) { out[i][j][k] = &buf[l]; l += veclen[j]; } } } } else { out = (float32 ****) *out_param; buf = out[0][0][0]; } /* Read mixture gaussian densities data */ if (bio_fread(buf, sizeof(float32), n, fp, byteswap, &chksum) != n) E_FATAL("fread(%s) (densitydata) failed\n", file_name); if (chksum_present) bio_verify_chksum(fp, byteswap, chksum); if (fread(&tmp, 1, 1, fp) == 1) E_FATAL("More data than expected in %s\n", file_name); fclose(fp); *out_param = out; E_INFO("%d codebook, %d feature, size: \n", n_mgau, n_feat); for (i = 0; i < n_feat; i++) E_INFO(" %dx%d\n", n_density, veclen[i]); return 0; } static void gauden_param_free(mfcc_t **** p) { ckd_free(p[0][0][0]); ckd_free_3d(p); } /* * Some of the gaussian density computation can be carried out in advance: * log(determinant) calculation, * 1/(2*var) in the exponent, * NOTE; The density computation is performed in log domain. */ static int32 gauden_dist_precompute(gauden_t * g, logmath_t *lmath, float32 varfloor) { int32 i, m, f, d, flen; mfcc_t *meanp; mfcc_t *varp; mfcc_t *detp; int32 floored; floored = 0; /* Allocate space for determinants */ g->det = ckd_calloc_3d(g->n_mgau, g->n_feat, g->n_density, sizeof(***g->det)); for (m = 0; m < g->n_mgau; m++) { for (f = 0; f < g->n_feat; f++) { flen = g->featlen[f]; /* Determinants for all variance vectors in g->[m][f] */ for (d = 0, detp = g->det[m][f]; d < g->n_density; d++, detp++) { *detp = 0; for (i = 0, varp = g->var[m][f][d], meanp = g->mean[m][f][d]; i < flen; i++, varp++, meanp++) { float32 *fvarp = (float32 *)varp; #ifdef FIXED_POINT float32 *fmp = (float32 *)meanp; *meanp = FLOAT2MFCC(*fmp); #endif if (*fvarp < varfloor) { *fvarp = varfloor; ++floored; } *detp += (mfcc_t)logmath_log(lmath, 1.0 / sqrt(*fvarp * 2.0 * M_PI)); /* Precompute this part of the exponential */ *varp = (mfcc_t)logmath_ln_to_log(lmath, (1.0 / (*fvarp * 2.0))); } } } } E_INFO("%d variance values floored\n", floored); return 0; } gauden_t * gauden_init(char const *meanfile, char const *varfile, float32 varfloor, logmath_t *lmath) { int32 i, m, f, d, *flen; float32 ****fgau; gauden_t *g; assert(meanfile != NULL); assert(varfile != NULL); assert(varfloor > 0.0); g = (gauden_t *) ckd_calloc(1, sizeof(gauden_t)); g->lmath = lmath; /* Read means and (diagonal) variances for all mixture gaussians */ fgau = NULL; gauden_param_read(&fgau, &g->n_mgau, &g->n_feat, &g->n_density, &g->featlen, meanfile); g->mean = (mfcc_t ****)fgau; fgau = NULL; gauden_param_read(&fgau, &m, &f, &d, &flen, varfile); g->var = (mfcc_t ****)fgau; /* Verify mean and variance parameter dimensions */ if ((m != g->n_mgau) || (f != g->n_feat) || (d != g->n_density)) E_FATAL ("Mixture-gaussians dimensions for means and variances differ\n"); for (i = 0; i < g->n_feat; i++) if (g->featlen[i] != flen[i]) E_FATAL("Feature lengths for means and variances differ\n"); ckd_free(flen); /* Floor variances and precompute variance determinants */ gauden_dist_precompute(g, lmath, varfloor); return g; } void gauden_free(gauden_t * g) { if (g == NULL) return; if (g->mean) gauden_param_free(g->mean); if (g->var) gauden_param_free(g->var); if (g->det) ckd_free_3d(g->det); if (g->featlen) ckd_free(g->featlen); ckd_free(g); } /* See compute_dist below */ static int32 compute_dist_all(gauden_dist_t * out_dist, mfcc_t* obs, int32 featlen, mfcc_t ** mean, mfcc_t ** var, mfcc_t * det, int32 n_density) { int32 i, d; for (d = 0; d < n_density; ++d) { mfcc_t *m; mfcc_t *v; mfcc_t dval; m = mean[d]; v = var[d]; dval = det[d]; for (i = 0; i < featlen; i++) { mfcc_t diff; #ifdef FIXED_POINT /* Have to check for underflows here. */ mfcc_t pdval = dval; diff = obs[i] - m[i]; dval -= MFCCMUL(MFCCMUL(diff, diff), v[i]); if (dval > pdval) { dval = WORST_SCORE; break; } #else diff = obs[i] - m[i]; /* The compiler really likes this to be a single * expression, for whatever reason. */ dval -= diff * diff * v[i]; #endif } out_dist[d].dist = dval; out_dist[d].id = d; } return 0; } /* * Compute the top-N closest gaussians from the chosen set (mgau,feat) * for the given input observation vector. */ static int32 compute_dist(gauden_dist_t * out_dist, int32 n_top, mfcc_t * obs, int32 featlen, mfcc_t ** mean, mfcc_t ** var, mfcc_t * det, int32 n_density) { int32 i, j, d; gauden_dist_t *worst; /* Special case optimization when n_density <= n_top */ if (n_top >= n_density) return (compute_dist_all (out_dist, obs, featlen, mean, var, det, n_density)); for (i = 0; i < n_top; i++) out_dist[i].dist = WORST_DIST; worst = &(out_dist[n_top - 1]); for (d = 0; d < n_density; d++) { mfcc_t *m; mfcc_t *v; mfcc_t dval; m = mean[d]; v = var[d]; dval = det[d]; for (i = 0; (i < featlen) && (dval >= worst->dist); i++) { mfcc_t diff; #ifdef FIXED_POINT /* Have to check for underflows here. */ mfcc_t pdval = dval; diff = obs[i] - m[i]; dval -= MFCCMUL(MFCCMUL(diff, diff), v[i]); if (dval > pdval) { dval = WORST_SCORE; break; } #else diff = obs[i] - m[i]; /* The compiler really likes this to be a single * expression, for whatever reason. */ dval -= diff * diff * v[i]; #endif } if ((i < featlen) || (dval < worst->dist)) /* Codeword d worse than worst */ continue; /* Codeword d at least as good as worst so far; insert in the ordered list */ for (i = 0; (i < n_top) && (dval < out_dist[i].dist); i++); assert(i < n_top); for (j = n_top - 1; j > i; --j) out_dist[j] = out_dist[j - 1]; out_dist[i].dist = dval; out_dist[i].id = d; } return 0; } /* * Compute distances of the input observation from the top N codewords in the given * codebook (g->{mean,var}[mgau]). The input observation, obs, includes vectors for * all features in the codebook. */ int32 gauden_dist(gauden_t * g, int mgau, int32 n_top, mfcc_t** obs, gauden_dist_t ** out_dist) { int32 f; assert((n_top > 0) && (n_top <= g->n_density)); for (f = 0; f < g->n_feat; f++) { compute_dist(out_dist[f], n_top, obs[f], g->featlen[f], g->mean[mgau][f], g->var[mgau][f], g->det[mgau][f], g->n_density); E_DEBUG(3, ("Top CW(%d,%d) = %d %d\n", mgau, f, out_dist[f][0].id, (int)out_dist[f][0].dist >> SENSCR_SHIFT)); } return 0; } int32 gauden_mllr_transform(gauden_t *g, ps_mllr_t *mllr, cmd_ln_t *config) { int32 i, m, f, d, *flen; float32 ****fgau; /* Free data if already here */ if (g->mean) gauden_param_free(g->mean); if (g->var) gauden_param_free(g->var); if (g->det) ckd_free_3d(g->det); if (g->featlen) ckd_free(g->featlen); g->mean = NULL; g->var = NULL; g->det = NULL; g->featlen = NULL; /* Reload means and variances (un-precomputed). */ fgau = NULL; gauden_param_read(&fgau, &g->n_mgau, &g->n_feat, &g->n_density, &g->featlen, cmd_ln_str_r(config, "-mean")); g->mean = (mfcc_t ****)fgau; fgau = NULL; gauden_param_read(&fgau, &m, &f, &d, &flen, cmd_ln_str_r(config, "-var")); g->var = (mfcc_t ****)fgau; /* Verify mean and variance parameter dimensions */ if ((m != g->n_mgau) || (f != g->n_feat) || (d != g->n_density)) E_FATAL ("Mixture-gaussians dimensions for means and variances differ\n"); for (i = 0; i < g->n_feat; i++) if (g->featlen[i] != flen[i]) E_FATAL("Feature lengths for means and variances differ\n"); ckd_free(flen); /* Transform codebook for each stream s */ for (i = 0; i < g->n_mgau; ++i) { for (f = 0; f < g->n_feat; ++f) { float64 *temp; temp = (float64 *) ckd_calloc(g->featlen[f], sizeof(float64)); /* Transform each density d in selected codebook */ for (d = 0; d < g->n_density; d++) { int l; for (l = 0; l < g->featlen[f]; l++) { temp[l] = 0.0; for (m = 0; m < g->featlen[f]; m++) { /* FIXME: For now, only one class, hence the zeros below. */ temp[l] += mllr->A[f][0][l][m] * g->mean[i][f][d][m]; } temp[l] += mllr->b[f][0][l]; } for (l = 0; l < g->featlen[f]; l++) { g->mean[i][f][d][l] = (float32) temp[l]; g->var[i][f][d][l] *= mllr->h[f][0][l]; } } ckd_free(temp); } } /* Re-precompute (if we aren't adapting variances this isn't * actually necessary...) */ gauden_dist_precompute(g, g->lmath, cmd_ln_float32_r(config, "-varfloor")); return 0; } pocketsphinx-5prealpha/src/libpocketsphinx/ptm_mgau.h0000664000175000017500000000770512504317100020360 00000000000000/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* ==================================================================== * Copyright (c) 1999-2010 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 ptm_mgau.h Fast phonetically-tied mixture evaluation. * @author David Huggins-Daines */ #ifndef __PTM_MGAU_H__ #define __PTM_MGAU_H__ /* SphinxBase headesr. */ #include #include #include /* Local headers. */ #include "acmod.h" #include "hmm.h" #include "bin_mdef.h" #include "ms_gauden.h" typedef struct ptm_mgau_s ptm_mgau_t; typedef struct ptm_topn_s { int32 cw; /**< Codeword index. */ int32 score; /**< Score. */ } ptm_topn_t; typedef struct ptm_fast_eval_s { ptm_topn_t ***topn; /**< Top-N for each codebook (mgau x feature x topn) */ bitvec_t *mgau_active; /**< Set of active codebooks */ } ptm_fast_eval_t; struct ptm_mgau_s { ps_mgau_t base; /**< base structure. */ cmd_ln_t *config; /**< Configuration parameters */ gauden_t *g; /**< Set of Gaussians. */ int32 n_sen; /**< Number of senones. */ uint8 *sen2cb; /**< Senone to codebook mapping. */ uint8 ***mixw; /**< Mixture weight distributions by feature, codeword, senone */ mmio_file_t *sendump_mmap;/* Memory map for mixw (or NULL if not mmap) */ uint8 *mixw_cb; /* Mixture weight codebook, if any (assume it contains 16 values) */ int16 max_topn; int16 ds_ratio; ptm_fast_eval_t *hist; /**< Fast evaluation info for past frames. */ ptm_fast_eval_t *f; /**< Fast eval info for current frame. */ int n_fast_hist; /**< Number of past frames tracked. */ /* Log-add table for compressed values. */ logmath_t *lmath_8b; /* Log-add object for reloading means/variances. */ logmath_t *lmath; }; ps_mgau_t *ptm_mgau_init(acmod_t *acmod, bin_mdef_t *mdef); void ptm_mgau_free(ps_mgau_t *s); int ptm_mgau_frame_eval(ps_mgau_t *s, int16 *senone_scores, uint8 *senone_active, int32 n_senone_active, mfcc_t **featbuf, int32 frame, int32 compallsen); int ptm_mgau_mllr_transform(ps_mgau_t *s, ps_mllr_t *mllr); #endif /* __PTM_MGAU_H__ */ pocketsphinx-5prealpha/src/libpocketsphinx/ngram_search_fwdtree.c0000664000175000017500000016321312504317100022710 00000000000000/* -*- 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_search_fwdtree.c Lexicon tree search. */ /* System headers. */ #include #include /* SphinxBase headers. */ #include #include #include /* Local headers. */ #include "ngram_search_fwdtree.h" #include "phone_loop_search.h" /* Turn this on to dump channels for debugging */ #define __CHAN_DUMP__ 0 #if __CHAN_DUMP__ #define chan_v_eval(chan) hmm_dump_vit_eval(&(chan)->hmm, stderr) #else #define chan_v_eval(chan) hmm_vit_eval(&(chan)->hmm) #endif /* * Allocate that part of the search channel tree structure that is independent of the * LM in use. */ static void init_search_tree(ngram_search_t *ngs) { int32 w, ndiph, i, n_words, n_ci; dict_t *dict = ps_search_dict(ngs); bitvec_t *dimap; n_words = ps_search_n_words(ngs); ngs->homophone_set = ckd_calloc(n_words, sizeof(*ngs->homophone_set)); /* Find #single phone words, and #unique first diphones (#root channels) in dict. */ ndiph = 0; ngs->n_1ph_words = 0; n_ci = bin_mdef_n_ciphone(ps_search_acmod(ngs)->mdef); /* Allocate a bitvector with flags for each possible diphone. */ dimap = bitvec_alloc(n_ci * n_ci); for (w = 0; w < n_words; w++) { if (!dict_real_word(dict, w)) continue; if (dict_is_single_phone(dict, w)) ++ngs->n_1ph_words; else { int ph0, ph1; ph0 = dict_first_phone(dict, w); ph1 = dict_second_phone(dict, w); /* Increment ndiph the first time we see a diphone. */ if (bitvec_is_clear(dimap, ph0 * n_ci + ph1)) { bitvec_set(dimap, ph0 * n_ci + ph1); ++ndiph; } } } E_INFO("%d unique initial diphones\n", ndiph); bitvec_free(dimap); /* Add remaining dict words (, , , noise words) to single-phone words */ ngs->n_1ph_words += dict_num_fillers(dict) + 2; ngs->n_root_chan_alloc = ndiph + 1; /* Verify that these are all *actually* single-phone words, * otherwise really bad things will happen to us. */ for (w = 0; w < n_words; ++w) { if (dict_real_word(dict, w)) continue; if (!dict_is_single_phone(dict, w)) { E_WARN("Filler word %d = %s has more than one phone, ignoring it.\n", w, dict_wordstr(dict, w)); --ngs->n_1ph_words; } } /* Allocate and initialize root channels */ ngs->root_chan = ckd_calloc(ngs->n_root_chan_alloc, sizeof(*ngs->root_chan)); for (i = 0; i < ngs->n_root_chan_alloc; i++) { hmm_init(ngs->hmmctx, &ngs->root_chan[i].hmm, TRUE, -1, -1); ngs->root_chan[i].penult_phn_wid = -1; ngs->root_chan[i].next = NULL; } /* Permanently allocate and initialize channels for single-phone * words (1/word). */ ngs->rhmm_1ph = ckd_calloc(ngs->n_1ph_words, sizeof(*ngs->rhmm_1ph)); i = 0; for (w = 0; w < n_words; w++) { if (!dict_is_single_phone(dict, w)) continue; /* Use SIL as right context for these. */ ngs->rhmm_1ph[i].ci2phone = bin_mdef_silphone(ps_search_acmod(ngs)->mdef); ngs->rhmm_1ph[i].ciphone = dict_first_phone(dict, w); hmm_init(ngs->hmmctx, &ngs->rhmm_1ph[i].hmm, TRUE, bin_mdef_pid2ssid(ps_search_acmod(ngs)->mdef, ngs->rhmm_1ph[i].ciphone), bin_mdef_pid2tmatid(ps_search_acmod(ngs)->mdef, ngs->rhmm_1ph[i].ciphone)); ngs->rhmm_1ph[i].next = NULL; ngs->word_chan[w] = (chan_t *) &(ngs->rhmm_1ph[i]); i++; } ngs->single_phone_wid = ckd_calloc(ngs->n_1ph_words, sizeof(*ngs->single_phone_wid)); E_INFO("%d root, %d non-root channels, %d single-phone words\n", ngs->n_root_chan, ngs->n_nonroot_chan, ngs->n_1ph_words); } /* * One-time initialization of internal channels in HMM tree. */ static void init_nonroot_chan(ngram_search_t *ngs, chan_t * hmm, int32 ph, int32 ci, int32 tmatid) { hmm->next = NULL; hmm->alt = NULL; hmm->info.penult_phn_wid = -1; hmm->ciphone = ci; hmm_init(ngs->hmmctx, &hmm->hmm, FALSE, ph, tmatid); } /* * Allocate and initialize search channel-tree structure. * At this point, all the root-channels have been allocated and partly initialized * (as per init_search_tree()), and channels for all the single-phone words have been * allocated and initialized. None of the interior channels of search-trees have * been allocated. * This routine may be called on every utterance, after reinit_search_tree() clears * the search tree created for the previous utterance. Meant for reconfiguring the * search tree to suit the currently active LM. */ static void create_search_tree(ngram_search_t *ngs) { chan_t *hmm; root_chan_t *rhmm; int32 w, i, j, p, ph, tmatid; int32 n_words; dict_t *dict = ps_search_dict(ngs); dict2pid_t *d2p = ps_search_dict2pid(ngs); n_words = ps_search_n_words(ngs); E_INFO("Creating search tree\n"); for (w = 0; w < n_words; w++) ngs->homophone_set[w] = -1; E_INFO("before: %d root, %d non-root channels, %d single-phone words\n", ngs->n_root_chan, ngs->n_nonroot_chan, ngs->n_1ph_words); ngs->n_1ph_LMwords = 0; ngs->n_root_chan = 0; ngs->n_nonroot_chan = 0; for (w = 0; w < n_words; w++) { int ciphone, ci2phone; /* Ignore dictionary words not in LM */ if (!ngram_model_set_known_wid(ngs->lmset, dict_basewid(dict, w))) continue; /* Handle single-phone words individually; not in channel tree */ if (dict_is_single_phone(dict, w)) { E_DEBUG(1,("single_phone_wid[%d] = %s\n", ngs->n_1ph_LMwords, dict_wordstr(dict, w))); ngs->single_phone_wid[ngs->n_1ph_LMwords++] = w; continue; } /* Find a root channel matching the initial diphone, or * allocate one if not found. */ ciphone = dict_first_phone(dict, w); ci2phone = dict_second_phone(dict, w); for (i = 0; i < ngs->n_root_chan; ++i) { if (ngs->root_chan[i].ciphone == ciphone && ngs->root_chan[i].ci2phone == ci2phone) break; } if (i == ngs->n_root_chan) { rhmm = &(ngs->root_chan[ngs->n_root_chan]); rhmm->hmm.tmatid = bin_mdef_pid2tmatid(ps_search_acmod(ngs)->mdef, ciphone); /* Begin with CI phone? Not sure this makes a difference... */ hmm_mpx_ssid(&rhmm->hmm, 0) = bin_mdef_pid2ssid(ps_search_acmod(ngs)->mdef, ciphone); rhmm->ciphone = ciphone; rhmm->ci2phone = ci2phone; ngs->n_root_chan++; } else rhmm = &(ngs->root_chan[i]); E_DEBUG(3,("word %s rhmm %d\n", dict_wordstr(dict, w), rhmm - ngs->root_chan)); /* Now, rhmm = root channel for w. Go on to remaining phones */ if (dict_pronlen(dict, w) == 2) { /* Next phone is the last; not kept in tree; add w to penult_phn_wid set */ if ((j = rhmm->penult_phn_wid) < 0) rhmm->penult_phn_wid = w; else { for (; ngs->homophone_set[j] >= 0; j = ngs->homophone_set[j]); ngs->homophone_set[j] = w; } } else { /* Add remaining phones, except the last, to tree */ ph = dict2pid_internal(d2p, w, 1); tmatid = bin_mdef_pid2tmatid(ps_search_acmod(ngs)->mdef, dict_pron(dict, w, 1)); hmm = rhmm->next; if (hmm == NULL) { rhmm->next = hmm = listelem_malloc(ngs->chan_alloc); init_nonroot_chan(ngs, hmm, ph, dict_pron(dict, w, 1), tmatid); ngs->n_nonroot_chan++; } else { chan_t *prev_hmm = NULL; for (; hmm && (hmm_nonmpx_ssid(&hmm->hmm) != ph); hmm = hmm->alt) prev_hmm = hmm; if (!hmm) { /* thanks, rkm! */ prev_hmm->alt = hmm = listelem_malloc(ngs->chan_alloc); init_nonroot_chan(ngs, hmm, ph, dict_pron(dict, w, 1), tmatid); ngs->n_nonroot_chan++; } } E_DEBUG(3,("phone %s = %d\n", bin_mdef_ciphone_str(ps_search_acmod(ngs)->mdef, dict_second_phone(dict, w)), ph)); for (p = 2; p < dict_pronlen(dict, w) - 1; p++) { ph = dict2pid_internal(d2p, w, p); tmatid = bin_mdef_pid2tmatid(ps_search_acmod(ngs)->mdef, dict_pron(dict, w, p)); if (!hmm->next) { hmm->next = listelem_malloc(ngs->chan_alloc); hmm = hmm->next; init_nonroot_chan(ngs, hmm, ph, dict_pron(dict, w, p), tmatid); ngs->n_nonroot_chan++; } else { chan_t *prev_hmm = NULL; for (hmm = hmm->next; hmm && (hmm_nonmpx_ssid(&hmm->hmm) != ph); hmm = hmm->alt) prev_hmm = hmm; if (!hmm) { /* thanks, rkm! */ prev_hmm->alt = hmm = listelem_malloc(ngs->chan_alloc); init_nonroot_chan(ngs, hmm, ph, dict_pron(dict, w, p), tmatid); ngs->n_nonroot_chan++; } } E_DEBUG(3,("phone %s = %d\n", bin_mdef_ciphone_str(ps_search_acmod(ngs)->mdef, dict_pron(dict, w, p)), ph)); } /* All but last phone of w in tree; add w to hmm->info.penult_phn_wid set */ if ((j = hmm->info.penult_phn_wid) < 0) hmm->info.penult_phn_wid = w; else { for (; ngs->homophone_set[j] >= 0; j = ngs->homophone_set[j]); ngs->homophone_set[j] = w; } } } ngs->n_1ph_words = ngs->n_1ph_LMwords; /* Add filler words to the array of 1ph words. */ for (w = 0; w < n_words; ++w) { /* Skip anything that doesn't actually have a single phone. */ if (!dict_is_single_phone(dict, w)) continue; /* Also skip "real words" and things that are in the LM. */ if (dict_real_word(dict, w)) continue; if (ngram_model_set_known_wid(ngs->lmset, dict_basewid(dict, w))) continue; E_DEBUG(1,("single_phone_wid[%d] = %s\n", ngs->n_1ph_words, dict_wordstr(dict, w))); ngs->single_phone_wid[ngs->n_1ph_words++] = w; } if (ngs->n_nonroot_chan >= ngs->max_nonroot_chan) { /* Give some room for channels for new words added dynamically at run time */ ngs->max_nonroot_chan = ngs->n_nonroot_chan + 128; E_INFO("after: max nonroot chan increased to %d\n", ngs->max_nonroot_chan); /* Free old active channel list array if any and allocate new one */ if (ngs->active_chan_list) ckd_free_2d(ngs->active_chan_list); ngs->active_chan_list = ckd_calloc_2d(2, ngs->max_nonroot_chan, sizeof(**ngs->active_chan_list)); } if (!ngs->n_root_chan) E_ERROR("No word from the language model has pronunciation in the dictionary\n"); E_INFO("after: %d root, %d non-root channels, %d single-phone words\n", ngs->n_root_chan, ngs->n_nonroot_chan, ngs->n_1ph_words); } static void reinit_search_subtree(ngram_search_t *ngs, chan_t * hmm) { chan_t *child, *sibling; /* First free all children under hmm */ for (child = hmm->next; child; child = sibling) { sibling = child->alt; reinit_search_subtree(ngs, child); } /* Now free hmm */ hmm_deinit(&hmm->hmm); listelem_free(ngs->chan_alloc, hmm); } /* * Delete search tree by freeing all interior channels within search tree and * restoring root channel state to the init state (i.e., just after init_search_tree()). */ static void reinit_search_tree(ngram_search_t *ngs) { int32 i; chan_t *hmm, *sibling; for (i = 0; i < ngs->n_root_chan; i++) { hmm = ngs->root_chan[i].next; while (hmm) { sibling = hmm->alt; reinit_search_subtree(ngs, hmm); hmm = sibling; } ngs->root_chan[i].penult_phn_wid = -1; ngs->root_chan[i].next = NULL; } ngs->n_nonroot_chan = 0; } void ngram_fwdtree_init(ngram_search_t *ngs) { /* Allocate bestbp_rc, lastphn_cand, last_ltrans */ ngs->bestbp_rc = ckd_calloc(bin_mdef_n_ciphone(ps_search_acmod(ngs)->mdef), sizeof(*ngs->bestbp_rc)); ngs->lastphn_cand = ckd_calloc(ps_search_n_words(ngs), sizeof(*ngs->lastphn_cand)); init_search_tree(ngs); create_search_tree(ngs); } static void deinit_search_tree(ngram_search_t *ngs) { int i, w, n_words; n_words = ps_search_n_words(ngs); for (i = 0; i < ngs->n_root_chan_alloc; i++) { hmm_deinit(&ngs->root_chan[i].hmm); } if (ngs->rhmm_1ph) { for (i = w = 0; w < n_words; ++w) { if (!dict_is_single_phone(ps_search_dict(ngs), w)) continue; hmm_deinit(&ngs->rhmm_1ph[i].hmm); ++i; } ckd_free(ngs->rhmm_1ph); ngs->rhmm_1ph = NULL; } ngs->n_root_chan = 0; ngs->n_root_chan_alloc = 0; ckd_free(ngs->root_chan); ngs->root_chan = NULL; ckd_free(ngs->single_phone_wid); ngs->single_phone_wid = NULL; ckd_free(ngs->homophone_set); ngs->homophone_set = NULL; } void ngram_fwdtree_deinit(ngram_search_t *ngs) { double n_speech = (double)ngs->n_tot_frame / cmd_ln_int32_r(ps_search_config(ngs), "-frate"); E_INFO("TOTAL fwdtree %.2f CPU %.3f xRT\n", ngs->fwdtree_perf.t_tot_cpu, ngs->fwdtree_perf.t_tot_cpu / n_speech); E_INFO("TOTAL fwdtree %.2f wall %.3f xRT\n", ngs->fwdtree_perf.t_tot_elapsed, ngs->fwdtree_perf.t_tot_elapsed / n_speech); /* Reset non-root channels. */ reinit_search_tree(ngs); /* Free the search tree. */ deinit_search_tree(ngs); /* Free other stuff. */ ngs->max_nonroot_chan = 0; ckd_free_2d(ngs->active_chan_list); ngs->active_chan_list = NULL; ckd_free(ngs->cand_sf); ngs->cand_sf = NULL; ckd_free(ngs->bestbp_rc); ngs->bestbp_rc = NULL; ckd_free(ngs->lastphn_cand); ngs->lastphn_cand = NULL; } int ngram_fwdtree_reinit(ngram_search_t *ngs) { /* Reset non-root channels. */ reinit_search_tree(ngs); /* Free the search tree. */ deinit_search_tree(ngs); /* Reallocate things that depend on the number of words. */ ckd_free(ngs->lastphn_cand); ngs->lastphn_cand = ckd_calloc(ps_search_n_words(ngs), sizeof(*ngs->lastphn_cand)); ckd_free(ngs->word_chan); ngs->word_chan = ckd_calloc(ps_search_n_words(ngs), sizeof(*ngs->word_chan)); /* Rebuild the search tree. */ init_search_tree(ngs); create_search_tree(ngs); return 0; } void ngram_fwdtree_start(ngram_search_t *ngs) { ps_search_t *base = (ps_search_t *)ngs; int32 i, w, n_words; root_chan_t *rhmm; n_words = ps_search_n_words(ngs); /* Reset utterance statistics. */ memset(&ngs->st, 0, sizeof(ngs->st)); ptmr_reset(&ngs->fwdtree_perf); ptmr_start(&ngs->fwdtree_perf); /* Reset backpointer table. */ ngs->bpidx = 0; ngs->bss_head = 0; /* Reset word lattice. */ for (i = 0; i < n_words; ++i) ngs->word_lat_idx[i] = NO_BP; /* Reset active HMM and word lists. */ ngs->n_active_chan[0] = ngs->n_active_chan[1] = 0; ngs->n_active_word[0] = ngs->n_active_word[1] = 0; /* Reset scores. */ ngs->best_score = 0; ngs->renormalized = 0; /* Reset other stuff. */ for (i = 0; i < n_words; i++) ngs->last_ltrans[i].sf = -1; ngs->n_frame = 0; /* Clear the hypothesis string. */ ckd_free(base->hyp_str); base->hyp_str = NULL; /* Reset the permanently allocated single-phone words, since they * may have junk left over in them from FWDFLAT. */ for (i = 0; i < ngs->n_1ph_words; i++) { w = ngs->single_phone_wid[i]; rhmm = (root_chan_t *) ngs->word_chan[w]; hmm_clear(&rhmm->hmm); } /* Start search with ; word_chan[] is permanently allocated */ rhmm = (root_chan_t *) ngs->word_chan[dict_startwid(ps_search_dict(ngs))]; hmm_clear(&rhmm->hmm); hmm_enter(&rhmm->hmm, 0, NO_BP, 0); } /* * Mark the active senones for all senones belonging to channels that are active in the * current frame. */ static void compute_sen_active(ngram_search_t *ngs, int frame_idx) { root_chan_t *rhmm; chan_t *hmm, **acl; int32 i, w, *awl; acmod_clear_active(ps_search_acmod(ngs)); /* Flag active senones for root channels */ for (i = ngs->n_root_chan, rhmm = ngs->root_chan; i > 0; --i, rhmm++) { if (hmm_frame(&rhmm->hmm) == frame_idx) acmod_activate_hmm(ps_search_acmod(ngs), &rhmm->hmm); } /* Flag active senones for nonroot channels in HMM tree */ i = ngs->n_active_chan[frame_idx & 0x1]; acl = ngs->active_chan_list[frame_idx & 0x1]; for (hmm = *(acl++); i > 0; --i, hmm = *(acl++)) { acmod_activate_hmm(ps_search_acmod(ngs), &hmm->hmm); } /* Flag active senones for individual word channels */ i = ngs->n_active_word[frame_idx & 0x1]; awl = ngs->active_word_list[frame_idx & 0x1]; for (w = *(awl++); i > 0; --i, w = *(awl++)) { for (hmm = ngs->word_chan[w]; hmm; hmm = hmm->next) { acmod_activate_hmm(ps_search_acmod(ngs), &hmm->hmm); } } for (i = 0; i < ngs->n_1ph_words; i++) { w = ngs->single_phone_wid[i]; rhmm = (root_chan_t *) ngs->word_chan[w]; if (hmm_frame(&rhmm->hmm) == frame_idx) acmod_activate_hmm(ps_search_acmod(ngs), &rhmm->hmm); } } static void renormalize_scores(ngram_search_t *ngs, int frame_idx, int32 norm) { root_chan_t *rhmm; chan_t *hmm, **acl; int32 i, w, *awl; /* Renormalize root channels */ for (i = ngs->n_root_chan, rhmm = ngs->root_chan; i > 0; --i, rhmm++) { if (hmm_frame(&rhmm->hmm) == frame_idx) { hmm_normalize(&rhmm->hmm, norm); } } /* Renormalize nonroot channels in HMM tree */ i = ngs->n_active_chan[frame_idx & 0x1]; acl = ngs->active_chan_list[frame_idx & 0x1]; for (hmm = *(acl++); i > 0; --i, hmm = *(acl++)) { hmm_normalize(&hmm->hmm, norm); } /* Renormalize individual word channels */ i = ngs->n_active_word[frame_idx & 0x1]; awl = ngs->active_word_list[frame_idx & 0x1]; for (w = *(awl++); i > 0; --i, w = *(awl++)) { for (hmm = ngs->word_chan[w]; hmm; hmm = hmm->next) { hmm_normalize(&hmm->hmm, norm); } } for (i = 0; i < ngs->n_1ph_words; i++) { w = ngs->single_phone_wid[i]; rhmm = (root_chan_t *) ngs->word_chan[w]; if (hmm_frame(&rhmm->hmm) == frame_idx) { hmm_normalize(&rhmm->hmm, norm); } } ngs->renormalized = TRUE; } static int32 eval_root_chan(ngram_search_t *ngs, int frame_idx) { root_chan_t *rhmm; int32 i, bestscore; bestscore = WORST_SCORE; for (i = ngs->n_root_chan, rhmm = ngs->root_chan; i > 0; --i, rhmm++) { if (hmm_frame(&rhmm->hmm) == frame_idx) { int32 score = chan_v_eval(rhmm); if (score BETTER_THAN bestscore) bestscore = score; ++ngs->st.n_root_chan_eval; } } return (bestscore); } static int32 eval_nonroot_chan(ngram_search_t *ngs, int frame_idx) { chan_t *hmm, **acl; int32 i, bestscore; i = ngs->n_active_chan[frame_idx & 0x1]; acl = ngs->active_chan_list[frame_idx & 0x1]; bestscore = WORST_SCORE; ngs->st.n_nonroot_chan_eval += i; for (hmm = *(acl++); i > 0; --i, hmm = *(acl++)) { int32 score = chan_v_eval(hmm); assert(hmm_frame(&hmm->hmm) == frame_idx); if (score BETTER_THAN bestscore) bestscore = score; } return bestscore; } static int32 eval_word_chan(ngram_search_t *ngs, int frame_idx) { root_chan_t *rhmm; chan_t *hmm; int32 i, w, bestscore, *awl, j, k; k = 0; bestscore = WORST_SCORE; awl = ngs->active_word_list[frame_idx & 0x1]; i = ngs->n_active_word[frame_idx & 0x1]; for (w = *(awl++); i > 0; --i, w = *(awl++)) { assert(bitvec_is_set(ngs->word_active, w)); bitvec_clear(ngs->word_active, w); assert(ngs->word_chan[w] != NULL); for (hmm = ngs->word_chan[w]; hmm; hmm = hmm->next) { int32 score; assert(hmm_frame(&hmm->hmm) == frame_idx); score = chan_v_eval(hmm); /*printf("eval word chan %d score %d\n", w, score); */ if (score BETTER_THAN bestscore) bestscore = score; k++; } } /* Similarly for statically allocated single-phone words */ j = 0; for (i = 0; i < ngs->n_1ph_words; i++) { int32 score; w = ngs->single_phone_wid[i]; rhmm = (root_chan_t *) ngs->word_chan[w]; if (hmm_frame(&rhmm->hmm) < frame_idx) continue; score = chan_v_eval(rhmm); /* printf("eval 1ph word chan %d score %d\n", w, score); */ if (score BETTER_THAN bestscore && w != ps_search_finish_wid(ngs)) bestscore = score; j++; } ngs->st.n_last_chan_eval += k + j; ngs->st.n_nonroot_chan_eval += k + j; ngs->st.n_word_lastchan_eval += ngs->n_active_word[frame_idx & 0x1] + j; return bestscore; } static int32 evaluate_channels(ngram_search_t *ngs, int16 const *senone_scores, int frame_idx) { int32 bs; hmm_context_set_senscore(ngs->hmmctx, senone_scores); ngs->best_score = eval_root_chan(ngs, frame_idx); if ((bs = eval_nonroot_chan(ngs, frame_idx)) BETTER_THAN ngs->best_score) ngs->best_score = bs; if ((bs = eval_word_chan(ngs, frame_idx)) BETTER_THAN ngs->best_score) ngs->best_score = bs; ngs->last_phone_best_score = bs; return ngs->best_score; } /* * Prune currently active root channels for next frame. Also, perform exit * transitions out of them and activate successors. * score[] of pruned root chan set to WORST_SCORE elsewhere. */ static void prune_root_chan(ngram_search_t *ngs, int frame_idx) { root_chan_t *rhmm; chan_t *hmm; int32 i, nf, w; int32 thresh, newphone_thresh, lastphn_thresh, newphone_score; chan_t **nacl; /* next active list */ lastphn_cand_t *candp; phone_loop_search_t *pls; nf = frame_idx + 1; thresh = ngs->best_score + ngs->dynamic_beam; newphone_thresh = ngs->best_score + ngs->pbeam; lastphn_thresh = ngs->best_score + ngs->lpbeam; nacl = ngs->active_chan_list[nf & 0x1]; pls = (phone_loop_search_t *)ps_search_lookahead(ngs); for (i = 0, rhmm = ngs->root_chan; i < ngs->n_root_chan; i++, rhmm++) { E_DEBUG(3,("Root channel %d frame %d score %d thresh %d\n", i, hmm_frame(&rhmm->hmm), hmm_bestscore(&rhmm->hmm), thresh)); /* First check if this channel was active in current frame */ if (hmm_frame(&rhmm->hmm) < frame_idx) continue; if (hmm_bestscore(&rhmm->hmm) BETTER_THAN thresh) { hmm_frame(&rhmm->hmm) = nf; /* rhmm will be active in next frame */ E_DEBUG(3,("Preserving root channel %d score %d\n", i, hmm_bestscore(&rhmm->hmm))); /* transitions out of this root channel */ /* transition to all next-level channels in the HMM tree */ newphone_score = hmm_out_score(&rhmm->hmm) + ngs->pip; if (pls != NULL || newphone_score BETTER_THAN newphone_thresh) { for (hmm = rhmm->next; hmm; hmm = hmm->alt) { int32 pl_newphone_score = newphone_score + phone_loop_search_score(pls, hmm->ciphone); if (pl_newphone_score BETTER_THAN newphone_thresh) { if ((hmm_frame(&hmm->hmm) < frame_idx) || (newphone_score BETTER_THAN hmm_in_score(&hmm->hmm))) { hmm_enter(&hmm->hmm, newphone_score, hmm_out_history(&rhmm->hmm), nf); *(nacl++) = hmm; } } } } /* * Transition to last phone of all words for which this is the * penultimate phone (the last phones may need multiple right contexts). * Remember to remove the temporary newword_penalty. */ if (pls != NULL || newphone_score BETTER_THAN lastphn_thresh) { for (w = rhmm->penult_phn_wid; w >= 0; w = ngs->homophone_set[w]) { int32 pl_newphone_score = newphone_score + phone_loop_search_score (pls, dict_last_phone(ps_search_dict(ngs),w)); E_DEBUG(3,("word %s newphone_score %d\n", dict_wordstr(ps_search_dict(ngs), w), newphone_score)); if (pl_newphone_score BETTER_THAN lastphn_thresh) { candp = ngs->lastphn_cand + ngs->n_lastphn_cand; ngs->n_lastphn_cand++; candp->wid = w; candp->score = newphone_score - ngs->nwpen; candp->bp = hmm_out_history(&rhmm->hmm); } } } } } ngs->n_active_chan[nf & 0x1] = (int)(nacl - ngs->active_chan_list[nf & 0x1]); } /* * Prune currently active nonroot channels in HMM tree for next frame. Also, perform * exit transitions out of such channels and activate successors. */ static void prune_nonroot_chan(ngram_search_t *ngs, int frame_idx) { chan_t *hmm, *nexthmm; int32 nf, w, i; int32 thresh, newphone_thresh, lastphn_thresh, newphone_score; chan_t **acl, **nacl; /* active list, next active list */ lastphn_cand_t *candp; phone_loop_search_t *pls; nf = frame_idx + 1; thresh = ngs->best_score + ngs->dynamic_beam; newphone_thresh = ngs->best_score + ngs->pbeam; lastphn_thresh = ngs->best_score + ngs->lpbeam; pls = (phone_loop_search_t *)ps_search_lookahead(ngs); acl = ngs->active_chan_list[frame_idx & 0x1]; /* currently active HMMs in tree */ nacl = ngs->active_chan_list[nf & 0x1] + ngs->n_active_chan[nf & 0x1]; for (i = ngs->n_active_chan[frame_idx & 0x1], hmm = *(acl++); i > 0; --i, hmm = *(acl++)) { assert(hmm_frame(&hmm->hmm) >= frame_idx); if (hmm_bestscore(&hmm->hmm) BETTER_THAN thresh) { /* retain this channel in next frame */ if (hmm_frame(&hmm->hmm) != nf) { hmm_frame(&hmm->hmm) = nf; *(nacl++) = hmm; } /* transition to all next-level channel in the HMM tree */ newphone_score = hmm_out_score(&hmm->hmm) + ngs->pip; if (pls != NULL || newphone_score BETTER_THAN newphone_thresh) { for (nexthmm = hmm->next; nexthmm; nexthmm = nexthmm->alt) { int32 pl_newphone_score = newphone_score + phone_loop_search_score(pls, nexthmm->ciphone); if ((pl_newphone_score BETTER_THAN newphone_thresh) && ((hmm_frame(&nexthmm->hmm) < frame_idx) || (newphone_score BETTER_THAN hmm_in_score(&nexthmm->hmm)))) { if (hmm_frame(&nexthmm->hmm) != nf) { /* Keep this HMM on the active list */ *(nacl++) = nexthmm; } hmm_enter(&nexthmm->hmm, newphone_score, hmm_out_history(&hmm->hmm), nf); } } } /* * Transition to last phone of all words for which this is the * penultimate phone (the last phones may need multiple right contexts). * Remember to remove the temporary newword_penalty. */ if (pls != NULL || newphone_score BETTER_THAN lastphn_thresh) { for (w = hmm->info.penult_phn_wid; w >= 0; w = ngs->homophone_set[w]) { int32 pl_newphone_score = newphone_score + phone_loop_search_score (pls, dict_last_phone(ps_search_dict(ngs),w)); if (pl_newphone_score BETTER_THAN lastphn_thresh) { candp = ngs->lastphn_cand + ngs->n_lastphn_cand; ngs->n_lastphn_cand++; candp->wid = w; candp->score = newphone_score - ngs->nwpen; candp->bp = hmm_out_history(&hmm->hmm); } } } } else if (hmm_frame(&hmm->hmm) != nf) { hmm_clear(&hmm->hmm); } } ngs->n_active_chan[nf & 0x1] = (int)(nacl - ngs->active_chan_list[nf & 0x1]); } /* * Execute the transition into the last phone for all candidates words emerging from * the HMM tree. Attach LM scores to such transitions. * (Executed after pruning root and non-root, but before pruning word-chan.) */ static void last_phone_transition(ngram_search_t *ngs, int frame_idx) { int32 i, j, k, nf, bp, bpend, w; lastphn_cand_t *candp; int32 *nawl; int32 thresh; int32 bestscore, dscr; chan_t *hmm; bptbl_t *bpe; int32 n_cand_sf = 0; nf = frame_idx + 1; nawl = ngs->active_word_list[nf & 0x1]; ngs->st.n_lastphn_cand_utt += ngs->n_lastphn_cand; /* For each candidate word (entering its last phone) */ /* If best LM score and bp for candidate known use it, else sort cands by startfrm */ for (i = 0, candp = ngs->lastphn_cand; i < ngs->n_lastphn_cand; i++, candp++) { int32 start_score; /* This can happen if recognition fails. */ if (candp->bp == -1) continue; /* Backpointer entry for it. */ bpe = &(ngs->bp_table[candp->bp]); /* Subtract starting score for candidate, leave it with only word score */ start_score = ngram_search_exit_score (ngs, bpe, dict_first_phone(ps_search_dict(ngs), candp->wid)); assert(start_score BETTER_THAN WORST_SCORE); candp->score -= start_score; /* * If this candidate not occurred in an earlier frame, prepare for finding * best transition score into last phone; sort by start frame. */ /* i.e. if we don't have an entry in last_ltrans for this * , then create one */ if (ngs->last_ltrans[candp->wid].sf != bpe->frame + 1) { /* Look for an entry in cand_sf matching the backpointer * for this candidate. */ for (j = 0; j < n_cand_sf; j++) { if (ngs->cand_sf[j].bp_ef == bpe->frame) break; } /* Oh, we found one, so chain onto it. */ if (j < n_cand_sf) candp->next = ngs->cand_sf[j].cand; else { /* Nope, let's make a new one, allocating cand_sf if necessary. */ if (n_cand_sf >= ngs->cand_sf_alloc) { if (ngs->cand_sf_alloc == 0) { ngs->cand_sf = ckd_calloc(CAND_SF_ALLOCSIZE, sizeof(*ngs->cand_sf)); ngs->cand_sf_alloc = CAND_SF_ALLOCSIZE; } else { ngs->cand_sf_alloc += CAND_SF_ALLOCSIZE; ngs->cand_sf = ckd_realloc(ngs->cand_sf, ngs->cand_sf_alloc * sizeof(*ngs->cand_sf)); E_INFO("cand_sf[] increased to %d entries\n", ngs->cand_sf_alloc); } } /* Use the newly created cand_sf. */ j = n_cand_sf++; candp->next = -1; /* End of the chain. */ ngs->cand_sf[j].bp_ef = bpe->frame; } /* Update it to point to this candidate. */ ngs->cand_sf[j].cand = i; ngs->last_ltrans[candp->wid].dscr = WORST_SCORE; ngs->last_ltrans[candp->wid].sf = bpe->frame + 1; } } /* Compute best LM score and bp for new cands entered in the sorted lists above */ for (i = 0; i < n_cand_sf; i++) { /* For the i-th unique end frame... */ bp = ngs->bp_table_idx[ngs->cand_sf[i].bp_ef]; bpend = ngs->bp_table_idx[ngs->cand_sf[i].bp_ef + 1]; for (bpe = &(ngs->bp_table[bp]); bp < bpend; bp++, bpe++) { if (!bpe->valid) continue; /* For each candidate at the start frame find bp->cand transition-score */ for (j = ngs->cand_sf[i].cand; j >= 0; j = candp->next) { int32 n_used; candp = &(ngs->lastphn_cand[j]); dscr = ngram_search_exit_score (ngs, bpe, dict_first_phone(ps_search_dict(ngs), candp->wid)); if (dscr BETTER_THAN WORST_SCORE) { assert(!dict_filler_word(ps_search_dict(ngs), candp->wid)); dscr += ngram_tg_score(ngs->lmset, dict_basewid(ps_search_dict(ngs), candp->wid), bpe->real_wid, bpe->prev_real_wid, &n_used)>>SENSCR_SHIFT; } if (dscr BETTER_THAN ngs->last_ltrans[candp->wid].dscr) { ngs->last_ltrans[candp->wid].dscr = dscr; ngs->last_ltrans[candp->wid].bp = bp; } } } } /* Update best transitions for all candidates; also update best lastphone score */ bestscore = ngs->last_phone_best_score; for (i = 0, candp = ngs->lastphn_cand; i < ngs->n_lastphn_cand; i++, candp++) { candp->score += ngs->last_ltrans[candp->wid].dscr; candp->bp = ngs->last_ltrans[candp->wid].bp; if (candp->score BETTER_THAN bestscore) bestscore = candp->score; } ngs->last_phone_best_score = bestscore; /* At this pt, we know the best entry score (with LM component) for all candidates */ thresh = bestscore + ngs->lponlybeam; for (i = ngs->n_lastphn_cand, candp = ngs->lastphn_cand; i > 0; --i, candp++) { if (candp->score BETTER_THAN thresh) { w = candp->wid; ngram_search_alloc_all_rc(ngs, w); k = 0; for (hmm = ngs->word_chan[w]; hmm; hmm = hmm->next) { if ((hmm_frame(&hmm->hmm) < frame_idx) || (candp->score BETTER_THAN hmm_in_score(&hmm->hmm))) { assert(hmm_frame(&hmm->hmm) != nf); hmm_enter(&hmm->hmm, candp->score, candp->bp, nf); k++; } } if (k > 0) { assert(bitvec_is_clear(ngs->word_active, w)); assert(!dict_is_single_phone(ps_search_dict(ngs), w)); *(nawl++) = w; bitvec_set(ngs->word_active, w); } } } ngs->n_active_word[nf & 0x1] = (int)(nawl - ngs->active_word_list[nf & 0x1]); } /* * Prune currently active word channels for next frame. Also, perform exit * transitions out of such channels and active successors. */ static void prune_word_chan(ngram_search_t *ngs, int frame_idx) { root_chan_t *rhmm; chan_t *hmm, *thmm; chan_t **phmmp; /* previous HMM-pointer */ int32 nf, w, i, k; int32 newword_thresh, lastphn_thresh; int32 *awl, *nawl; nf = frame_idx + 1; newword_thresh = ngs->last_phone_best_score + ngs->wbeam; lastphn_thresh = ngs->last_phone_best_score + ngs->lponlybeam; awl = ngs->active_word_list[frame_idx & 0x1]; nawl = ngs->active_word_list[nf & 0x1] + ngs->n_active_word[nf & 0x1]; /* Dynamically allocated last channels of multi-phone words */ for (i = ngs->n_active_word[frame_idx & 0x1], w = *(awl++); i > 0; --i, w = *(awl++)) { k = 0; phmmp = &(ngs->word_chan[w]); for (hmm = ngs->word_chan[w]; hmm; hmm = thmm) { assert(hmm_frame(&hmm->hmm) >= frame_idx); thmm = hmm->next; if (hmm_bestscore(&hmm->hmm) BETTER_THAN lastphn_thresh) { /* retain this channel in next frame */ hmm_frame(&hmm->hmm) = nf; k++; phmmp = &(hmm->next); /* Could if ((! skip_alt_frm) || (frame_idx & 0x1)) the following */ if (hmm_out_score(&hmm->hmm) BETTER_THAN newword_thresh) { /* can exit channel and recognize word */ ngram_search_save_bp(ngs, frame_idx, w, hmm_out_score(&hmm->hmm), hmm_out_history(&hmm->hmm), hmm->info.rc_id); } } else if (hmm_frame(&hmm->hmm) == nf) { phmmp = &(hmm->next); } else { hmm_deinit(&hmm->hmm); listelem_free(ngs->chan_alloc, hmm); *phmmp = thmm; } } if ((k > 0) && (bitvec_is_clear(ngs->word_active, w))) { assert(!dict_is_single_phone(ps_search_dict(ngs), w)); *(nawl++) = w; bitvec_set(ngs->word_active, w); } } ngs->n_active_word[nf & 0x1] = (int)(nawl - ngs->active_word_list[nf & 0x1]); /* * Prune permanently allocated single-phone channels. * NOTES: score[] of pruned channels set to WORST_SCORE elsewhere. */ for (i = 0; i < ngs->n_1ph_words; i++) { w = ngs->single_phone_wid[i]; rhmm = (root_chan_t *) ngs->word_chan[w]; E_DEBUG(3,("Single phone word %s frame %d score %d thresh %d outscore %d nwthresh %d\n", dict_wordstr(ps_search_dict(ngs),w), hmm_frame(&rhmm->hmm), hmm_bestscore(&rhmm->hmm), lastphn_thresh, hmm_out_score(&rhmm->hmm), newword_thresh)); if (hmm_frame(&rhmm->hmm) < frame_idx) continue; if (hmm_bestscore(&rhmm->hmm) BETTER_THAN lastphn_thresh) { hmm_frame(&rhmm->hmm) = nf; /* Could if ((! skip_alt_frm) || (frame_idx & 0x1)) the following */ if (hmm_out_score(&rhmm->hmm) BETTER_THAN newword_thresh) { E_DEBUG(4,("Exiting single phone word %s with %d > %d, %d\n", dict_wordstr(ps_search_dict(ngs),w), hmm_out_score(&rhmm->hmm), lastphn_thresh, newword_thresh)); ngram_search_save_bp(ngs, frame_idx, w, hmm_out_score(&rhmm->hmm), hmm_out_history(&rhmm->hmm), 0); } } } } static void prune_channels(ngram_search_t *ngs, int frame_idx) { /* Clear last phone candidate list. */ ngs->n_lastphn_cand = 0; /* Set the dynamic beam based on maxhmmpf here. */ ngs->dynamic_beam = ngs->beam; if (ngs->maxhmmpf != -1 && ngs->st.n_root_chan_eval + ngs->st.n_nonroot_chan_eval > ngs->maxhmmpf) { /* Build a histogram to approximately prune them. */ int32 bins[256], bw, nhmms, i; root_chan_t *rhmm; chan_t **acl, *hmm; /* Bins go from zero (best score) to edge of beam. */ bw = -ngs->beam / 256; memset(bins, 0, sizeof(bins)); /* For each active root channel. */ for (i = 0, rhmm = ngs->root_chan; i < ngs->n_root_chan; i++, rhmm++) { int32 b; /* Put it in a bin according to its bestscore. */ b = (ngs->best_score - hmm_bestscore(&rhmm->hmm)) / bw; if (b >= 256) b = 255; ++bins[b]; } /* For each active non-root channel. */ acl = ngs->active_chan_list[frame_idx & 0x1]; /* currently active HMMs in tree */ for (i = ngs->n_active_chan[frame_idx & 0x1], hmm = *(acl++); i > 0; --i, hmm = *(acl++)) { int32 b; /* Put it in a bin according to its bestscore. */ b = (ngs->best_score - hmm_bestscore(&hmm->hmm)) / bw; if (b >= 256) b = 255; ++bins[b]; } /* Walk down the bins to find the new beam. */ for (i = nhmms = 0; i < 256; ++i) { nhmms += bins[i]; if (nhmms > ngs->maxhmmpf) break; } ngs->dynamic_beam = -(i * bw); } prune_root_chan(ngs, frame_idx); prune_nonroot_chan(ngs, frame_idx); last_phone_transition(ngs, frame_idx); prune_word_chan(ngs, frame_idx); } /* * Limit the number of word exits in each frame to maxwpf. And also limit the number of filler * words to 1. */ static void bptable_maxwpf(ngram_search_t *ngs, int frame_idx) { int32 bp, n; int32 bestscr, worstscr; bptbl_t *bpe, *bestbpe, *worstbpe; /* Don't prune if no pruing. */ if (ngs->maxwpf == -1 || ngs->maxwpf == ps_search_n_words(ngs)) return; /* Allow only one filler word exit (the best) per frame */ bestscr = (int32) 0x80000000; bestbpe = NULL; n = 0; for (bp = ngs->bp_table_idx[frame_idx]; bp < ngs->bpidx; bp++) { bpe = &(ngs->bp_table[bp]); if (dict_filler_word(ps_search_dict(ngs), bpe->wid)) { if (bpe->score BETTER_THAN bestscr) { bestscr = bpe->score; bestbpe = bpe; } bpe->valid = FALSE; n++; /* No. of filler words */ } } /* Restore bestbpe to valid state */ if (bestbpe != NULL) { bestbpe->valid = TRUE; --n; } /* Allow up to maxwpf best entries to survive; mark the remaining with valid = 0 */ n = (ngs->bpidx - ngs->bp_table_idx[frame_idx]) - n; /* No. of entries after limiting fillers */ for (; n > ngs->maxwpf; --n) { /* Find worst BPTable entry */ worstscr = (int32) 0x7fffffff; worstbpe = NULL; for (bp = ngs->bp_table_idx[frame_idx]; (bp < ngs->bpidx); bp++) { bpe = &(ngs->bp_table[bp]); if (bpe->valid && (bpe->score WORSE_THAN worstscr)) { worstscr = bpe->score; worstbpe = bpe; } } /* FIXME: Don't panic! */ if (worstbpe == NULL) E_FATAL("PANIC: No worst BPtable entry remaining\n"); worstbpe->valid = FALSE; } } static void word_transition(ngram_search_t *ngs, int frame_idx) { int32 i, k, bp, w, nf; int32 rc; int32 thresh, newscore, pl_newscore; bptbl_t *bpe; root_chan_t *rhmm; struct bestbp_rc_s *bestbp_rc_ptr; phone_loop_search_t *pls; dict_t *dict = ps_search_dict(ngs); dict2pid_t *d2p = ps_search_dict2pid(ngs); /* * Transition to start of new word instances (HMM tree roots); but only if words * other than finished here. * But, first, find the best starting score for each possible right context phone. */ for (i = bin_mdef_n_ciphone(ps_search_acmod(ngs)->mdef) - 1; i >= 0; --i) ngs->bestbp_rc[i].score = WORST_SCORE; k = 0; pls = (phone_loop_search_t *)ps_search_lookahead(ngs); /* Ugh, this is complicated. Scan all word exits for this frame * (they have already been created by prune_word_chan()). */ for (bp = ngs->bp_table_idx[frame_idx]; bp < ngs->bpidx; bp++) { bpe = &(ngs->bp_table[bp]); ngs->word_lat_idx[bpe->wid] = NO_BP; if (bpe->wid == ps_search_finish_wid(ngs)) continue; k++; /* DICT2PID */ /* Array of HMM scores corresponding to all the possible right * context expansions of the final phone. It's likely that a * lot of these are going to be missing, actually. */ if (bpe->last2_phone == -1) { /* implies s_idx == -1 */ /* No right context expansion. */ for (rc = 0; rc < bin_mdef_n_ciphone(ps_search_acmod(ngs)->mdef); ++rc) { if (bpe->score BETTER_THAN ngs->bestbp_rc[rc].score) { E_DEBUG(4,("bestbp_rc[0] = %d lc %d\n", bpe->score, bpe->last_phone)); ngs->bestbp_rc[rc].score = bpe->score; ngs->bestbp_rc[rc].path = bp; ngs->bestbp_rc[rc].lc = bpe->last_phone; } } } else { xwdssid_t *rssid = dict2pid_rssid(d2p, bpe->last_phone, bpe->last2_phone); int32 *rcss = &(ngs->bscore_stack[bpe->s_idx]); for (rc = 0; rc < bin_mdef_n_ciphone(ps_search_acmod(ngs)->mdef); ++rc) { if (rcss[rssid->cimap[rc]] BETTER_THAN ngs->bestbp_rc[rc].score) { E_DEBUG(4,("bestbp_rc[%d] = %d lc %d\n", rc, rcss[rssid->cimap[rc]], bpe->last_phone)); ngs->bestbp_rc[rc].score = rcss[rssid->cimap[rc]]; ngs->bestbp_rc[rc].path = bp; ngs->bestbp_rc[rc].lc = bpe->last_phone; } } } } if (k == 0) return; nf = frame_idx + 1; thresh = ngs->best_score + ngs->dynamic_beam; /* * Hypothesize successors to words finished in this frame. * Main dictionary, multi-phone words transition to HMM-trees roots. */ for (i = ngs->n_root_chan, rhmm = ngs->root_chan; i > 0; --i, rhmm++) { bestbp_rc_ptr = &(ngs->bestbp_rc[rhmm->ciphone]); newscore = bestbp_rc_ptr->score + ngs->nwpen + ngs->pip; pl_newscore = newscore + phone_loop_search_score(pls, rhmm->ciphone); if (pl_newscore BETTER_THAN thresh) { if ((hmm_frame(&rhmm->hmm) < frame_idx) || (newscore BETTER_THAN hmm_in_score(&rhmm->hmm))) { hmm_enter(&rhmm->hmm, newscore, bestbp_rc_ptr->path, nf); /* DICT2PID: Another place where mpx ssids are entered. */ /* Look up the ssid to use when entering this mpx triphone. */ hmm_mpx_ssid(&rhmm->hmm, 0) = dict2pid_ldiph_lc(d2p, rhmm->ciphone, rhmm->ci2phone, bestbp_rc_ptr->lc); assert(hmm_mpx_ssid(&rhmm->hmm, 0) != BAD_SSID); } } } /* * Single phone words; no right context for these. Cannot use bestbp_rc as * LM scores have to be included. First find best transition to these words. */ for (i = 0; i < ngs->n_1ph_LMwords; i++) { w = ngs->single_phone_wid[i]; ngs->last_ltrans[w].dscr = (int32) 0x80000000; } for (bp = ngs->bp_table_idx[frame_idx]; bp < ngs->bpidx; bp++) { bpe = &(ngs->bp_table[bp]); if (!bpe->valid) continue; for (i = 0; i < ngs->n_1ph_LMwords; i++) { int32 n_used; w = ngs->single_phone_wid[i]; newscore = ngram_search_exit_score (ngs, bpe, dict_first_phone(dict, w)); E_DEBUG(4, ("initial newscore for %s: %d\n", dict_wordstr(dict, w), newscore)); if (newscore != WORST_SCORE) newscore += ngram_tg_score(ngs->lmset, dict_basewid(dict, w), bpe->real_wid, bpe->prev_real_wid, &n_used)>>SENSCR_SHIFT; /* FIXME: Not sure how WORST_SCORE could be better, but it * apparently happens. */ if (newscore BETTER_THAN ngs->last_ltrans[w].dscr) { ngs->last_ltrans[w].dscr = newscore; ngs->last_ltrans[w].bp = bp; } } } /* Now transition to in-LM single phone words */ for (i = 0; i < ngs->n_1ph_LMwords; i++) { w = ngs->single_phone_wid[i]; /* Never transition into the start word (for one thing, it is a non-event in the language model.) */ if (w == dict_startwid(ps_search_dict(ngs))) continue; rhmm = (root_chan_t *) ngs->word_chan[w]; newscore = ngs->last_ltrans[w].dscr + ngs->pip; pl_newscore = newscore + phone_loop_search_score(pls, rhmm->ciphone); if (pl_newscore BETTER_THAN thresh) { bpe = ngs->bp_table + ngs->last_ltrans[w].bp; if ((hmm_frame(&rhmm->hmm) < frame_idx) || (newscore BETTER_THAN hmm_in_score(&rhmm->hmm))) { hmm_enter(&rhmm->hmm, newscore, ngs->last_ltrans[w].bp, nf); /* DICT2PID: another place where mpx ssids are entered. */ /* Look up the ssid to use when entering this mpx triphone. */ hmm_mpx_ssid(&rhmm->hmm, 0) = dict2pid_ldiph_lc(d2p, rhmm->ciphone, rhmm->ci2phone, dict_last_phone(dict, bpe->wid)); assert(hmm_mpx_ssid(&rhmm->hmm, 0) != BAD_SSID); } } } /* Remaining words: , noise words. No mpx for these! */ w = ps_search_silence_wid(ngs); rhmm = (root_chan_t *) ngs->word_chan[w]; bestbp_rc_ptr = &(ngs->bestbp_rc[ps_search_acmod(ngs)->mdef->sil]); newscore = bestbp_rc_ptr->score + ngs->silpen + ngs->pip; pl_newscore = newscore + phone_loop_search_score(pls, rhmm->ciphone); if (pl_newscore BETTER_THAN thresh) { if ((hmm_frame(&rhmm->hmm) < frame_idx) || (newscore BETTER_THAN hmm_in_score(&rhmm->hmm))) { hmm_enter(&rhmm->hmm, newscore, bestbp_rc_ptr->path, nf); } } for (w = dict_filler_start(dict); w <= dict_filler_end(dict); w++) { if (w == ps_search_silence_wid(ngs)) continue; /* Never transition into the start word (for one thing, it is a non-event in the language model.) */ if (w == dict_startwid(ps_search_dict(ngs))) continue; rhmm = (root_chan_t *) ngs->word_chan[w]; /* If this was not actually a single-phone word, rhmm will be NULL. */ if (rhmm == NULL) continue; newscore = bestbp_rc_ptr->score + ngs->fillpen + ngs->pip; pl_newscore = newscore + phone_loop_search_score(pls, rhmm->ciphone); if (pl_newscore BETTER_THAN thresh) { if ((hmm_frame(&rhmm->hmm) < frame_idx) || (newscore BETTER_THAN hmm_in_score(&rhmm->hmm))) { hmm_enter(&rhmm->hmm, newscore, bestbp_rc_ptr->path, nf); } } } } static void deactivate_channels(ngram_search_t *ngs, int frame_idx) { root_chan_t *rhmm; int i; /* Clear score[] of pruned root channels */ for (i = ngs->n_root_chan, rhmm = ngs->root_chan; i > 0; --i, rhmm++) { if (hmm_frame(&rhmm->hmm) == frame_idx) { hmm_clear(&rhmm->hmm); } } /* Clear score[] of pruned single-phone channels */ for (i = 0; i < ngs->n_1ph_words; i++) { int32 w = ngs->single_phone_wid[i]; rhmm = (root_chan_t *) ngs->word_chan[w]; if (hmm_frame(&rhmm->hmm) == frame_idx) { hmm_clear(&rhmm->hmm); } } } int ngram_fwdtree_search(ngram_search_t *ngs, int frame_idx) { int16 const *senscr; /* Activate our HMMs for the current frame if need be. */ if (!ps_search_acmod(ngs)->compallsen) compute_sen_active(ngs, frame_idx); /* Compute GMM scores for the current frame. */ if ((senscr = acmod_score(ps_search_acmod(ngs), &frame_idx)) == NULL) return 0; ngs->st.n_senone_active_utt += ps_search_acmod(ngs)->n_senone_active; /* Mark backpointer table for current frame. */ ngram_search_mark_bptable(ngs, frame_idx); /* If the best score is equal to or worse than WORST_SCORE, * recognition has failed, don't bother to keep trying. */ if (ngs->best_score == WORST_SCORE || ngs->best_score WORSE_THAN WORST_SCORE) return 0; /* Renormalize if necessary */ if (ngs->best_score + (2 * ngs->beam) WORSE_THAN WORST_SCORE) { E_INFO("Renormalizing Scores at frame %d, best score %d\n", frame_idx, ngs->best_score); renormalize_scores(ngs, frame_idx, ngs->best_score); } /* Evaluate HMMs */ evaluate_channels(ngs, senscr, frame_idx); /* Prune HMMs and do phone transitions. */ prune_channels(ngs, frame_idx); /* Do absolute pruning on word exits. */ bptable_maxwpf(ngs, frame_idx); /* Do word transitions. */ word_transition(ngs, frame_idx); /* Deactivate pruned HMMs. */ deactivate_channels(ngs, frame_idx); ++ngs->n_frame; /* Return the number of frames processed. */ return 1; } void ngram_fwdtree_finish(ngram_search_t *ngs) { int32 i, w, cf, *awl; root_chan_t *rhmm; chan_t *hmm, **acl; /* This is the number of frames processed. */ cf = ps_search_acmod(ngs)->output_frame; /* Add a mark in the backpointer table for one past the final frame. */ ngram_search_mark_bptable(ngs, cf); /* Deactivate channels lined up for the next frame */ /* First, root channels of HMM tree */ for (i = ngs->n_root_chan, rhmm = ngs->root_chan; i > 0; --i, rhmm++) { hmm_clear(&rhmm->hmm); } /* nonroot channels of HMM tree */ i = ngs->n_active_chan[cf & 0x1]; acl = ngs->active_chan_list[cf & 0x1]; for (hmm = *(acl++); i > 0; --i, hmm = *(acl++)) { hmm_clear(&hmm->hmm); } /* word channels */ i = ngs->n_active_word[cf & 0x1]; awl = ngs->active_word_list[cf & 0x1]; for (w = *(awl++); i > 0; --i, w = *(awl++)) { /* Don't accidentally free single-phone words! */ if (dict_is_single_phone(ps_search_dict(ngs), w)) continue; bitvec_clear(ngs->word_active, w); if (ngs->word_chan[w] == NULL) continue; ngram_search_free_all_rc(ngs, w); } /* * The previous search code did a postprocessing of the * backpointer table here, but we will postpone this until it is * absolutely necessary, i.e. when generating a word graph. * Likewise we don't actually have to decide what the exit word is * until somebody requests a backtrace. */ ptmr_stop(&ngs->fwdtree_perf); /* Print out some statistics. */ if (cf > 0) { double n_speech = (double)(cf + 1) / cmd_ln_int32_r(ps_search_config(ngs), "-frate"); E_INFO("%8d words recognized (%d/fr)\n", ngs->bpidx, (ngs->bpidx + (cf >> 1)) / (cf + 1)); E_INFO("%8d senones evaluated (%d/fr)\n", ngs->st.n_senone_active_utt, (ngs->st.n_senone_active_utt + (cf >> 1)) / (cf + 1)); E_INFO("%8d channels searched (%d/fr), %d 1st, %d last\n", ngs->st.n_root_chan_eval + ngs->st.n_nonroot_chan_eval, (ngs->st.n_root_chan_eval + ngs->st.n_nonroot_chan_eval) / (cf + 1), ngs->st.n_root_chan_eval, ngs->st.n_last_chan_eval); E_INFO("%8d words for which last channels evaluated (%d/fr)\n", ngs->st.n_word_lastchan_eval, ngs->st.n_word_lastchan_eval / (cf + 1)); E_INFO("%8d candidate words for entering last phone (%d/fr)\n", ngs->st.n_lastphn_cand_utt, ngs->st.n_lastphn_cand_utt / (cf + 1)); E_INFO("fwdtree %.2f CPU %.3f xRT\n", ngs->fwdtree_perf.t_cpu, ngs->fwdtree_perf.t_cpu / n_speech); E_INFO("fwdtree %.2f wall %.3f xRT\n", ngs->fwdtree_perf.t_elapsed, ngs->fwdtree_perf.t_elapsed / n_speech); } /* dump_bptable(ngs); */ } pocketsphinx-5prealpha/src/libpocketsphinx/allphone_search.c0000664000175000017500000006520712520771215021703 00000000000000/* ==================================================================== * Copyright (c) 2014 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. * * ==================================================================== * */ /* * allphone_search.c -- Search for phonetic decoding. */ #include #include #include #include #include #include #include #include #include "pocketsphinx_internal.h" #include "allphone_search.h" static ps_lattice_t * allphone_search_lattice(ps_search_t * search) { //cap return NULL; } static int allphone_search_prob(ps_search_t * search) { return 0; } static void allphone_backtrace(allphone_search_t * allphs, int32 f); static void allphone_search_seg_free(ps_seg_t * seg) { ckd_free(seg); } static void allphone_search_fill_iter(ps_seg_t *seg, phseg_t *phseg) { seg->sf = phseg->sf; seg->ef = phseg->ef; seg->ascr = phseg->score; seg->lscr = phseg->tscore; seg->word = bin_mdef_ciphone_str(ps_search_acmod(seg->search)->mdef, phseg->ci); } static ps_seg_t * allphone_search_seg_next(ps_seg_t * seg) { phseg_iter_t *itor = (phseg_iter_t *) seg; phseg_t *phseg; itor->seg = itor->seg->next; if (itor->seg == NULL) { allphone_search_seg_free(seg); return NULL; } phseg = gnode_ptr(itor->seg); allphone_search_fill_iter(seg, phseg); return seg; } static ps_segfuncs_t fsg_segfuncs = { /* seg_next */ allphone_search_seg_next, /* seg_free */ allphone_search_seg_free }; static ps_seg_t * allphone_search_seg_iter(ps_search_t * search, int32 * out_score) { allphone_search_t *allphs = (allphone_search_t *) search; phseg_iter_t *iter; allphone_backtrace(allphs, allphs->frame - 1); if (allphs->segments == NULL) return NULL; iter = ckd_calloc(1, sizeof(phseg_iter_t)); iter->base.vt = &fsg_segfuncs; iter->base.search = search; iter->seg = allphs->segments; allphone_search_fill_iter((ps_seg_t *)iter, gnode_ptr(iter->seg)); return (ps_seg_t *) iter; } static ps_searchfuncs_t allphone_funcs = { /* start: */ allphone_search_start, /* step: */ allphone_search_step, /* finish: */ allphone_search_finish, /* reinit: */ allphone_search_reinit, /* free: */ allphone_search_free, /* lattice: */ allphone_search_lattice, /* hyp: */ allphone_search_hyp, /* prob: */ allphone_search_prob, /* seg_iter: */ allphone_search_seg_iter, }; /** * Find PHMM node with same senone sequence and tmat id as the given triphone. * Return ptr to PHMM node if found, NULL otherwise. */ static phmm_t * phmm_lookup(allphone_search_t * allphs, s3pid_t pid) { phmm_t *p; bin_mdef_t *mdef; phmm_t **ci_phmm; mdef = ((ps_search_t *) allphs)->acmod->mdef; ci_phmm = allphs->ci_phmm; for (p = ci_phmm[bin_mdef_pid2ci(mdef, pid)]; p; p = p->next) { if (mdef_pid2tmatid(mdef, p->pid) == mdef_pid2tmatid(mdef, pid)) if (mdef_pid2ssid(mdef, p->pid) == mdef_pid2ssid(mdef, pid)) return p; } //not found return NULL; } static int32 phmm_link(allphone_search_t * allphs) { s3cipid_t ci, rc; phmm_t *p, *p2; int32 *rclist; int32 i, n_link; plink_t *l; bin_mdef_t *mdef; phmm_t **ci_phmm; mdef = ((ps_search_t *) allphs)->acmod->mdef; ci_phmm = allphs->ci_phmm; rclist = (int32 *) ckd_calloc(mdef->n_ciphone + 1, sizeof(int32)); /* Create successor links between PHMM nodes */ n_link = 0; for (ci = 0; ci < mdef->n_ciphone; ci++) { for (p = ci_phmm[ci]; p; p = p->next) { /* Build rclist for p */ i = 0; for (rc = 0; rc < mdef->n_ciphone; rc++) { if (bitvec_is_set(p->rc, rc)) rclist[i++] = rc; } rclist[i] = BAD_S3CIPID; /* For each rc in rclist, transition to PHMMs for rc if left context = ci */ for (i = 0; IS_S3CIPID(rclist[i]); i++) { for (p2 = ci_phmm[rclist[i]]; p2; p2 = p2->next) { if (bitvec_is_set(p2->lc, ci)) { /* transition from p to p2 */ l = (plink_t *) ckd_calloc(1, sizeof(*l)); l->phmm = p2; l->next = p->succlist; p->succlist = l; n_link++; } } } } } ckd_free(rclist); return n_link; } /** * Build net from phone HMMs */ static int phmm_build(allphone_search_t * allphs) { phmm_t *p, **pid2phmm; bin_mdef_t *mdef; int32 lrc_size; uint32 *lc, *rc; s3pid_t pid; s3cipid_t ci; s3cipid_t *filler; int n_phmm, n_link; int i, nphone; mdef = ((ps_search_t *) allphs)->acmod->mdef; allphs->ci_phmm = (phmm_t **) ckd_calloc(bin_mdef_n_ciphone(mdef), sizeof(phmm_t *)); pid2phmm = (phmm_t **) ckd_calloc(bin_mdef_n_phone(mdef), sizeof(phmm_t *)); /* For each unique ciphone/triphone entry in mdef, create a PHMM node */ n_phmm = 0; nphone = allphs->ci_only ? bin_mdef_n_ciphone(mdef) : bin_mdef_n_phone(mdef); E_INFO("Building PHMM net of %d phones\n", nphone); for (pid = 0; pid < nphone; pid++) { if ((p = phmm_lookup(allphs, pid)) == NULL) { //not found, should be created p = (phmm_t *) ckd_calloc(1, sizeof(*p)); hmm_init(allphs->hmmctx, &(p->hmm), FALSE, mdef_pid2ssid(mdef, pid), mdef->phone[pid].tmat); p->pid = pid; p->ci = bin_mdef_pid2ci(mdef, pid); p->succlist = NULL; p->next = allphs->ci_phmm[p->ci]; allphs->ci_phmm[p->ci] = p; n_phmm++; } pid2phmm[pid] = p; } /* Fill out bitvecs of each PHMM node, alloc continuous memory chunk for context bitvectors */ lrc_size = bitvec_size(bin_mdef_n_ciphone(mdef)); lc = ckd_calloc(n_phmm * 2 * lrc_size, sizeof(bitvec_t)); rc = lc + (n_phmm * lrc_size); for (ci = 0; ci < mdef->n_ciphone; ci++) { for (p = allphs->ci_phmm[ci]; p; p = p->next) { p->lc = lc; lc += lrc_size; p->rc = rc; rc += lrc_size; } } /* Fill out lc and rc bitmaps (remember to map all fillers to each other!!) */ filler = (s3cipid_t *) ckd_calloc(bin_mdef_n_ciphone(mdef) + 1, sizeof(s3cipid_t)); /* Connect fillers */ i = 0; for (ci = 0; ci < bin_mdef_n_ciphone(mdef); ci++) { p = pid2phmm[ci]; bitvec_set_all(p->lc, bin_mdef_n_ciphone(mdef)); bitvec_set_all(p->rc, bin_mdef_n_ciphone(mdef)); if (mdef->phone[ci].info.ci.filler) { filler[i++] = ci; } } filler[i] = BAD_S3CIPID; /* Loop over cdphones only if ci_only is not set */ for (pid = bin_mdef_n_ciphone(mdef); pid < nphone; pid++) { p = pid2phmm[pid]; if (mdef->phone[mdef->phone[pid].info.cd.ctx[1]].info.ci.filler) { for (i = 0; IS_S3CIPID(filler[i]); i++) bitvec_set(p->lc, filler[i]); } else bitvec_set(p->lc, mdef->phone[pid].info.cd.ctx[1]); if (mdef->phone[mdef->phone[pid].info.cd.ctx[2]].info.ci.filler) { for (i = 0; IS_S3CIPID(filler[i]); i++) bitvec_set(p->rc, filler[i]); } else bitvec_set(p->rc, mdef->phone[pid].info.cd.ctx[2]); } ckd_free(pid2phmm); ckd_free(filler); /* Create links between PHMM nodes */ n_link = phmm_link(allphs); E_INFO("%d nodes, %d links\n", n_phmm, n_link); return 0; } static void phmm_free(allphone_search_t * allphs) { s3cipid_t ci; bin_mdef_t *mdef; if (!allphs->ci_phmm) //nothing to free return; ckd_free(allphs->ci_phmm[0]->lc); mdef = ((ps_search_t *) allphs)->acmod->mdef; for (ci = 0; ci < mdef_n_ciphone(mdef); ++ci) { phmm_t *p, *next; for (p = allphs->ci_phmm[ci]; p; p = next) { plink_t *l, *lnext; next = p->next; for (l = p->succlist; l; l = lnext) { lnext = l->next; ckd_free(l); } hmm_deinit(&(p->hmm)); ckd_free(p); } } ckd_free(allphs->ci_phmm); } /** Evaluate active PHMMs */ static int32 phmm_eval_all(allphone_search_t * allphs, const int16 * senscr) { s3cipid_t ci; phmm_t *p; int32 best; bin_mdef_t *mdef; phmm_t **ci_phmm; mdef = ((ps_search_t *) allphs)->acmod->mdef; ci_phmm = allphs->ci_phmm; best = WORST_SCORE; hmm_context_set_senscore(allphs->hmmctx, senscr); for (ci = 0; ci < mdef->n_ciphone; ci++) { for (p = ci_phmm[(unsigned) ci]; p; p = p->next) { if (hmm_frame(&(p->hmm)) == allphs->frame) { int32 score; allphs->n_hmm_eval++; score = hmm_vit_eval((hmm_t *) p); if (score > best) best = score; } } } return best; } static void phmm_exit(allphone_search_t * allphs, int32 best) { s3cipid_t ci; phmm_t *p; int32 th, nf; history_t *h; blkarray_list_t *history; bin_mdef_t *mdef; int32 curfrm; phmm_t **ci_phmm; int32 *ci2lmwid; th = best + allphs->pbeam; history = allphs->history; mdef = ps_search_acmod(allphs)->mdef; curfrm = allphs->frame; ci_phmm = allphs->ci_phmm; ci2lmwid = allphs->ci2lmwid; nf = curfrm + 1; for (ci = 0; ci < mdef->n_ciphone; ci++) { for (p = ci_phmm[(unsigned) ci]; p; p = p->next) { if (hmm_frame(&(p->hmm)) == curfrm) { if (hmm_bestscore(&(p->hmm)) >= th) { h = (history_t *) ckd_calloc(1, sizeof(*h)); h->ef = curfrm; h->phmm = p; h->hist = hmm_out_history(&(p->hmm)); h->score = hmm_out_score(&(p->hmm)); if (!allphs->lm) { h->tscore = allphs->inspen; } else { if (h->hist > 0) { int32 n_used; history_t *pred = blkarray_list_get(history, h->hist); if (pred->hist > 0) { history_t *pred_pred = blkarray_list_get(history, h->hist); h->tscore = ngram_tg_score(allphs->lm, ci2lmwid [pred_pred->phmm->ci], ci2lmwid[pred-> phmm->ci], ci2lmwid[p->ci], &n_used) >> SENSCR_SHIFT; } else { h->tscore = ngram_bg_score(allphs->lm, ci2lmwid [pred->phmm->ci], ci2lmwid[p->ci], &n_used) >> SENSCR_SHIFT; } } else { /* * This is the beginning SIL and in srch_allphone_begin() * it's inscore is set to 0. */ h->tscore = 0; } } blkarray_list_append(history, h); /* Mark PHMM active in next frame */ hmm_frame(&(p->hmm)) = nf; } else { /* Reset state scores */ hmm_clear(&(p->hmm)); } } } } } static void phmm_trans(allphone_search_t * allphs, int32 best, int32 frame_history_start) { history_t *h; phmm_t *from, *to; plink_t *l; int32 newscore, nf, curfrm; int32 *ci2lmwid; int32 hist_idx; curfrm = allphs->frame; nf = curfrm + 1; ci2lmwid = allphs->ci2lmwid; /* Transition from exited nodes to initial states of HMMs */ for (hist_idx = frame_history_start; hist_idx < blkarray_list_n_valid(allphs->history); hist_idx++) { h = blkarray_list_get(allphs->history, hist_idx); from = h->phmm; for (l = from->succlist; l; l = l->next) { int32 tscore; to = l->phmm; /* No LM, just use uniform (insertion penalty). */ if (!allphs->lm) tscore = allphs->inspen; /* If they are not in the LM, kill this * transition. */ else if (ci2lmwid[to->ci] == NGRAM_INVALID_WID) continue; else { int32 n_used; if (h->hist > 0) { history_t *pred = blkarray_list_get(allphs->history, h->hist); tscore = ngram_tg_score(allphs->lm, ci2lmwid[pred->phmm->ci], ci2lmwid[from->ci], ci2lmwid[to->ci], &n_used) >> SENSCR_SHIFT; } else { tscore = ngram_bg_score(allphs->lm, ci2lmwid[from->ci], ci2lmwid[to->ci], &n_used) >> SENSCR_SHIFT; } } newscore = h->score + tscore; if ((newscore > best + allphs->beam) && (newscore > hmm_in_score(&(to->hmm)))) { hmm_enter(&(to->hmm), newscore, hist_idx, nf); } } } } ps_search_t * allphone_search_init(const char *name, ngram_model_t * lm, cmd_ln_t * config, acmod_t * acmod, dict_t * dict, dict2pid_t * d2p) { int i; bin_mdef_t *mdef; allphone_search_t *allphs; static char *lmname = "default"; allphs = (allphone_search_t *) ckd_calloc(1, sizeof(*allphs)); ps_search_init(ps_search_base(allphs), &allphone_funcs, PS_SEARCH_TYPE_ALLPHONE, name, config, acmod, dict, d2p); mdef = acmod->mdef; allphs->hmmctx = hmm_context_init(bin_mdef_n_emit_state(mdef), acmod->tmat->tp, NULL, mdef->sseq); if (allphs->hmmctx == NULL) { ps_search_free(ps_search_base(allphs)); return NULL; } allphs->ci_only = cmd_ln_boolean_r(config, "-allphone_ci"); allphs->lw = cmd_ln_float32_r(config, "-lw"); phmm_build(allphs); if (lm) { //language model is defined allphs->lm = ngram_model_set_init(config, &lm, &lmname, NULL, 1); if (!allphs->lm) { E_ERROR ("Failed to initialize ngram model set for phoneme decoding"); allphone_search_free((ps_search_t *) allphs); return NULL; } allphs->ci2lmwid = (int32 *) ckd_calloc(mdef->n_ciphone, sizeof(*allphs->ci2lmwid)); for (i = 0; i < mdef->n_ciphone; i++) { allphs->ci2lmwid[i] = ngram_wid(allphs->lm, (char *) bin_mdef_ciphone_str(mdef, i)); /* Map filler phones to silence if not found */ if (allphs->ci2lmwid[i] == NGRAM_INVALID_WID && bin_mdef_ciphone_str(mdef, i)) allphs->ci2lmwid[i] = ngram_wid(allphs->lm, (char *) bin_mdef_ciphone_str(mdef, mdef_silphone (mdef))); } } else { E_WARN ("Failed to load language model specified in -allphone, doing unconstrained phone-loop decoding\n"); allphs->inspen = (int32) (logmath_log (acmod->lmath, cmd_ln_float32_r(config, "-pip")) * allphs->lw) >> SENSCR_SHIFT; } allphs->n_tot_frame = 0; allphs->frame = -1; allphs->segments = NULL; /* Get search pruning parameters */ allphs->beam = (int32) logmath_log(acmod->lmath, cmd_ln_float64_r(config, "-beam")) >> SENSCR_SHIFT; allphs->pbeam = (int32) logmath_log(acmod->lmath, cmd_ln_float64_r(config, "-pbeam")) >> SENSCR_SHIFT; /* LM related weights/penalties */ allphs->history = blkarray_list_init(); /* Acoustic score scale for posterior probabilities. */ allphs->ascale = 1.0 / cmd_ln_float32_r(config, "-ascale"); E_INFO("Allphone(beam: %d, pbeam: %d)\n", allphs->beam, allphs->pbeam); ptmr_init(&allphs->perf); return (ps_search_t *) allphs; } int allphone_search_reinit(ps_search_t * search, dict_t * dict, dict2pid_t * d2p) { allphone_search_t *allphs = (allphone_search_t *) search; /* Free old dict2pid, dict */ ps_search_base_reinit(search, dict, d2p); if (!allphs->lm) { E_WARN ("-lm argument missing; doing unconstrained phone-loop decoding\n"); allphs->inspen = (int32) (logmath_log (search->acmod->lmath, cmd_ln_float32_r(search->config, "-pip")) * allphs->lw) >> SENSCR_SHIFT; } return 0; } void allphone_search_free(ps_search_t * search) { allphone_search_t *allphs = (allphone_search_t *) search; double n_speech = (double)allphs->n_tot_frame / cmd_ln_int32_r(ps_search_config(allphs), "-frate"); E_INFO("TOTAL fwdflat %.2f CPU %.3f xRT\n", allphs->perf.t_tot_cpu, allphs->perf.t_tot_cpu / n_speech); E_INFO("TOTAL fwdflat %.2f wall %.3f xRT\n", allphs->perf.t_tot_elapsed, allphs->perf.t_tot_elapsed / n_speech); ps_search_base_free(search); hmm_context_free(allphs->hmmctx); phmm_free(allphs); if (allphs->lm) ngram_model_free(allphs->lm); if (allphs->ci2lmwid) ckd_free(allphs->ci2lmwid); blkarray_list_free(allphs->history); ckd_free(allphs); } int allphone_search_start(ps_search_t * search) { allphone_search_t *allphs; bin_mdef_t *mdef; s3cipid_t ci; phmm_t *p; allphs = (allphone_search_t *) search; mdef = search->acmod->mdef; /* Reset all HMMs. */ for (ci = 0; ci < bin_mdef_n_ciphone(mdef); ci++) { for (p = allphs->ci_phmm[(unsigned) ci]; p; p = p->next) { hmm_clear(&(p->hmm)); } } allphs->n_hmm_eval = 0; allphs->n_sen_eval = 0; /* Free history nodes, if any */ blkarray_list_reset(allphs->history); /* Initialize start state of the SILENCE PHMM */ allphs->frame = 0; ci = bin_mdef_silphone(mdef); if (NOT_S3CIPID(ci)) E_FATAL("Cannot find CI-phone %s\n", S3_SILENCE_CIPHONE); for (p = allphs->ci_phmm[ci]; p && (p->pid != ci); p = p->next); if (!p) E_FATAL("Cannot find HMM for %s\n", S3_SILENCE_CIPHONE); hmm_enter(&(p->hmm), 0, 0, allphs->frame); ptmr_reset(&allphs->perf); ptmr_start(&allphs->perf); return 0; } static void allphone_search_sen_active(allphone_search_t * allphs) { acmod_t *acmod; bin_mdef_t *mdef; phmm_t *p; int32 ci; acmod = ps_search_acmod(allphs); mdef = acmod->mdef; acmod_clear_active(acmod); for (ci = 0; ci < bin_mdef_n_ciphone(mdef); ci++) for (p = allphs->ci_phmm[ci]; p; p = p->next) if (hmm_frame(&(p->hmm)) == allphs->frame) acmod_activate_hmm(acmod, &(p->hmm)); } int allphone_search_step(ps_search_t * search, int frame_idx) { int32 bestscr, frame_history_start; const int16 *senscr; allphone_search_t *allphs = (allphone_search_t *) search; acmod_t *acmod = search->acmod; if (!acmod->compallsen) allphone_search_sen_active(allphs); senscr = acmod_score(acmod, &frame_idx); allphs->n_sen_eval += acmod->n_senone_active; bestscr = phmm_eval_all(allphs, senscr); frame_history_start = blkarray_list_n_valid(allphs->history); phmm_exit(allphs, bestscr); phmm_trans(allphs, bestscr, frame_history_start); allphs->frame++; return 0; } static int32 ascore(allphone_search_t * allphs, history_t * h) { int32 score = h->score; if (h->hist > 0) { history_t *pred = blkarray_list_get(allphs->history, h->hist); score -= pred->score; } return score - h->tscore; } static void allphone_clear_segments(allphone_search_t * allphs) { gnode_t *gn; for (gn = allphs->segments; gn; gn = gn->next) { ckd_free(gnode_ptr(gn)); } glist_free(allphs->segments); allphs->segments = NULL; } static void allphone_backtrace(allphone_search_t * allphs, int32 f) { int32 best, hist_idx, best_idx; int32 frm, last_frm; history_t *h; phseg_t *s; /* Clear old list */ allphone_clear_segments(allphs); frm = last_frm = f; /* Find the first history entry for the requested frame */ hist_idx = blkarray_list_n_valid(allphs->history) - 1; while (hist_idx > 0) { h = blkarray_list_get(allphs->history, hist_idx); if (h->ef <= f) { frm = last_frm = h->ef; break; } hist_idx--; } if (hist_idx < 0) return; /* Find bestscore */ best = (int32) 0x80000000; best_idx = -1; while (frm == last_frm && hist_idx > 0) { h = blkarray_list_get(allphs->history, hist_idx); frm = h->ef; if (h->score > best && frm == last_frm) { best = h->score; best_idx = hist_idx; } hist_idx--; } if (best_idx < 0) return; /* Backtrace */ while (best_idx > 0) { h = blkarray_list_get(allphs->history, best_idx); s = (phseg_t *) ckd_calloc(1, sizeof(phseg_t)); s->ci = h->phmm->ci; s->sf = (h->hist > 0) ? ((history_t *) blkarray_list_get(allphs->history, h->hist))->ef + 1 : 0; s->ef = h->ef; s->score = ascore(allphs, h); s->tscore = h->tscore; allphs->segments = glist_add_ptr(allphs->segments, s); best_idx = h->hist; } return; } int allphone_search_finish(ps_search_t * search) { allphone_search_t *allphs; int32 cf, n_hist; allphs = (allphone_search_t *) search; allphs->n_tot_frame += allphs->frame; n_hist = blkarray_list_n_valid(allphs->history); E_INFO ("%d frames, %d HMMs (%d/fr), %d senones (%d/fr), %d history entries (%d/fr)\n", allphs->frame, allphs->n_hmm_eval, (allphs->frame > 0) ? allphs->n_hmm_eval / allphs->frame : 0, allphs->n_sen_eval, (allphs->frame > 0) ? allphs->n_sen_eval / allphs->frame : 0, n_hist, (allphs->frame > 0) ? n_hist / allphs->frame : 0); /* Now backtrace. */ allphone_backtrace(allphs, allphs->frame - 1); /* Print out some statistics. */ ptmr_stop(&allphs->perf); /* This is the number of frames processed. */ cf = ps_search_acmod(allphs)->output_frame; if (cf > 0) { double n_speech = (double) (cf + 1) / cmd_ln_int32_r(ps_search_config(allphs), "-frate"); E_INFO("allphone %.2f CPU %.3f xRT\n", allphs->perf.t_cpu, allphs->perf.t_cpu / n_speech); E_INFO("allphone %.2f wall %.3f xRT\n", allphs->perf.t_elapsed, allphs->perf.t_elapsed / n_speech); } return 0; } char const * allphone_search_hyp(ps_search_t * search, int32 * out_score, int32 * out_is_final) { allphone_search_t *allphs; phseg_t *p; gnode_t *gn; const char *phone_str; bin_mdef_t *mdef; int len, hyp_idx, phone_idx; allphs = (allphone_search_t *) search; mdef = search->acmod->mdef; /* Create hypothesis */ if (search->hyp_str) ckd_free(search->hyp_str); search->hyp_str = NULL; allphone_backtrace(allphs, allphs->frame - 1); if (allphs->segments == NULL) { return NULL; } len = glist_count(allphs->segments) * 10; // maximum length of one phone with spacebar search->hyp_str = (char *) ckd_calloc(len, sizeof(*search->hyp_str)); hyp_idx = 0; for (gn = allphs->segments; gn; gn = gn->next) { p = gnode_ptr(gn); phone_str = bin_mdef_ciphone_str(mdef, p->ci); phone_idx = 0; while (phone_str[phone_idx] != '\0') search->hyp_str[hyp_idx++] = phone_str[phone_idx++]; search->hyp_str[hyp_idx++] = ' '; } search->hyp_str[--hyp_idx] = '\0'; E_INFO("Hyp: %s\n", search->hyp_str); return search->hyp_str; } pocketsphinx-5prealpha/src/libpocketsphinx/Makefile.in0000664000175000017500000006052312525147724020460 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@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/libpocketsphinx DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \ $(top_srcdir)/m4/ax_python_devel.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.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) libpocketsphinx_la_LIBADD = am_libpocketsphinx_la_OBJECTS = acmod.lo bin_mdef.lo blkarray_list.lo \ dict.lo dict2pid.lo fsg_history.lo fsg_lextree.lo \ fsg_search.lo allphone_search.lo kws_search.lo \ kws_detections.lo hmm.lo mdef.lo ms_gauden.lo ms_mgau.lo \ ms_senone.lo ngram_search.lo ngram_search_fwdtree.lo \ ngram_search_fwdflat.lo phone_loop_search.lo ps_alignment.lo \ ps_lattice.lo ps_mllr.lo ptm_mgau.lo s2_semi_mgau.lo \ state_align_search.lo tmat.lo vector.lo pocketsphinx.lo libpocketsphinx_la_OBJECTS = $(am_libpocketsphinx_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libpocketsphinx_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(AM_CFLAGS) $(CFLAGS) $(libpocketsphinx_la_LDFLAGS) \ $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libpocketsphinx_la_SOURCES) DIST_SOURCES = $(libpocketsphinx_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ 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@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GST_CFLAGS = @GST_CFLAGS@ GST_LIBS = @GST_LIBS@ GST_MAJORMINOR = @GST_MAJORMINOR@ GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@ GStreamer_CFLAGS = @GStreamer_CFLAGS@ GStreamer_LIBS = @GStreamer_LIBS@ 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@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ 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_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SPHINXBASE_CFLAGS = @SPHINXBASE_CFLAGS@ SPHINXBASE_LIBS = @SPHINXBASE_LIBS@ SPHINXBASE_SWIG = @SPHINXBASE_SWIG@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ plugindir = @plugindir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ 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@ ARCH = `uname -m | sed s/i.86/i386/`_`uname -s | tr A-Z a-z` lib_LTLIBRARIES = libpocketsphinx.la libpocketsphinx_la_LDFLAGS = -version-info 3:0:0 -lm libpocketsphinx_la_SOURCES = \ acmod.c \ bin_mdef.c \ blkarray_list.c \ dict.c \ dict2pid.c \ fsg_history.c \ fsg_lextree.c \ fsg_search.c \ allphone_search.c \ kws_search.c \ kws_detections.c \ hmm.c \ mdef.c \ ms_gauden.c \ ms_mgau.c \ ms_senone.c \ ngram_search.c \ ngram_search_fwdtree.c \ ngram_search_fwdflat.c \ phone_loop_search.c \ ps_alignment.c \ ps_lattice.c \ ps_mllr.c \ ptm_mgau.c \ s2_semi_mgau.c \ state_align_search.c \ tmat.c \ vector.c \ pocketsphinx.c noinst_HEADERS = \ pocketsphinx_internal.h \ acmod.h \ ngram_search.h \ bin_mdef.h \ blkarray_list.h \ dict.h \ dict2pid.h \ fsg_history.h \ fsg_lextree.h \ fsg_search_internal.h \ allphone_search.h \ kws_search.h \ kws_detections.h \ hmm.h \ mdef.h \ ms_gauden.h \ ms_mgau.h \ ms_senone.h \ ngram_search.h \ ngram_search_fwdtree.h \ ngram_search_fwdflat.h \ phone_loop_search.h \ ps_alignment.h \ ps_lattice_internal.h \ ptm_mgau.h \ s2_semi_mgau.h \ s3types.h \ state_align_search.h \ tied_mgau_common.h \ tmat.h \ vector.h AM_CFLAGS = \ -I$(top_srcdir)/include \ -I$(top_builddir)/include \ -DMODELDIR=\"${prefix}/share/pocketsphinx/model\" 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) --foreign src/libpocketsphinx/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/libpocketsphinx/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 $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libpocketsphinx.la: $(libpocketsphinx_la_OBJECTS) $(libpocketsphinx_la_DEPENDENCIES) $(EXTRA_libpocketsphinx_la_DEPENDENCIES) $(AM_V_CCLD)$(libpocketsphinx_la_LINK) -rpath $(libdir) $(libpocketsphinx_la_OBJECTS) $(libpocketsphinx_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/acmod.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/allphone_search.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/bin_mdef.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/blkarray_list.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dict.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dict2pid.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsg_history.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsg_lextree.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fsg_search.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hmm.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kws_detections.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kws_search.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mdef.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ms_gauden.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ms_mgau.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ms_senone.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ngram_search.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ngram_search_fwdflat.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ngram_search_fwdtree.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/phone_loop_search.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pocketsphinx.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ps_alignment.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ps_lattice.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ps_mllr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ptm_mgau.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/s2_semi_mgau.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/state_align_search.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tmat.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vector.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$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: 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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 html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am 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 TAGS all all-am check check-am clean clean-generic \ clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \ ctags-am 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 tags-am 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: pocketsphinx-5prealpha/src/libpocketsphinx/ms_senone.h0000664000175000017500000002110512504317100020523 00000000000000/* -*- 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. * * ==================================================================== * */ /* * senone.h -- Mixture density weights associated with each tied state. * * ********************************************** * CMU ARPA Speech Project * * Copyright (c) 1996 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.7 2006/02/22 17:27:39 arthchan2003 * Merged from SPHINX3_5_2_RCI_IRII_BRANCH: 1, NOT doing truncation in the multi-stream GMM computation \n. 2, Added .s3cont. to be the alias of the old multi-stream GMM computation routine \n. 3, Added license \n. 4, Fixed dox-doc. \n * * Revision 1.6.4.4 2006/01/16 19:47:05 arthchan2003 * Removed the truncation of senone probability code. * * Revision 1.6.4.3 2005/08/03 18:53:43 dhdfu * Add memory deallocation functions. Also move all the initialization * of ms_mgau_model_t into ms_mgau_init (duh!), which entails removing it * from decode_anytopo and friends. * * Revision 1.6.4.2 2005/07/20 19:39:01 arthchan2003 * Added licences in ms_* series of code. * * Revision 1.6.4.1 2005/07/05 05:47:59 arthchan2003 * Fixed dox-doc. struct level of documentation are included. * * Revision 1.6 2005/06/21 19:00:19 arthchan2003 * Add more detail comments to ms_senone.h * * Revision 1.5 2005/06/21 18:57:31 arthchan2003 * 1, Fixed doxygen documentation. 2, Added $ keyword. * * Revision 1.2 2005/06/13 04:02:56 archan * Fixed most doxygen-style documentation under libs3decoder. * * Revision 1.1.1.1 2005/03/24 15:24:00 archan * I found Evandro's suggestion is quite right after yelling at him 2 days later. So I decide to check this in again without any binaries. (I have done make distcheck. ) . Again, this is a candidate for s3.6 and I believe I need to work out 4-5 intermediate steps before I can complete the first prototype. That's why I keep local copies. * * Revision 1.4 2004/12/06 10:52:01 arthchan2003 * Enable doxygen documentation in libs3decoder * * Revision 1.3 2004/11/13 21:25:19 arthchan2003 * commit of 1, absolute CI-GMMS , 2, fast CI senone computation using svq, 3, Decrease the number of static variables, 4, fixing the random generator problem of vector_vqgen, 5, move all unused files to NOTUSED * * Revision 1.2 2004/08/31 08:43:47 arthchan2003 * Fixing _cpluscplus directive * * Revision 1.1 2004/08/09 00:17:11 arthchan2003 * Incorporating s3.0 align, at this point, there are still some small problems in align but they don't hurt. For example, the score doesn't match with s3.0 and the output will have problem if files are piped to /dev/null/. I think we can go for it. * * Revision 1.1 2003/02/14 14:40:34 cbq * Compiles. Analysis is probably hosed. * * Revision 1.1 2000/04/24 09:39:41 lenzo * s3 import. * * * 13-Dec-95 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University. * Added senone_eval_all(). * * 12-Nov-95 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University. * Created. */ #ifndef _LIBFBS_SENONE_H_ #define _LIBFBS_SENONE_H_ /* SphinxBase headers. */ #include #include #include #include /* Local headers. */ #include "ms_gauden.h" #include "bin_mdef.h" /** \file ms_senone.h * \brief (Sphinx 3.0 specific) multiple streams senones. used with ms_gauden.h * In Sphinx 3.0 family of tools, ms_senone is used to combine the Gaussian scores. * Its existence is crucial in Sphinx 3.0 because 3.0 supports both SCHMM and CDHMM. * There are optimization scheme for SCHMM (e.g. compute the top-N Gaussian) that is * applicable to SCHMM than CDHMM. This is wrapped in senone_eval_all. */ #ifdef __cplusplus extern "C" { #endif typedef uint8 senprob_t; /**< Senone logs3-probs, truncated to 8 bits */ /** * \struct senone_t * \brief 8-bit senone PDF structure. * * 8-bit senone PDF structure. Senone pdf values are normalized, floored, converted to * logs3 domain, and finally truncated to 8 bits precision to conserve memory space. */ typedef struct { senprob_t ***pdf; /**< gaussian density mixture weights, organized two possible ways depending on n_gauden: if (n_gauden > 1): pdf[sen][feat][codeword]. Not an efficient representation--memory access-wise--but evaluating the many codebooks will be more costly. if (n_gauden == 1): pdf[feat][codeword][sen]. Optimized for the shared-distribution semi-continuous case. */ logmath_t *lmath; /**< log math computation */ uint32 n_sen; /**< Number senones in this set */ uint32 n_feat; /**< Number feature streams */ uint32 n_cw; /**< Number codewords per codebook,stream */ uint32 n_gauden; /**< Number gaussian density codebooks referred to by senones */ float32 mixwfloor; /**< floor applied to each PDF entry */ uint32 *mgau; /**< senone-id -> mgau-id mapping for senones in this set */ int32 *featscr; /**< The feature score for every senone, will be initialized inside senone_eval_all */ int32 aw; /**< Inverse acoustic weight */ } senone_t; /** * Load a set of senones (mixing weights and mixture gaussian codebook mappings) from * the given files. Normalize weights for each codebook, apply the given floor, convert * PDF values to logs3 domain and quantize to 8-bits. * @return pointer to senone structure created. Caller MUST NOT change its contents. */ senone_t *senone_init (gauden_t *g, /**< In: codebooks */ char const *mixwfile, /**< In: mixing weights file */ char const *mgau_mapfile,/**< In: file specifying mapping from each senone to mixture gaussian codebook. If NULL all senones map to codebook 0 */ float32 mixwfloor, /**< In: Floor value for senone weights */ logmath_t *lmath, /**< In: log math computation */ bin_mdef_t *mdef /**< In: model definition */ ); /** Release memory allocated by senone_init. */ void senone_free(senone_t *s); /**< In: The senone_t to free */ /** * Evaluate the score for the given senone wrt to the given top N gaussian codewords. * @return senone score (in logs3 domain). */ int32 senone_eval (senone_t *s, int id, /**< In: senone for which score desired */ gauden_dist_t **dist, /**< In: top N codewords and densities for all features, to be combined into senone score. IE, dist[f][i] = i-th best for feaure f */ int n_top /**< In: Length of dist[f], for each f */ ); #ifdef __cplusplus } #endif #endif pocketsphinx-5prealpha/src/libpocketsphinx/allphone_search.h0000664000175000017500000001422512520771215021702 00000000000000/* -*- c-basic-offset:4; indent-tabs-mode: nil -*- */ /* ==================================================================== * Copyright (c) 2014 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. * * ==================================================================== * */ /* * allphone_search.h -- Search structures for phoneme decoding. */ #ifndef __ALLPHONE_SEARCH_H__ #define __ALLPHONE_SEARCH_H__ /* SphinxBase headers. */ #include #include #include #include /* Local headers. */ #include "pocketsphinx_internal.h" #include "blkarray_list.h" #include "hmm.h" /** * Models a single unique pair. * Can represent several different triphones, but all with the same parent basephone. * (NOTE: Word-position attribute of triphone is ignored.) */ typedef struct phmm_s { hmm_t hmm; /**< Base HMM structure */ s3pid_t pid; /**< Phone id (temp. during init.) */ s3cipid_t ci; /**< Parent basephone for this PHMM */ bitvec_t *lc; /**< Set (bit-vector) of left context phones seen for this PHMM */ bitvec_t *rc; /**< Set (bit-vector) of right context phones seen for this PHMM */ struct phmm_s *next; /**< Next unique PHMM for same parent basephone */ struct plink_s *succlist; /**< List of predecessor PHMM nodes */ } phmm_t; /** * List of links from a PHMM node to its successors; one link per successor. */ typedef struct plink_s { phmm_t *phmm; /**< Successor PHMM node */ struct plink_s *next; /**< Next link for parent PHMM node */ } plink_t; /** * History (paths) information at any point in allphone Viterbi search. */ typedef struct history_s { phmm_t *phmm; /**< PHMM ending this path */ int32 score; /**< Path score for this path */ int32 tscore; /**< Transition score for this path */ frame_idx_t ef; /**< End frame */ int32 hist; /**< Previous history entry */ } history_t; /** * Phone level segmentation information */ typedef struct phseg_s { s3cipid_t ci; /* CI-phone id */ frame_idx_t sf, ef; /* Start and end frame for this phone occurrence */ int32 score; /* Acoustic score for this segment of alignment */ int32 tscore; /* Transition ("LM") score for this segment */ } phseg_t; /** * Segment iterator over list of phseg */ typedef struct phseg_iter_s { ps_seg_t base; glist_t seg; } phseg_iter_t; /** * Implementation of allphone search structure. */ typedef struct allphone_search_s { ps_search_t base; hmm_context_t *hmmctx; /**< HMM context. */ ngram_model_t *lm; /**< Ngram model set */ int32 ci_only; /**< Use context-independent phones for decoding */ phmm_t **ci_phmm; /**< PHMM lists (for each CI phone) */ int32 *ci2lmwid; /**< Mapping of CI phones to LM word IDs */ int32 beam, pbeam; /**< Effective beams after applying beam_factor */ int32 lw, inspen; /**< Language weights */ frame_idx_t frame; /**< Current frame. */ float32 ascale; /**< Acoustic score scale for posterior probabilities. */ int32 n_tot_frame; /**< Total number of frames processed */ int32 n_hmm_eval; /**< Total HMMs evaluated this utt */ int32 n_sen_eval; /**< Total senones evaluated this utt */ /* Backtrace information */ blkarray_list_t *history; /**< List of history nodes allocated in each frame */ /* Hypothesis DAG */ glist_t segments; ptmr_t perf; /**< Performance counter */ } allphone_search_t; /** * Create, initialize and return a search module. */ ps_search_t *allphone_search_init(const char *name, ngram_model_t * lm, cmd_ln_t * config, acmod_t * acmod, dict_t * dict, dict2pid_t * d2p); /** * Deallocate search structure. */ void allphone_search_free(ps_search_t * search); /** * Update allphone search module. */ int allphone_search_reinit(ps_search_t * search, dict_t * dict, dict2pid_t * d2p); /** * Prepare the allphone search structure for beginning decoding of the next * utterance. */ int allphone_search_start(ps_search_t * search); /** * Step one frame forward through the Viterbi search. */ int allphone_search_step(ps_search_t * search, int frame_idx); /** * Windup and clean the allphone search structure after utterance. */ int allphone_search_finish(ps_search_t * search); /** * Get hypothesis string from the allphone search. */ char const *allphone_search_hyp(ps_search_t * search, int32 * out_score, int32 * out_is_final); #endif /* __ALLPHONE_SEARCH_H__ */ pocketsphinx-5prealpha/src/libpocketsphinx/bin_mdef.c0000664000175000017500000007011112504317100020274 00000000000000/* -*- 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: bin_mdef.c * * Description: * Binary format model definition files, with support for * heterogeneous topologies and variable-size N-phones * * Author: * David Huggins-Daines *********************************************************************/ /* System headers. */ #include #include #include /* SphinxBase headers. */ #include #include #include #include #include /* Local headers. */ #include "mdef.h" #include "bin_mdef.h" bin_mdef_t * bin_mdef_read_text(cmd_ln_t *config, const char *filename) { bin_mdef_t *bmdef; mdef_t *mdef; int i, nodes, ci_idx, lc_idx, rc_idx; int nchars; if ((mdef = mdef_init((char *) filename, TRUE)) == NULL) return NULL; /* Enforce some limits. */ if (mdef->n_sen > BAD_SENID) { E_ERROR("Number of senones exceeds limit: %d > %d\n", mdef->n_sen, BAD_SENID); mdef_free(mdef); return NULL; } if (mdef->n_sseq > BAD_SSID) { E_ERROR("Number of senone sequences exceeds limit: %d > %d\n", mdef->n_sseq, BAD_SSID); mdef_free(mdef); return NULL; } /* We use uint8 for ciphones */ if (mdef->n_ciphone > 255) { E_ERROR("Number of phones exceeds limit: %d > %d\n", mdef->n_ciphone, 255); mdef_free(mdef); return NULL; } bmdef = ckd_calloc(1, sizeof(*bmdef)); bmdef->refcnt = 1; /* Easy stuff. The mdef.c code has done the heavy lifting for us. */ bmdef->n_ciphone = mdef->n_ciphone; bmdef->n_phone = mdef->n_phone; bmdef->n_emit_state = mdef->n_emit_state; bmdef->n_ci_sen = mdef->n_ci_sen; bmdef->n_sen = mdef->n_sen; bmdef->n_tmat = mdef->n_tmat; bmdef->n_sseq = mdef->n_sseq; bmdef->sseq = mdef->sseq; bmdef->cd2cisen = mdef->cd2cisen; bmdef->sen2cimap = mdef->sen2cimap; bmdef->n_ctx = 3; /* Triphones only. */ bmdef->sil = mdef->sil; mdef->sseq = NULL; /* We are taking over this one. */ mdef->cd2cisen = NULL; /* And this one. */ mdef->sen2cimap = NULL; /* And this one. */ /* Get the phone names. If they are not sorted * ASCII-betically then we are in a world of hurt and * therefore will simply refuse to continue. */ bmdef->ciname = ckd_calloc(bmdef->n_ciphone, sizeof(*bmdef->ciname)); nchars = 0; for (i = 0; i < bmdef->n_ciphone; ++i) nchars += strlen(mdef->ciphone[i].name) + 1; bmdef->ciname[0] = ckd_calloc(nchars, 1); strcpy(bmdef->ciname[0], mdef->ciphone[0].name); for (i = 1; i < bmdef->n_ciphone; ++i) { bmdef->ciname[i] = bmdef->ciname[i - 1] + strlen(bmdef->ciname[i - 1]) + 1; strcpy(bmdef->ciname[i], mdef->ciphone[i].name); if (i > 0 && strcmp(bmdef->ciname[i - 1], bmdef->ciname[i]) > 0) { /* FIXME: there should be a solution to this, actually. */ E_ERROR("Phone names are not in sorted order, sorry."); bin_mdef_free(bmdef); return NULL; } } /* Copy over phone information. */ bmdef->phone = ckd_calloc(bmdef->n_phone, sizeof(*bmdef->phone)); for (i = 0; i < mdef->n_phone; ++i) { bmdef->phone[i].ssid = mdef->phone[i].ssid; bmdef->phone[i].tmat = mdef->phone[i].tmat; if (i < bmdef->n_ciphone) { bmdef->phone[i].info.ci.filler = mdef->ciphone[i].filler; } else { bmdef->phone[i].info.cd.wpos = mdef->phone[i].wpos; bmdef->phone[i].info.cd.ctx[0] = mdef->phone[i].ci; bmdef->phone[i].info.cd.ctx[1] = mdef->phone[i].lc; bmdef->phone[i].info.cd.ctx[2] = mdef->phone[i].rc; } } /* Walk the wpos_ci_lclist once to find the total number of * nodes and the starting locations for each level. */ nodes = lc_idx = ci_idx = rc_idx = 0; for (i = 0; i < N_WORD_POSN; ++i) { int j; for (j = 0; j < mdef->n_ciphone; ++j) { ph_lc_t *lc; for (lc = mdef->wpos_ci_lclist[i][j]; lc; lc = lc->next) { ph_rc_t *rc; for (rc = lc->rclist; rc; rc = rc->next) { ++nodes; /* RC node */ } ++nodes; /* LC node */ ++rc_idx; /* Start of RC nodes (after LC nodes) */ } ++nodes; /* CI node */ ++lc_idx; /* Start of LC nodes (after CI nodes) */ ++rc_idx; /* Start of RC nodes (after CI and LC nodes) */ } ++nodes; /* wpos node */ ++ci_idx; /* Start of CI nodes (after wpos nodes) */ ++lc_idx; /* Start of LC nodes (after CI nodes) */ ++rc_idx; /* STart of RC nodes (after wpos, CI, and LC nodes) */ } E_INFO("Allocating %d * %d bytes (%d KiB) for CD tree\n", nodes, sizeof(*bmdef->cd_tree), nodes * sizeof(*bmdef->cd_tree) / 1024); bmdef->n_cd_tree = nodes; bmdef->cd_tree = ckd_calloc(nodes, sizeof(*bmdef->cd_tree)); for (i = 0; i < N_WORD_POSN; ++i) { int j; bmdef->cd_tree[i].ctx = i; bmdef->cd_tree[i].n_down = mdef->n_ciphone; bmdef->cd_tree[i].c.down = ci_idx; #if 0 E_INFO("%d => %c (%d@%d)\n", i, (WPOS_NAME)[i], bmdef->cd_tree[i].n_down, bmdef->cd_tree[i].c.down); #endif /* Now we can build the rest of the tree. */ for (j = 0; j < mdef->n_ciphone; ++j) { ph_lc_t *lc; bmdef->cd_tree[ci_idx].ctx = j; bmdef->cd_tree[ci_idx].c.down = lc_idx; for (lc = mdef->wpos_ci_lclist[i][j]; lc; lc = lc->next) { ph_rc_t *rc; bmdef->cd_tree[lc_idx].ctx = lc->lc; bmdef->cd_tree[lc_idx].c.down = rc_idx; for (rc = lc->rclist; rc; rc = rc->next) { bmdef->cd_tree[rc_idx].ctx = rc->rc; bmdef->cd_tree[rc_idx].n_down = 0; bmdef->cd_tree[rc_idx].c.pid = rc->pid; #if 0 E_INFO("%d => %s %s %s %c (%d@%d)\n", rc_idx, bmdef->ciname[j], bmdef->ciname[lc->lc], bmdef->ciname[rc->rc], (WPOS_NAME)[i], bmdef->cd_tree[rc_idx].n_down, bmdef->cd_tree[rc_idx].c.down); #endif ++bmdef->cd_tree[lc_idx].n_down; ++rc_idx; } /* If there are no triphones here, * this is considered a leafnode, so * set the pid to -1. */ if (bmdef->cd_tree[lc_idx].n_down == 0) bmdef->cd_tree[lc_idx].c.pid = -1; #if 0 E_INFO("%d => %s %s %c (%d@%d)\n", lc_idx, bmdef->ciname[j], bmdef->ciname[lc->lc], (WPOS_NAME)[i], bmdef->cd_tree[lc_idx].n_down, bmdef->cd_tree[lc_idx].c.down); #endif ++bmdef->cd_tree[ci_idx].n_down; ++lc_idx; } /* As above, so below. */ if (bmdef->cd_tree[ci_idx].n_down == 0) bmdef->cd_tree[ci_idx].c.pid = -1; #if 0 E_INFO("%d => %d=%s (%d@%d)\n", ci_idx, j, bmdef->ciname[j], bmdef->cd_tree[ci_idx].n_down, bmdef->cd_tree[ci_idx].c.down); #endif ++ci_idx; } } mdef_free(mdef); bmdef->alloc_mode = BIN_MDEF_FROM_TEXT; return bmdef; } bin_mdef_t * bin_mdef_retain(bin_mdef_t *m) { ++m->refcnt; return m; } int bin_mdef_free(bin_mdef_t * m) { if (m == NULL) return 0; if (--m->refcnt > 0) return m->refcnt; switch (m->alloc_mode) { case BIN_MDEF_FROM_TEXT: ckd_free(m->ciname[0]); ckd_free(m->sseq[0]); ckd_free(m->phone); ckd_free(m->cd_tree); break; case BIN_MDEF_IN_MEMORY: ckd_free(m->ciname[0]); break; case BIN_MDEF_ON_DISK: break; } if (m->filemap) mmio_file_unmap(m->filemap); ckd_free(m->cd2cisen); ckd_free(m->sen2cimap); ckd_free(m->ciname); ckd_free(m->sseq); ckd_free(m); return 0; } static const char format_desc[] = "BEGIN FILE FORMAT DESCRIPTION\n" "int32 n_ciphone; /**< Number of base (CI) phones */\n" "int32 n_phone; /**< Number of base (CI) phones + (CD) triphones */\n" "int32 n_emit_state; /**< Number of emitting states per phone (0 if heterogeneous) */\n" "int32 n_ci_sen; /**< Number of CI senones; these are the first */\n" "int32 n_sen; /**< Number of senones (CI+CD) */\n" "int32 n_tmat; /**< Number of transition matrices */\n" "int32 n_sseq; /**< Number of unique senone sequences */\n" "int32 n_ctx; /**< Number of phones of context */\n" "int32 n_cd_tree; /**< Number of nodes in CD tree structure */\n" "int32 sil; /**< CI phone ID for silence */\n" "char ciphones[][]; /**< CI phone strings (null-terminated) */\n" "char padding[]; /**< Padding to a 4-bytes boundary */\n" "struct { int16 ctx; int16 n_down; int32 pid/down } cd_tree[];\n" "struct { int32 ssid; int32 tmat; int8 attr[4] } phones[];\n" "int16 sseq[]; /**< Unique senone sequences */\n" "int8 sseq_len[]; /**< Number of states in each sseq (none if homogeneous) */\n" "END FILE FORMAT DESCRIPTION\n"; bin_mdef_t * bin_mdef_read(cmd_ln_t *config, const char *filename) { bin_mdef_t *m; FILE *fh; size_t tree_start; int32 val, i, do_mmap, swap; long pos, end; int32 *sseq_size; /* Try to read it as text first. */ if ((m = bin_mdef_read_text(config, filename)) != NULL) return m; E_INFO("Reading binary model definition: %s\n", filename); if ((fh = fopen(filename, "rb")) == NULL) return NULL; if (fread(&val, 4, 1, fh) != 1) { fclose(fh); E_ERROR_SYSTEM("Failed to read byte-order marker from %s\n", filename); return NULL; } swap = 0; if (val == BIN_MDEF_OTHER_ENDIAN) { swap = 1; E_INFO("Must byte-swap %s\n", filename); } if (fread(&val, 4, 1, fh) != 1) { fclose(fh); E_ERROR_SYSTEM("Failed to read version from %s\n", filename); return NULL; } if (swap) SWAP_INT32(&val); if (val > BIN_MDEF_FORMAT_VERSION) { E_ERROR("File format version %d for %s is newer than library\n", val, filename); fclose(fh); return NULL; } if (fread(&val, 4, 1, fh) != 1) { fclose(fh); E_ERROR_SYSTEM("Failed to read header length from %s\n", filename); return NULL; } if (swap) SWAP_INT32(&val); /* Skip format descriptor. */ fseek(fh, val, SEEK_CUR); /* Finally allocate it. */ m = ckd_calloc(1, sizeof(*m)); m->refcnt = 1; /* Check these, to make gcc/glibc shut up. */ #define FREAD_SWAP32_CHK(dest) \ if (fread((dest), 4, 1, fh) != 1) { \ fclose(fh); \ ckd_free(m); \ E_ERROR_SYSTEM("Failed to read %s from %s\n", #dest, filename); \ return NULL; \ } \ if (swap) SWAP_INT32(dest); FREAD_SWAP32_CHK(&m->n_ciphone); FREAD_SWAP32_CHK(&m->n_phone); FREAD_SWAP32_CHK(&m->n_emit_state); FREAD_SWAP32_CHK(&m->n_ci_sen); FREAD_SWAP32_CHK(&m->n_sen); FREAD_SWAP32_CHK(&m->n_tmat); FREAD_SWAP32_CHK(&m->n_sseq); FREAD_SWAP32_CHK(&m->n_ctx); FREAD_SWAP32_CHK(&m->n_cd_tree); FREAD_SWAP32_CHK(&m->sil); /* CI names are first in the file. */ m->ciname = ckd_calloc(m->n_ciphone, sizeof(*m->ciname)); /* Decide whether to read in the whole file or mmap it. */ do_mmap = config ? cmd_ln_boolean_r(config, "-mmap") : TRUE; if (swap) { E_WARN("-mmap specified, but mdef is other-endian. Will not memory-map.\n"); do_mmap = FALSE; } /* Actually try to mmap it. */ if (do_mmap) { m->filemap = mmio_file_read(filename); if (m->filemap == NULL) do_mmap = FALSE; } pos = ftell(fh); if (do_mmap) { /* Get the base pointer from the memory map. */ m->ciname[0] = (char *)mmio_file_ptr(m->filemap) + pos; /* Success! */ m->alloc_mode = BIN_MDEF_ON_DISK; } else { /* Read everything into memory. */ m->alloc_mode = BIN_MDEF_IN_MEMORY; fseek(fh, 0, SEEK_END); end = ftell(fh); fseek(fh, pos, SEEK_SET); m->ciname[0] = ckd_malloc(end - pos); if (fread(m->ciname[0], 1, end - pos, fh) != end - pos) E_FATAL("Failed to read %d bytes of data from %s\n", end - pos, filename); } for (i = 1; i < m->n_ciphone; ++i) m->ciname[i] = m->ciname[i - 1] + strlen(m->ciname[i - 1]) + 1; /* Skip past the padding. */ tree_start = m->ciname[i - 1] + strlen(m->ciname[i - 1]) + 1 - m->ciname[0]; tree_start = (tree_start + 3) & ~3; m->cd_tree = (cd_tree_t *) (m->ciname[0] + tree_start); if (swap) { for (i = 0; i < m->n_cd_tree; ++i) { SWAP_INT16(&m->cd_tree[i].ctx); SWAP_INT16(&m->cd_tree[i].n_down); SWAP_INT32(&m->cd_tree[i].c.down); } } m->phone = (mdef_entry_t *) (m->cd_tree + m->n_cd_tree); if (swap) { for (i = 0; i < m->n_phone; ++i) { SWAP_INT32(&m->phone[i].ssid); SWAP_INT32(&m->phone[i].tmat); } } sseq_size = (int32 *) (m->phone + m->n_phone); if (swap) SWAP_INT32(sseq_size); m->sseq = ckd_calloc(m->n_sseq, sizeof(*m->sseq)); m->sseq[0] = (uint16 *) (sseq_size + 1); if (swap) { for (i = 0; i < *sseq_size; ++i) SWAP_INT16(m->sseq[0] + i); } if (m->n_emit_state) { for (i = 1; i < m->n_sseq; ++i) m->sseq[i] = m->sseq[0] + i * m->n_emit_state; } else { m->sseq_len = (uint8 *) (m->sseq[0] + *sseq_size); for (i = 1; i < m->n_sseq; ++i) m->sseq[i] = m->sseq[i - 1] + m->sseq_len[i - 1]; } /* Now build the CD-to-CI mappings using the senone sequences. * This is the only really accurate way to do it, though it is * still inaccurate in the case of heterogeneous topologies or * cross-state tying. */ m->cd2cisen = (int16 *) ckd_malloc(m->n_sen * sizeof(*m->cd2cisen)); m->sen2cimap = (int16 *) ckd_malloc(m->n_sen * sizeof(*m->sen2cimap)); /* Default mappings (identity, none) */ for (i = 0; i < m->n_ci_sen; ++i) m->cd2cisen[i] = i; for (; i < m->n_sen; ++i) m->cd2cisen[i] = -1; for (i = 0; i < m->n_sen; ++i) m->sen2cimap[i] = -1; for (i = 0; i < m->n_phone; ++i) { int32 j, ssid = m->phone[i].ssid; for (j = 0; j < bin_mdef_n_emit_state_phone(m, i); ++j) { int s = bin_mdef_sseq2sen(m, ssid, j); int ci = bin_mdef_pid2ci(m, i); /* Take the first one and warn if we have cross-state tying. */ if (m->sen2cimap[s] == -1) m->sen2cimap[s] = ci; if (m->sen2cimap[s] != ci) E_WARN ("Senone %d is shared between multiple base phones\n", s); if (j > bin_mdef_n_emit_state_phone(m, ci)) E_WARN("CD phone %d has fewer states than CI phone %d\n", i, ci); else m->cd2cisen[s] = bin_mdef_sseq2sen(m, m->phone[ci].ssid, j); } } /* Set the silence phone. */ m->sil = bin_mdef_ciphone_id(m, S3_SILENCE_CIPHONE); E_INFO ("%d CI-phone, %d CD-phone, %d emitstate/phone, %d CI-sen, %d Sen, %d Sen-Seq\n", m->n_ciphone, m->n_phone - m->n_ciphone, m->n_emit_state, m->n_ci_sen, m->n_sen, m->n_sseq); fclose(fh); return m; } int bin_mdef_write(bin_mdef_t * m, const char *filename) { FILE *fh; int32 val, i; if ((fh = fopen(filename, "wb")) == NULL) return -1; /* Byteorder marker. */ val = BIN_MDEF_NATIVE_ENDIAN; fwrite(&val, 1, 4, fh); /* Version. */ val = BIN_MDEF_FORMAT_VERSION; fwrite(&val, 1, sizeof(val), fh); /* Round the format descriptor size up to a 4-byte boundary. */ val = ((sizeof(format_desc) + 3) & ~3); fwrite(&val, 1, sizeof(val), fh); fwrite(format_desc, 1, sizeof(format_desc), fh); /* Pad it with zeros. */ i = 0; fwrite(&i, 1, val - sizeof(format_desc), fh); /* Binary header things. */ fwrite(&m->n_ciphone, 4, 1, fh); fwrite(&m->n_phone, 4, 1, fh); fwrite(&m->n_emit_state, 4, 1, fh); fwrite(&m->n_ci_sen, 4, 1, fh); fwrite(&m->n_sen, 4, 1, fh); fwrite(&m->n_tmat, 4, 1, fh); fwrite(&m->n_sseq, 4, 1, fh); fwrite(&m->n_ctx, 4, 1, fh); fwrite(&m->n_cd_tree, 4, 1, fh); /* Write this as a 32-bit value to preserve alignment for the * non-mmap case (we want things aligned both from the * beginning of the file and the beginning of the phone * strings). */ val = m->sil; fwrite(&val, 4, 1, fh); /* Phone strings. */ for (i = 0; i < m->n_ciphone; ++i) fwrite(m->ciname[i], 1, strlen(m->ciname[i]) + 1, fh); /* Pad with zeros. */ val = (ftell(fh) + 3) & ~3; i = 0; fwrite(&i, 1, val - ftell(fh), fh); /* Write CD-tree */ fwrite(m->cd_tree, sizeof(*m->cd_tree), m->n_cd_tree, fh); /* Write phones */ fwrite(m->phone, sizeof(*m->phone), m->n_phone, fh); if (m->n_emit_state) { /* Write size of sseq */ val = m->n_sseq * m->n_emit_state; fwrite(&val, 4, 1, fh); /* Write sseq */ fwrite(m->sseq[0], sizeof(**m->sseq), m->n_sseq * m->n_emit_state, fh); } else { int32 n; /* Calcluate size of sseq */ n = 0; for (i = 0; i < m->n_sseq; ++i) n += m->sseq_len[i]; /* Write size of sseq */ fwrite(&n, 4, 1, fh); /* Write sseq */ fwrite(m->sseq[0], sizeof(**m->sseq), n, fh); /* Write sseq_len */ fwrite(m->sseq_len, 1, m->n_sseq, fh); } fclose(fh); return 0; } int bin_mdef_write_text(bin_mdef_t * m, const char *filename) { FILE *fh; int p, i, n_total_state; if (strcmp(filename, "-") == 0) fh = stdout; else { if ((fh = fopen(filename, "w")) == NULL) return -1; } fprintf(fh, "0.3\n"); fprintf(fh, "%d n_base\n", m->n_ciphone); fprintf(fh, "%d n_tri\n", m->n_phone - m->n_ciphone); if (m->n_emit_state) n_total_state = m->n_phone * (m->n_emit_state + 1); else { n_total_state = 0; for (i = 0; i < m->n_phone; ++i) n_total_state += m->sseq_len[m->phone[i].ssid] + 1; } fprintf(fh, "%d n_state_map\n", n_total_state); fprintf(fh, "%d n_tied_state\n", m->n_sen); fprintf(fh, "%d n_tied_ci_state\n", m->n_ci_sen); fprintf(fh, "%d n_tied_tmat\n", m->n_tmat); fprintf(fh, "#\n# Columns definitions\n"); fprintf(fh, "#%4s %3s %3s %1s %6s %4s %s\n", "base", "lft", "rt", "p", "attrib", "tmat", " ... state id's ..."); for (p = 0; p < m->n_ciphone; p++) { int n_state; fprintf(fh, "%5s %3s %3s %1s", m->ciname[p], "-", "-", "-"); if (bin_mdef_is_fillerphone(m, p)) fprintf(fh, " %6s", "filler"); else fprintf(fh, " %6s", "n/a"); fprintf(fh, " %4d", m->phone[p].tmat); if (m->n_emit_state) n_state = m->n_emit_state; else n_state = m->sseq_len[m->phone[p].ssid]; for (i = 0; i < n_state; i++) { fprintf(fh, " %6u", m->sseq[m->phone[p].ssid][i]); } fprintf(fh, " N\n"); } for (; p < m->n_phone; p++) { int n_state; fprintf(fh, "%5s %3s %3s %c", m->ciname[m->phone[p].info.cd.ctx[0]], m->ciname[m->phone[p].info.cd.ctx[1]], m->ciname[m->phone[p].info.cd.ctx[2]], (WPOS_NAME)[m->phone[p].info.cd.wpos]); if (bin_mdef_is_fillerphone(m, p)) fprintf(fh, " %6s", "filler"); else fprintf(fh, " %6s", "n/a"); fprintf(fh, " %4d", m->phone[p].tmat); if (m->n_emit_state) n_state = m->n_emit_state; else n_state = m->sseq_len[m->phone[p].ssid]; for (i = 0; i < n_state; i++) { fprintf(fh, " %6u", m->sseq[m->phone[p].ssid][i]); } fprintf(fh, " N\n"); } if (strcmp(filename, "-") != 0) fclose(fh); return 0; } int bin_mdef_ciphone_id(bin_mdef_t * m, const char *ciphone) { int low, mid, high; /* Exact binary search on m->ciphone */ low = 0; high = m->n_ciphone; while (low < high) { int c; mid = (low + high) / 2; c = strcmp(ciphone, m->ciname[mid]); if (c == 0) return mid; else if (c > 0) low = mid + 1; else if (c < 0) high = mid; } return -1; } int bin_mdef_ciphone_id_nocase(bin_mdef_t * m, const char *ciphone) { int low, mid, high; /* Exact binary search on m->ciphone */ low = 0; high = m->n_ciphone; while (low < high) { int c; mid = (low + high) / 2; c = strcmp_nocase(ciphone, m->ciname[mid]); if (c == 0) return mid; else if (c > 0) low = mid + 1; else if (c < 0) high = mid; } return -1; } const char * bin_mdef_ciphone_str(bin_mdef_t * m, int32 ci) { assert(m != NULL); assert(ci < m->n_ciphone); return m->ciname[ci]; } int bin_mdef_phone_id(bin_mdef_t * m, int32 ci, int32 lc, int32 rc, int32 wpos) { cd_tree_t *cd_tree; int level, max; int16 ctx[4]; assert(m); /* In the future, we might back off when context is not available, * but for now we'll just return the CI phone. */ if (lc < 0 || rc < 0) return ci; assert((ci >= 0) && (ci < m->n_ciphone)); assert((lc >= 0) && (lc < m->n_ciphone)); assert((rc >= 0) && (rc < m->n_ciphone)); assert((wpos >= 0) && (wpos < N_WORD_POSN)); /* Create a context list, mapping fillers to silence. */ ctx[0] = wpos; ctx[1] = ci; ctx[2] = (m->sil >= 0 && m->phone[lc].info.ci.filler) ? m->sil : lc; ctx[3] = (m->sil >= 0 && m->phone[rc].info.ci.filler) ? m->sil : rc; /* Walk down the cd_tree. */ cd_tree = m->cd_tree; level = 0; /* What level we are on. */ max = N_WORD_POSN; /* Number of nodes on this level. */ while (level < 4) { int i; #if 0 E_INFO("Looking for context %d=%s in %d at %d\n", ctx[level], m->ciname[ctx[level]], max, cd_tree - m->cd_tree); #endif for (i = 0; i < max; ++i) { #if 0 E_INFO("Look at context %d=%s at %d\n", cd_tree[i].ctx, m->ciname[cd_tree[i].ctx], cd_tree + i - m->cd_tree); #endif if (cd_tree[i].ctx == ctx[level]) break; } if (i == max) return -1; #if 0 E_INFO("Found context %d=%s at %d, n_down=%d, down=%d\n", ctx[level], m->ciname[ctx[level]], cd_tree + i - m->cd_tree, cd_tree[i].n_down, cd_tree[i].c.down); #endif /* Leaf node, stop here. */ if (cd_tree[i].n_down == 0) return cd_tree[i].c.pid; /* Go down one level. */ max = cd_tree[i].n_down; cd_tree = m->cd_tree + cd_tree[i].c.down; ++level; } /* We probably shouldn't get here. */ return -1; } int bin_mdef_phone_id_nearest(bin_mdef_t * m, int32 b, int32 l, int32 r, int32 pos) { int p, tmppos; /* In the future, we might back off when context is not available, * but for now we'll just return the CI phone. */ if (l < 0 || r < 0) return b; p = bin_mdef_phone_id(m, b, l, r, pos); if (p >= 0) return p; /* Exact triphone not found; backoff to other word positions */ for (tmppos = 0; tmppos < N_WORD_POSN; tmppos++) { if (tmppos != pos) { p = bin_mdef_phone_id(m, b, l, r, tmppos); if (p >= 0) return p; } } /* Nothing yet; backoff to silence phone if non-silence filler context */ /* In addition, backoff to silence phone on left/right if in beginning/end position */ if (m->sil >= 0) { int newl = l, newr = r; if (m->phone[(int)l].info.ci.filler || pos == WORD_POSN_BEGIN || pos == WORD_POSN_SINGLE) newl = m->sil; if (m->phone[(int)r].info.ci.filler || pos == WORD_POSN_END || pos == WORD_POSN_SINGLE) newr = m->sil; if ((newl != l) || (newr != r)) { p = bin_mdef_phone_id(m, b, newl, newr, pos); if (p >= 0) return p; for (tmppos = 0; tmppos < N_WORD_POSN; tmppos++) { if (tmppos != pos) { p = bin_mdef_phone_id(m, b, newl, newr, tmppos); if (p >= 0) return p; } } } } /* Nothing yet; backoff to base phone */ return b; } int bin_mdef_phone_str(bin_mdef_t * m, int pid, char *buf) { char *wpos_name; assert(m); assert((pid >= 0) && (pid < m->n_phone)); wpos_name = WPOS_NAME; buf[0] = '\0'; if (pid < m->n_ciphone) sprintf(buf, "%s", bin_mdef_ciphone_str(m, pid)); else { sprintf(buf, "%s %s %s %c", bin_mdef_ciphone_str(m, m->phone[pid].info.cd.ctx[0]), bin_mdef_ciphone_str(m, m->phone[pid].info.cd.ctx[1]), bin_mdef_ciphone_str(m, m->phone[pid].info.cd.ctx[2]), wpos_name[m->phone[pid].info.cd.wpos]); } return 0; } pocketsphinx-5prealpha/src/libpocketsphinx/acmod.c0000664000175000017500000012133312546075623017640 00000000000000/* -*- 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 acmod.c Acoustic model structures for PocketSphinx. * @author David Huggins-Daines */ /* System headers. */ #include #include #include /* SphinxBase headers. */ #include #include #include #include #include #include #include /* Local headers. */ #include "cmdln_macro.h" #include "acmod.h" #include "s2_semi_mgau.h" #include "ptm_mgau.h" #include "ms_mgau.h" #ifndef WORDS_BIGENDIAN #define WORDS_BIGENDIAN 1 #endif static int32 acmod_process_mfcbuf(acmod_t *acmod); static int acmod_init_am(acmod_t *acmod) { char const *mdeffn, *tmatfn, *mllrfn, *hmmdir; /* Read model definition. */ if ((mdeffn = cmd_ln_str_r(acmod->config, "-mdef")) == NULL) { if ((hmmdir = cmd_ln_str_r(acmod->config, "-hmm")) == NULL) E_ERROR("Acoustic model definition is not specified either " "with -mdef option or with -hmm\n"); else E_ERROR("Folder '%s' does not contain acoustic model " "definition 'mdef'\n", hmmdir); return -1; } if ((acmod->mdef = bin_mdef_read(acmod->config, mdeffn)) == NULL) { E_ERROR("Failed to read acoustic model definition from %s\n", mdeffn); return -1; } /* Read transition matrices. */ if ((tmatfn = cmd_ln_str_r(acmod->config, "-tmat")) == NULL) { E_ERROR("No tmat file specified\n"); return -1; } acmod->tmat = tmat_init(tmatfn, acmod->lmath, cmd_ln_float32_r(acmod->config, "-tmatfloor"), TRUE); /* Read the acoustic models. */ if ((cmd_ln_str_r(acmod->config, "-mean") == NULL) || (cmd_ln_str_r(acmod->config, "-var") == NULL) || (cmd_ln_str_r(acmod->config, "-tmat") == NULL)) { E_ERROR("No mean/var/tmat files specified\n"); return -1; } if (cmd_ln_str_r(acmod->config, "-senmgau")) { E_INFO("Using general multi-stream GMM computation\n"); acmod->mgau = ms_mgau_init(acmod, acmod->lmath, acmod->mdef); if (acmod->mgau == NULL) return -1; } else { E_INFO("Attempting to use PTM computation module\n"); if ((acmod->mgau = ptm_mgau_init(acmod, acmod->mdef)) == NULL) { E_INFO("Attempting to use semi-continuous computation module\n"); if ((acmod->mgau = s2_semi_mgau_init(acmod)) == NULL) { E_INFO("Falling back to general multi-stream GMM computation\n"); acmod->mgau = ms_mgau_init(acmod, acmod->lmath, acmod->mdef); if (acmod->mgau == NULL) return -1; } } } /* If there is an MLLR transform, apply it. */ if ((mllrfn = cmd_ln_str_r(acmod->config, "-mllr"))) { ps_mllr_t *mllr = ps_mllr_read(mllrfn); if (mllr == NULL) return -1; acmod_update_mllr(acmod, mllr); } return 0; } static int acmod_init_feat(acmod_t *acmod) { acmod->fcb = feat_init(cmd_ln_str_r(acmod->config, "-feat"), cmn_type_from_str(cmd_ln_str_r(acmod->config,"-cmn")), cmd_ln_boolean_r(acmod->config, "-varnorm"), agc_type_from_str(cmd_ln_str_r(acmod->config, "-agc")), 1, cmd_ln_int32_r(acmod->config, "-ceplen")); if (acmod->fcb == NULL) return -1; if (cmd_ln_str_r(acmod->config, "-lda")) { E_INFO("Reading linear feature transformation from %s\n", cmd_ln_str_r(acmod->config, "-lda")); if (feat_read_lda(acmod->fcb, cmd_ln_str_r(acmod->config, "-lda"), cmd_ln_int32_r(acmod->config, "-ldadim")) < 0) return -1; } if (cmd_ln_str_r(acmod->config, "-svspec")) { int32 **subvecs; E_INFO("Using subvector specification %s\n", cmd_ln_str_r(acmod->config, "-svspec")); if ((subvecs = parse_subvecs(cmd_ln_str_r(acmod->config, "-svspec"))) == NULL) return -1; if ((feat_set_subvecs(acmod->fcb, subvecs)) < 0) return -1; } if (cmd_ln_exists_r(acmod->config, "-agcthresh") && 0 != strcmp(cmd_ln_str_r(acmod->config, "-agc"), "none")) { agc_set_threshold(acmod->fcb->agc_struct, cmd_ln_float32_r(acmod->config, "-agcthresh")); } if (acmod->fcb->cmn_struct && cmd_ln_exists_r(acmod->config, "-cmninit")) { char *c, *cc, *vallist; int32 nvals; vallist = ckd_salloc(cmd_ln_str_r(acmod->config, "-cmninit")); c = vallist; nvals = 0; while (nvals < acmod->fcb->cmn_struct->veclen && (cc = strchr(c, ',')) != NULL) { *cc = '\0'; acmod->fcb->cmn_struct->cmn_mean[nvals] = FLOAT2MFCC(atof_c(c)); c = cc + 1; ++nvals; } if (nvals < acmod->fcb->cmn_struct->veclen && *c != '\0') { acmod->fcb->cmn_struct->cmn_mean[nvals] = FLOAT2MFCC(atof_c(c)); } ckd_free(vallist); } return 0; } int acmod_fe_mismatch(acmod_t *acmod, fe_t *fe) { /* Output vector dimension needs to be the same. */ if (cmd_ln_int32_r(acmod->config, "-ceplen") != fe_get_output_size(fe)) { E_ERROR("Configured feature length %d doesn't match feature " "extraction output size %d\n", cmd_ln_int32_r(acmod->config, "-ceplen"), fe_get_output_size(fe)); return TRUE; } /* Feature parameters need to be the same. */ /* ... */ return FALSE; } int acmod_feat_mismatch(acmod_t *acmod, feat_t *fcb) { /* Feature type needs to be the same. */ if (0 != strcmp(cmd_ln_str_r(acmod->config, "-feat"), feat_name(fcb))) return TRUE; /* Input vector dimension needs to be the same. */ if (cmd_ln_int32_r(acmod->config, "-ceplen") != feat_cepsize(fcb)) return TRUE; /* FIXME: Need to check LDA and stuff too. */ return FALSE; } acmod_t * acmod_init(cmd_ln_t *config, logmath_t *lmath, fe_t *fe, feat_t *fcb) { acmod_t *acmod; acmod = ckd_calloc(1, sizeof(*acmod)); acmod->config = cmd_ln_retain(config); acmod->lmath = lmath; acmod->state = ACMOD_IDLE; /* Initialize feature computation. */ if (fe) { if (acmod_fe_mismatch(acmod, fe)) goto error_out; fe_retain(fe); acmod->fe = fe; } else { /* Initialize a new front end. */ acmod->fe = fe_init_auto_r(config); if (acmod->fe == NULL) goto error_out; if (acmod_fe_mismatch(acmod, acmod->fe)) goto error_out; } if (fcb) { if (acmod_feat_mismatch(acmod, fcb)) goto error_out; feat_retain(fcb); acmod->fcb = fcb; } else { /* Initialize a new fcb. */ if (acmod_init_feat(acmod) < 0) goto error_out; } /* Load acoustic model parameters. */ if (acmod_init_am(acmod) < 0) goto error_out; /* The MFCC buffer needs to be at least as large as the dynamic * feature window. */ acmod->n_mfc_alloc = acmod->fcb->window_size * 2 + 1; acmod->mfc_buf = (mfcc_t **) ckd_calloc_2d(acmod->n_mfc_alloc, acmod->fcb->cepsize, sizeof(**acmod->mfc_buf)); /* Feature buffer has to be at least as large as MFCC buffer. */ acmod->n_feat_alloc = acmod->n_mfc_alloc + cmd_ln_int32_r(config, "-pl_window"); acmod->feat_buf = feat_array_alloc(acmod->fcb, acmod->n_feat_alloc); acmod->framepos = ckd_calloc(acmod->n_feat_alloc, sizeof(*acmod->framepos)); acmod->utt_start_frame = 0; /* Senone computation stuff. */ acmod->senone_scores = ckd_calloc(bin_mdef_n_sen(acmod->mdef), sizeof(*acmod->senone_scores)); acmod->senone_active_vec = bitvec_alloc(bin_mdef_n_sen(acmod->mdef)); acmod->senone_active = ckd_calloc(bin_mdef_n_sen(acmod->mdef), sizeof(*acmod->senone_active)); acmod->log_zero = logmath_get_zero(acmod->lmath); acmod->compallsen = cmd_ln_boolean_r(config, "-compallsen"); return acmod; error_out: acmod_free(acmod); return NULL; } void acmod_free(acmod_t *acmod) { if (acmod == NULL) return; feat_free(acmod->fcb); fe_free(acmod->fe); cmd_ln_free_r(acmod->config); if (acmod->mfc_buf) ckd_free_2d((void **)acmod->mfc_buf); if (acmod->feat_buf) feat_array_free(acmod->feat_buf); if (acmod->mfcfh) fclose(acmod->mfcfh); if (acmod->rawfh) fclose(acmod->rawfh); if (acmod->senfh) fclose(acmod->senfh); ckd_free(acmod->framepos); ckd_free(acmod->senone_scores); ckd_free(acmod->senone_active_vec); ckd_free(acmod->senone_active); ckd_free(acmod->rawdata); if (acmod->mdef) bin_mdef_free(acmod->mdef); if (acmod->tmat) tmat_free(acmod->tmat); if (acmod->mgau) ps_mgau_free(acmod->mgau); if (acmod->mllr) ps_mllr_free(acmod->mllr); ckd_free(acmod); } ps_mllr_t * acmod_update_mllr(acmod_t *acmod, ps_mllr_t *mllr) { if (acmod->mllr) ps_mllr_free(acmod->mllr); acmod->mllr = mllr; ps_mgau_transform(acmod->mgau, mllr); return mllr; } int acmod_write_senfh_header(acmod_t *acmod, FILE *logfh) { char nsenstr[64], logbasestr[64]; sprintf(nsenstr, "%d", bin_mdef_n_sen(acmod->mdef)); sprintf(logbasestr, "%f", logmath_get_base(acmod->lmath)); return bio_writehdr(logfh, "version", "0.1", "mdef_file", cmd_ln_str_r(acmod->config, "-mdef"), "n_sen", nsenstr, "logbase", logbasestr, NULL); } int acmod_set_senfh(acmod_t *acmod, FILE *logfh) { if (acmod->senfh) fclose(acmod->senfh); acmod->senfh = logfh; if (logfh == NULL) return 0; return acmod_write_senfh_header(acmod, logfh); } int acmod_set_mfcfh(acmod_t *acmod, FILE *logfh) { int rv = 0; if (acmod->mfcfh) fclose(acmod->mfcfh); acmod->mfcfh = logfh; fwrite(&rv, 4, 1, acmod->mfcfh); return rv; } int acmod_set_rawfh(acmod_t *acmod, FILE *logfh) { if (acmod->rawfh) fclose(acmod->rawfh); acmod->rawfh = logfh; return 0; } void acmod_grow_feat_buf(acmod_t *acmod, int nfr) { if (nfr > MAX_N_FRAMES) E_FATAL("Decoder can not process more than %d frames at once, " "requested %d\n", MAX_N_FRAMES, nfr); acmod->feat_buf = feat_array_realloc(acmod->fcb, acmod->feat_buf, acmod->n_feat_alloc, nfr); acmod->framepos = ckd_realloc(acmod->framepos, nfr * sizeof(*acmod->framepos)); acmod->n_feat_alloc = nfr; } int acmod_set_grow(acmod_t *acmod, int grow_feat) { int tmp = acmod->grow_feat; acmod->grow_feat = grow_feat; /* Expand feat_buf to a reasonable size to start with. */ if (grow_feat && acmod->n_feat_alloc < 128) acmod_grow_feat_buf(acmod, 128); return tmp; } int acmod_start_utt(acmod_t *acmod) { fe_start_utt(acmod->fe); acmod->state = ACMOD_STARTED; acmod->n_mfc_frame = 0; acmod->n_feat_frame = 0; acmod->mfc_outidx = 0; acmod->feat_outidx = 0; acmod->output_frame = 0; acmod->senscr_frame = -1; acmod->n_senone_active = 0; acmod->mgau->frame_idx = 0; acmod->rawdata_pos = 0; return 0; } int acmod_end_utt(acmod_t *acmod) { int32 nfr = 0; acmod->state = ACMOD_ENDED; if (acmod->n_mfc_frame < acmod->n_mfc_alloc) { int inptr; /* Where to start writing them (circular buffer) */ inptr = (acmod->mfc_outidx + acmod->n_mfc_frame) % acmod->n_mfc_alloc; /* nfr is always either zero or one. */ fe_end_utt(acmod->fe, acmod->mfc_buf[inptr], &nfr); acmod->n_mfc_frame += nfr; /* Process whatever's left, and any leadout or update stats if needed. */ if (nfr) nfr = acmod_process_mfcbuf(acmod); else feat_update_stats(acmod->fcb); } if (acmod->mfcfh) { long outlen; int32 rv; outlen = (ftell(acmod->mfcfh) - 4) / 4; if (!WORDS_BIGENDIAN) SWAP_INT32(&outlen); /* Try to seek and write */ if ((rv = fseek(acmod->mfcfh, 0, SEEK_SET)) == 0) { fwrite(&outlen, 4, 1, acmod->mfcfh); } fclose(acmod->mfcfh); acmod->mfcfh = NULL; } if (acmod->rawfh) { fclose(acmod->rawfh); acmod->rawfh = NULL; } if (acmod->senfh) { fclose(acmod->senfh); acmod->senfh = NULL; } return nfr; } static int acmod_log_mfc(acmod_t *acmod, mfcc_t **cep, int n_frames) { int i, n; int32 *ptr = (int32 *)cep[0]; n = n_frames * feat_cepsize(acmod->fcb); /* Swap bytes. */ if (!WORDS_BIGENDIAN) { for (i = 0; i < (n * sizeof(mfcc_t)); ++i) { SWAP_INT32(ptr + i); } } /* Write features. */ if (fwrite(cep[0], sizeof(mfcc_t), n, acmod->mfcfh) != n) { E_ERROR_SYSTEM("Failed to write %d values to log file", n); } /* Swap them back. */ if (!WORDS_BIGENDIAN) { for (i = 0; i < (n * sizeof(mfcc_t)); ++i) { SWAP_INT32(ptr + i); } } return 0; } static int acmod_process_full_cep(acmod_t *acmod, mfcc_t ***inout_cep, int *inout_n_frames) { int32 nfr; /* Write to log file. */ if (acmod->mfcfh) acmod_log_mfc(acmod, *inout_cep, *inout_n_frames); /* Resize feat_buf to fit. */ if (acmod->n_feat_alloc < *inout_n_frames) { if (*inout_n_frames > MAX_N_FRAMES) E_FATAL("Batch processing can not process more than %d frames " "at once, requested %d\n", MAX_N_FRAMES, *inout_n_frames); feat_array_free(acmod->feat_buf); acmod->feat_buf = feat_array_alloc(acmod->fcb, *inout_n_frames); acmod->n_feat_alloc = *inout_n_frames; acmod->n_feat_frame = 0; acmod->feat_outidx = 0; } /* Make dynamic features. */ nfr = feat_s2mfc2feat_live(acmod->fcb, *inout_cep, inout_n_frames, TRUE, TRUE, acmod->feat_buf); acmod->n_feat_frame = nfr; assert(acmod->n_feat_frame <= acmod->n_feat_alloc); *inout_cep += *inout_n_frames; *inout_n_frames = 0; return nfr; } static int acmod_process_full_raw(acmod_t *acmod, int16 const **inout_raw, size_t *inout_n_samps) { int32 nfr, ntail; mfcc_t **cepptr; /* Write to logging file if any. */ if (*inout_n_samps + acmod->rawdata_pos < acmod->rawdata_size) { memcpy(acmod->rawdata + acmod->rawdata_pos, *inout_raw, *inout_n_samps * sizeof(int16)); acmod->rawdata_pos += *inout_n_samps; } if (acmod->rawfh) fwrite(*inout_raw, sizeof(int16), *inout_n_samps, acmod->rawfh); /* Resize mfc_buf to fit. */ if (fe_process_frames(acmod->fe, NULL, inout_n_samps, NULL, &nfr, NULL) < 0) return -1; if (acmod->n_mfc_alloc < nfr + 1) { ckd_free_2d(acmod->mfc_buf); acmod->mfc_buf = ckd_calloc_2d(nfr + 1, fe_get_output_size(acmod->fe), sizeof(**acmod->mfc_buf)); acmod->n_mfc_alloc = nfr + 1; } acmod->n_mfc_frame = 0; acmod->mfc_outidx = 0; fe_start_utt(acmod->fe); if (fe_process_frames(acmod->fe, inout_raw, inout_n_samps, acmod->mfc_buf, &nfr, NULL) < 0) return -1; fe_end_utt(acmod->fe, acmod->mfc_buf[nfr], &ntail); nfr += ntail; cepptr = acmod->mfc_buf; nfr = acmod_process_full_cep(acmod, &cepptr, &nfr); acmod->n_mfc_frame = 0; return nfr; } /** * Process MFCCs that are in the internal buffer into features. */ static int32 acmod_process_mfcbuf(acmod_t *acmod) { mfcc_t **mfcptr; int32 ncep; ncep = acmod->n_mfc_frame; /* Also do this in two parts because of the circular mfc_buf. */ if (acmod->mfc_outidx + ncep > acmod->n_mfc_alloc) { int32 ncep1 = acmod->n_mfc_alloc - acmod->mfc_outidx; int saved_state = acmod->state; /* Make sure we don't end the utterance here. */ if (acmod->state == ACMOD_ENDED) acmod->state = ACMOD_PROCESSING; mfcptr = acmod->mfc_buf + acmod->mfc_outidx; ncep1 = acmod_process_cep(acmod, &mfcptr, &ncep1, FALSE); /* It's possible that not all available frames were filled. */ ncep -= ncep1; acmod->n_mfc_frame -= ncep1; acmod->mfc_outidx += ncep1; acmod->mfc_outidx %= acmod->n_mfc_alloc; /* Restore original state (could this really be the end) */ acmod->state = saved_state; } mfcptr = acmod->mfc_buf + acmod->mfc_outidx; ncep = acmod_process_cep(acmod, &mfcptr, &ncep, FALSE); acmod->n_mfc_frame -= ncep; acmod->mfc_outidx += ncep; acmod->mfc_outidx %= acmod->n_mfc_alloc; return ncep; } int acmod_process_raw(acmod_t *acmod, int16 const **inout_raw, size_t *inout_n_samps, int full_utt) { int32 ncep; int32 out_frameidx; int16 const *prev_audio_inptr; /* If this is a full utterance, process it all at once. */ if (full_utt) return acmod_process_full_raw(acmod, inout_raw, inout_n_samps); /* Append MFCCs to the end of any that are previously in there * (in practice, there will probably be none) */ if (inout_n_samps && *inout_n_samps) { int inptr; int32 processed_samples; prev_audio_inptr = *inout_raw; /* Total number of frames available. */ ncep = acmod->n_mfc_alloc - acmod->n_mfc_frame; /* Where to start writing them (circular buffer) */ inptr = (acmod->mfc_outidx + acmod->n_mfc_frame) % acmod->n_mfc_alloc; /* Write them in two (or more) parts if there is wraparound. */ while (inptr + ncep > acmod->n_mfc_alloc) { int32 ncep1 = acmod->n_mfc_alloc - inptr; if (fe_process_frames(acmod->fe, inout_raw, inout_n_samps, acmod->mfc_buf + inptr, &ncep1, &out_frameidx) < 0) return -1; if (out_frameidx > 0) acmod->utt_start_frame = out_frameidx; processed_samples = *inout_raw - prev_audio_inptr; if (processed_samples + acmod->rawdata_pos < acmod->rawdata_size) { memcpy(acmod->rawdata + acmod->rawdata_pos, prev_audio_inptr, processed_samples * sizeof(int16)); acmod->rawdata_pos += processed_samples; } /* Write to logging file if any. */ if (acmod->rawfh) { fwrite(prev_audio_inptr, sizeof(int16), processed_samples, acmod->rawfh); } prev_audio_inptr = *inout_raw; /* ncep1 now contains the number of frames actually * processed. This is a good thing, but it means we * actually still might have some room left at the end of * the buffer, hence the while loop. Unfortunately it * also means that in the case where we are really * actually done, we need to get out totally, hence the * goto. */ acmod->n_mfc_frame += ncep1; ncep -= ncep1; inptr += ncep1; inptr %= acmod->n_mfc_alloc; if (ncep1 == 0) goto alldone; } assert(inptr + ncep <= acmod->n_mfc_alloc); if (fe_process_frames(acmod->fe, inout_raw, inout_n_samps, acmod->mfc_buf + inptr, &ncep, &out_frameidx) < 0) return -1; if (out_frameidx > 0) acmod->utt_start_frame = out_frameidx; processed_samples = *inout_raw - prev_audio_inptr; if (processed_samples + acmod->rawdata_pos < acmod->rawdata_size) { memcpy(acmod->rawdata + acmod->rawdata_pos, prev_audio_inptr, processed_samples * sizeof(int16)); acmod->rawdata_pos += processed_samples; } if (acmod->rawfh) { fwrite(prev_audio_inptr, sizeof(int16), processed_samples, acmod->rawfh); } prev_audio_inptr = *inout_raw; acmod->n_mfc_frame += ncep; alldone: ; } /* Hand things off to acmod_process_cep. */ return acmod_process_mfcbuf(acmod); } int acmod_process_cep(acmod_t *acmod, mfcc_t ***inout_cep, int *inout_n_frames, int full_utt) { int32 nfeat, ncep, inptr; int orig_n_frames; /* If this is a full utterance, process it all at once. */ if (full_utt) return acmod_process_full_cep(acmod, inout_cep, inout_n_frames); /* Write to log file. */ if (acmod->mfcfh) acmod_log_mfc(acmod, *inout_cep, *inout_n_frames); /* Maximum number of frames we're going to generate. */ orig_n_frames = ncep = nfeat = *inout_n_frames; /* FIXME: This behaviour isn't guaranteed... */ if (acmod->state == ACMOD_ENDED) nfeat += feat_window_size(acmod->fcb); else if (acmod->state == ACMOD_STARTED) nfeat -= feat_window_size(acmod->fcb); /* Clamp number of features to fit available space. */ if (nfeat > acmod->n_feat_alloc - acmod->n_feat_frame) { /* Grow it as needed - we have to grow it at the end of an * utterance because we can't return a short read there. */ if (acmod->grow_feat || acmod->state == ACMOD_ENDED) acmod_grow_feat_buf(acmod, acmod->n_feat_alloc + nfeat); else ncep -= (nfeat - (acmod->n_feat_alloc - acmod->n_feat_frame)); } /* Where to start writing in the feature buffer. */ if (acmod->grow_feat) { /* Grow to avoid wraparound if grow_feat == TRUE. */ inptr = acmod->feat_outidx + acmod->n_feat_frame; while (inptr + nfeat >= acmod->n_feat_alloc) acmod_grow_feat_buf(acmod, acmod->n_feat_alloc * 2); } else { inptr = (acmod->feat_outidx + acmod->n_feat_frame) % acmod->n_feat_alloc; } /* FIXME: we can't split the last frame drop properly to be on the bounary, * so just return */ if (inptr + nfeat > acmod->n_feat_alloc && acmod->state == ACMOD_ENDED) { *inout_n_frames -= ncep; *inout_cep += ncep; return 0; } /* Write them in two parts if there is wraparound. */ if (inptr + nfeat > acmod->n_feat_alloc) { int32 ncep1 = acmod->n_feat_alloc - inptr; /* Make sure we don't end the utterance here. */ nfeat = feat_s2mfc2feat_live(acmod->fcb, *inout_cep, &ncep1, (acmod->state == ACMOD_STARTED), FALSE, acmod->feat_buf + inptr); if (nfeat < 0) return -1; /* Move the output feature pointer forward. */ acmod->n_feat_frame += nfeat; assert(acmod->n_feat_frame <= acmod->n_feat_alloc); inptr += nfeat; inptr %= acmod->n_feat_alloc; /* Move the input feature pointers forward. */ *inout_n_frames -= ncep1; *inout_cep += ncep1; ncep -= ncep1; } nfeat = feat_s2mfc2feat_live(acmod->fcb, *inout_cep, &ncep, (acmod->state == ACMOD_STARTED), (acmod->state == ACMOD_ENDED), acmod->feat_buf + inptr); if (nfeat < 0) return -1; acmod->n_feat_frame += nfeat; assert(acmod->n_feat_frame <= acmod->n_feat_alloc); /* Move the input feature pointers forward. */ *inout_n_frames -= ncep; *inout_cep += ncep; if (acmod->state == ACMOD_STARTED) acmod->state = ACMOD_PROCESSING; return orig_n_frames - *inout_n_frames; } int acmod_process_feat(acmod_t *acmod, mfcc_t **feat) { int i, inptr; if (acmod->n_feat_frame == acmod->n_feat_alloc) { if (acmod->grow_feat) acmod_grow_feat_buf(acmod, acmod->n_feat_alloc * 2); else return 0; } if (acmod->grow_feat) { /* Grow to avoid wraparound if grow_feat == TRUE. */ inptr = acmod->feat_outidx + acmod->n_feat_frame; while (inptr + 1 >= acmod->n_feat_alloc) acmod_grow_feat_buf(acmod, acmod->n_feat_alloc * 2); } else { inptr = (acmod->feat_outidx + acmod->n_feat_frame) % acmod->n_feat_alloc; } for (i = 0; i < feat_dimension1(acmod->fcb); ++i) memcpy(acmod->feat_buf[inptr][i], feat[i], feat_dimension2(acmod->fcb, i) * sizeof(**feat)); ++acmod->n_feat_frame; assert(acmod->n_feat_frame <= acmod->n_feat_alloc); return 1; } static int acmod_read_senfh_header(acmod_t *acmod) { char **name, **val; int32 swap; int i; if (bio_readhdr(acmod->insenfh, &name, &val, &swap) < 0) goto error_out; for (i = 0; name[i] != NULL; ++i) { if (!strcmp(name[i], "n_sen")) { if (atoi(val[i]) != bin_mdef_n_sen(acmod->mdef)) { E_ERROR("Number of senones in senone file (%d) does not " "match mdef (%d)\n", atoi(val[i]), bin_mdef_n_sen(acmod->mdef)); goto error_out; } } if (!strcmp(name[i], "logbase")) { if (fabs(atof_c(val[i]) - logmath_get_base(acmod->lmath)) > 0.001) { E_ERROR("Logbase in senone file (%f) does not match acmod " "(%f)\n", atof_c(val[i]), logmath_get_base(acmod->lmath)); goto error_out; } } } acmod->insen_swap = swap; bio_hdrarg_free(name, val); return 0; error_out: bio_hdrarg_free(name, val); return -1; } int acmod_set_insenfh(acmod_t *acmod, FILE *senfh) { acmod->insenfh = senfh; if (senfh == NULL) { acmod->n_feat_frame = 0; acmod->compallsen = cmd_ln_boolean_r(acmod->config, "-compallsen"); return 0; } acmod->compallsen = TRUE; return acmod_read_senfh_header(acmod); } int acmod_rewind(acmod_t *acmod) { /* If the feature buffer is circular, this is not possible. */ if (acmod->output_frame > acmod->n_feat_alloc) { E_ERROR("Circular feature buffer cannot be rewound (output frame %d, " "alloc %d)\n", acmod->output_frame, acmod->n_feat_alloc); return -1; } /* Frames consumed + frames available */ acmod->n_feat_frame = acmod->output_frame + acmod->n_feat_frame; /* Reset output pointers. */ acmod->feat_outidx = 0; acmod->output_frame = 0; acmod->senscr_frame = -1; acmod->mgau->frame_idx = 0; return 0; } int acmod_advance(acmod_t *acmod) { /* Advance the output pointers. */ if (++acmod->feat_outidx == acmod->n_feat_alloc) acmod->feat_outidx = 0; --acmod->n_feat_frame; ++acmod->mgau->frame_idx; return ++acmod->output_frame; } int acmod_write_scores(acmod_t *acmod, int n_active, uint8 const *active, int16 const *senscr, FILE *senfh) { int16 n_active2; /* Uncompressed frame format: * * (2 bytes) n_active: Number of active senones * If all senones active: * (n_active * 2 bytes) scores of active senones * * Otherwise: * (2 bytes) n_active: Number of active senones * (n_active bytes) deltas to active senones * (n_active * 2 bytes) scores of active senones */ n_active2 = n_active; if (fwrite(&n_active2, 2, 1, senfh) != 1) goto error_out; if (n_active == bin_mdef_n_sen(acmod->mdef)) { if (fwrite(senscr, 2, n_active, senfh) != n_active) goto error_out; } else { int i, n; if (fwrite(active, 1, n_active, senfh) != n_active) goto error_out; for (i = n = 0; i < n_active; ++i) { n += active[i]; if (fwrite(senscr + n, 2, 1, senfh) != 1) goto error_out; } } return 0; error_out: E_ERROR_SYSTEM("Failed to write frame to senone file"); return -1; } /** * Internal version, used for reading previous frames in acmod_score() */ static int acmod_read_scores_internal(acmod_t *acmod) { FILE *senfh = acmod->insenfh; int16 n_active; size_t rv; if (acmod->n_feat_frame == acmod->n_feat_alloc) { if (acmod->grow_feat) acmod_grow_feat_buf(acmod, acmod->n_feat_alloc * 2); else return 0; } if (senfh == NULL) return -1; if ((rv = fread(&n_active, 2, 1, senfh)) != 1) goto error_out; acmod->n_senone_active = n_active; if (acmod->n_senone_active == bin_mdef_n_sen(acmod->mdef)) { if ((rv = fread(acmod->senone_scores, 2, acmod->n_senone_active, senfh)) != acmod->n_senone_active) goto error_out; } else { int i, n; if ((rv = fread(acmod->senone_active, 1, acmod->n_senone_active, senfh)) != acmod->n_senone_active) goto error_out; for (i = 0, n = 0; i < acmod->n_senone_active; ++i) { int j, sen = n + acmod->senone_active[i]; for (j = n + 1; j < sen; ++j) acmod->senone_scores[j] = SENSCR_DUMMY; if ((rv = fread(acmod->senone_scores + sen, 2, 1, senfh)) != 1) goto error_out; n = sen; } n++; while (n < bin_mdef_n_sen(acmod->mdef)) acmod->senone_scores[n++] = SENSCR_DUMMY; } return 1; error_out: if (ferror(senfh)) { E_ERROR_SYSTEM("Failed to read frame from senone file"); return -1; } return 0; } int acmod_read_scores(acmod_t *acmod) { int inptr, rv; if (acmod->grow_feat) { /* Grow to avoid wraparound if grow_feat == TRUE. */ inptr = acmod->feat_outidx + acmod->n_feat_frame; /* Has to be +1, otherwise, next time acmod_advance() is * called, this will wrap around. */ while (inptr + 1 >= acmod->n_feat_alloc) acmod_grow_feat_buf(acmod, acmod->n_feat_alloc * 2); } else { inptr = (acmod->feat_outidx + acmod->n_feat_frame) % acmod->n_feat_alloc; } if ((rv = acmod_read_scores_internal(acmod)) != 1) return rv; /* Set acmod->senscr_frame appropriately so that these scores get reused below in acmod_score(). */ acmod->senscr_frame = acmod->output_frame + acmod->n_feat_frame; E_DEBUG(1,("Frame %d has %d active states\n", acmod->senscr_frame, acmod->n_senone_active)); /* Increment the "feature frame counter" and record the file * position for the relevant frame in the (possibly circular) * buffer. */ ++acmod->n_feat_frame; acmod->framepos[inptr] = ftell(acmod->insenfh); return 1; } static int calc_frame_idx(acmod_t *acmod, int *inout_frame_idx) { int frame_idx; /* Calculate the absolute frame index to be scored. */ if (inout_frame_idx == NULL) frame_idx = acmod->output_frame; else if (*inout_frame_idx < 0) frame_idx = acmod->output_frame + 1 + *inout_frame_idx; else frame_idx = *inout_frame_idx; return frame_idx; } static int calc_feat_idx(acmod_t *acmod, int frame_idx) { int n_backfr, feat_idx; n_backfr = acmod->n_feat_alloc - acmod->n_feat_frame; if (frame_idx < 0 || acmod->output_frame - frame_idx > n_backfr) { E_ERROR("Frame %d outside queue of %d frames, %d alloc (%d > %d), " "cannot score\n", frame_idx, acmod->n_feat_frame, acmod->n_feat_alloc, acmod->output_frame - frame_idx, n_backfr); return -1; } /* Get the index in feat_buf/framepos of the frame to be scored. */ feat_idx = (acmod->feat_outidx + frame_idx - acmod->output_frame) % acmod->n_feat_alloc; if (feat_idx < 0) feat_idx += acmod->n_feat_alloc; return feat_idx; } mfcc_t ** acmod_get_frame(acmod_t *acmod, int *inout_frame_idx) { int frame_idx, feat_idx; /* Calculate the absolute frame index requested. */ frame_idx = calc_frame_idx(acmod, inout_frame_idx); /* Calculate position of requested frame in circular buffer. */ if ((feat_idx = calc_feat_idx(acmod, frame_idx)) < 0) return NULL; if (inout_frame_idx) *inout_frame_idx = frame_idx; return acmod->feat_buf[feat_idx]; } int16 const * acmod_score(acmod_t *acmod, int *inout_frame_idx) { int frame_idx, feat_idx; /* Calculate the absolute frame index to be scored. */ frame_idx = calc_frame_idx(acmod, inout_frame_idx); /* If all senones are being computed, or we are using a senone file, then we can reuse existing scores. */ if ((acmod->compallsen || acmod->insenfh) && frame_idx == acmod->senscr_frame) { if (inout_frame_idx) *inout_frame_idx = frame_idx; return acmod->senone_scores; } /* Calculate position of requested frame in circular buffer. */ if ((feat_idx = calc_feat_idx(acmod, frame_idx)) < 0) return NULL; /* * If there is an input senone file locate the appropriate frame and read * it. */ if (acmod->insenfh) { fseek(acmod->insenfh, acmod->framepos[feat_idx], SEEK_SET); if (acmod_read_scores_internal(acmod) < 0) return NULL; } else { /* Build active senone list. */ acmod_flags2list(acmod); /* Generate scores for the next available frame */ ps_mgau_frame_eval(acmod->mgau, acmod->senone_scores, acmod->senone_active, acmod->n_senone_active, acmod->feat_buf[feat_idx], frame_idx, acmod->compallsen); } if (inout_frame_idx) *inout_frame_idx = frame_idx; acmod->senscr_frame = frame_idx; /* Dump scores to the senone dump file if one exists. */ if (acmod->senfh) { if (acmod_write_scores(acmod, acmod->n_senone_active, acmod->senone_active, acmod->senone_scores, acmod->senfh) < 0) return NULL; E_DEBUG(1,("Frame %d has %d active states\n", frame_idx, acmod->n_senone_active)); } return acmod->senone_scores; } int acmod_best_score(acmod_t *acmod, int *out_best_senid) { int i, best; best = SENSCR_DUMMY; if (acmod->compallsen) { for (i = 0; i < bin_mdef_n_sen(acmod->mdef); ++i) { if (acmod->senone_scores[i] < best) { best = acmod->senone_scores[i]; *out_best_senid = i; } } } else { int16 *senscr; senscr = acmod->senone_scores; for (i = 0; i < acmod->n_senone_active; ++i) { senscr += acmod->senone_active[i]; if (*senscr < best) { best = *senscr; *out_best_senid = i; } } } return best; } void acmod_clear_active(acmod_t *acmod) { if (acmod->compallsen) return; bitvec_clear_all(acmod->senone_active_vec, bin_mdef_n_sen(acmod->mdef)); acmod->n_senone_active = 0; } #define MPX_BITVEC_SET(a,h,i) \ if (hmm_mpx_ssid(h,i) != BAD_SSID) \ bitvec_set((a)->senone_active_vec, hmm_mpx_senid(h,i)) #define NONMPX_BITVEC_SET(a,h,i) \ bitvec_set((a)->senone_active_vec, \ hmm_nonmpx_senid(h,i)) void acmod_activate_hmm(acmod_t *acmod, hmm_t *hmm) { int i; if (acmod->compallsen) return; if (hmm_is_mpx(hmm)) { switch (hmm_n_emit_state(hmm)) { case 5: MPX_BITVEC_SET(acmod, hmm, 4); MPX_BITVEC_SET(acmod, hmm, 3); case 3: MPX_BITVEC_SET(acmod, hmm, 2); MPX_BITVEC_SET(acmod, hmm, 1); MPX_BITVEC_SET(acmod, hmm, 0); break; default: for (i = 0; i < hmm_n_emit_state(hmm); ++i) { MPX_BITVEC_SET(acmod, hmm, i); } } } else { switch (hmm_n_emit_state(hmm)) { case 5: NONMPX_BITVEC_SET(acmod, hmm, 4); NONMPX_BITVEC_SET(acmod, hmm, 3); case 3: NONMPX_BITVEC_SET(acmod, hmm, 2); NONMPX_BITVEC_SET(acmod, hmm, 1); NONMPX_BITVEC_SET(acmod, hmm, 0); break; default: for (i = 0; i < hmm_n_emit_state(hmm); ++i) { NONMPX_BITVEC_SET(acmod, hmm, i); } } } } int32 acmod_flags2list(acmod_t *acmod) { int32 w, l, n, b, total_dists, total_words, extra_bits; bitvec_t *flagptr; total_dists = bin_mdef_n_sen(acmod->mdef); if (acmod->compallsen) { acmod->n_senone_active = total_dists; return total_dists; } total_words = total_dists / BITVEC_BITS; extra_bits = total_dists % BITVEC_BITS; w = n = l = 0; for (flagptr = acmod->senone_active_vec; w < total_words; ++w, ++flagptr) { if (*flagptr == 0) continue; for (b = 0; b < BITVEC_BITS; ++b) { if (*flagptr & (1UL << b)) { int32 sen = w * BITVEC_BITS + b; int32 delta = sen - l; /* Handle excessive deltas "lossily" by adding a few extra senones to bridge the gap. */ while (delta > 255) { acmod->senone_active[n++] = 255; delta -= 255; } acmod->senone_active[n++] = delta; l = sen; } } } for (b = 0; b < extra_bits; ++b) { if (*flagptr & (1UL << b)) { int32 sen = w * BITVEC_BITS + b; int32 delta = sen - l; /* Handle excessive deltas "lossily" by adding a few extra senones to bridge the gap. */ while (delta > 255) { acmod->senone_active[n++] = 255; delta -= 255; } acmod->senone_active[n++] = delta; l = sen; } } acmod->n_senone_active = n; E_DEBUG(1, ("acmod_flags2list: %d active in frame %d\n", acmod->n_senone_active, acmod->output_frame)); return n; } int32 acmod_stream_offset(acmod_t *acmod) { return acmod->utt_start_frame; } void acmod_start_stream(acmod_t *acmod) { fe_start_stream(acmod->fe); acmod->utt_start_frame = 0; } void acmod_set_rawdata_size(acmod_t *acmod, int32 size) { assert(size >= 0); acmod->rawdata_size = size; if (acmod->rawdata_size > 0) { ckd_free(acmod->rawdata); acmod->rawdata = ckd_calloc(size, sizeof(int16)); } } void acmod_get_rawdata(acmod_t *acmod, int16 **buffer, int32 *size) { if (buffer) { *buffer = acmod->rawdata; } if (size) { *size = acmod->rawdata_pos; } } pocketsphinx-5prealpha/src/libpocketsphinx/mdef.c0000664000175000017500000005442312504317100017454 00000000000000/* -*- 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. * * ==================================================================== * */ /* * mdef.c -- HMM model definition: base (CI) phones and triphones * * ********************************************** * CMU ARPA Speech Project * * Copyright (c) 1999 Carnegie Mellon University. * ALL RIGHTS RESERVED. * ********************************************** * * HISTORY * * * 22-Nov-2004 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University * Imported from s3.2, for supporting s3 format continuous * acoustic models. * * 14-Oct-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon * Added mdef_sseq2sen_active(). * * 06-May-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon * In mdef_phone_id(), added backing off to silence phone context from filler * context if original triphone not found. * * 30-Apr-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon * Added senone-sequence id (ssid) to phone_t and appropriate functions to * maintain it. Instead, moved state sequence info to mdef_t. * * 13-Jul-96 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University. * Added mdef_phone_str(). * * 01-Jan-96 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University. * Allowed mdef_phone_id_nearest to return base phone id if either * left or right context (or both) is undefined. * * 01-Jan-96 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University. * Created. */ /* * Major assumptions: * All phones have same #states, same topology. * Every phone has exactly one non-emitting, final state--the last one. * CI phones must appear first in model definition file. */ /* System headers. */ #include #include #include #include /* SphinxBase headers. */ #include #include /* Local headers. */ #include "mdef.h" #define MODEL_DEF_VERSION "0.3" static void ciphone_add(mdef_t * m, char *ci, int p) { assert(p < m->n_ciphone); m->ciphone[p].name = (char *) ckd_salloc(ci); /* freed in mdef_free */ if (hash_table_enter(m->ciphone_ht, m->ciphone[p].name, (void *)(long)p) != (void *)(long)p) E_FATAL("hash_table_enter(%s) failed; duplicate CIphone?\n", m->ciphone[p].name); } static ph_lc_t * find_ph_lc(ph_lc_t * lclist, int lc) { ph_lc_t *lcptr; for (lcptr = lclist; lcptr && (lcptr->lc != lc); lcptr = lcptr->next); return lcptr; } static ph_rc_t * find_ph_rc(ph_rc_t * rclist, int rc) { ph_rc_t *rcptr; for (rcptr = rclist; rcptr && (rcptr->rc != rc); rcptr = rcptr->next); return rcptr; } static void triphone_add(mdef_t * m, int ci, int lc, int rc, word_posn_t wpos, int p) { ph_lc_t *lcptr; ph_rc_t *rcptr; assert(p < m->n_phone); /* Fill in phone[p] information (state and tmat mappings added later) */ m->phone[p].ci = ci; m->phone[p].lc = lc; m->phone[p].rc = rc; m->phone[p].wpos = wpos; /* Create -> p mapping if not a CI phone */ if (p >= m->n_ciphone) { if ((lcptr = find_ph_lc(m->wpos_ci_lclist[wpos][(int) ci], lc)) == NULL) { lcptr = (ph_lc_t *) ckd_calloc(1, sizeof(ph_lc_t)); /* freed at mdef_free, I believe */ lcptr->lc = lc; lcptr->next = m->wpos_ci_lclist[wpos][(int) ci]; m->wpos_ci_lclist[wpos][(int) ci] = lcptr; /* This is what needs to be freed */ } if ((rcptr = find_ph_rc(lcptr->rclist, rc)) != NULL) { __BIGSTACKVARIABLE__ char buf[4096]; mdef_phone_str(m, rcptr->pid, buf); E_FATAL("Duplicate triphone: %s\n", buf); } rcptr = (ph_rc_t *) ckd_calloc(1, sizeof(ph_rc_t)); /* freed in mdef_free, I believe */ rcptr->rc = rc; rcptr->pid = p; rcptr->next = lcptr->rclist; lcptr->rclist = rcptr; } } int mdef_ciphone_id(mdef_t * m, char *ci) { int32 id; if (hash_table_lookup_int32(m->ciphone_ht, ci, &id) < 0) return -1; return id; } const char * mdef_ciphone_str(mdef_t * m, int id) { assert(m); assert((id >= 0) && (id < m->n_ciphone)); return (m->ciphone[id].name); } int mdef_phone_str(mdef_t * m, int pid, char *buf) { char *wpos_name; assert(m); assert((pid >= 0) && (pid < m->n_phone)); wpos_name = WPOS_NAME; buf[0] = '\0'; if (pid < m->n_ciphone) sprintf(buf, "%s", mdef_ciphone_str(m, pid)); else { sprintf(buf, "%s %s %s %c", mdef_ciphone_str(m, m->phone[pid].ci), mdef_ciphone_str(m, m->phone[pid].lc), mdef_ciphone_str(m, m->phone[pid].rc), wpos_name[m->phone[pid].wpos]); } return 0; } int mdef_phone_id(mdef_t * m, int ci, int lc, int rc, word_posn_t wpos) { ph_lc_t *lcptr; ph_rc_t *rcptr; int newl, newr; assert(m); assert((ci >= 0) && (ci < m->n_ciphone)); assert((lc >= 0) && (lc < m->n_ciphone)); assert((rc >= 0) && (rc < m->n_ciphone)); assert((wpos >= 0) && (wpos < N_WORD_POSN)); if (((lcptr = find_ph_lc(m->wpos_ci_lclist[wpos][(int) ci], lc)) == NULL) || ((rcptr = find_ph_rc(lcptr->rclist, rc)) == NULL)) { /* Not found; backoff to silence context if non-silence filler context */ if (m->sil < 0) return -1; newl = m->ciphone[(int) lc].filler ? m->sil : lc; newr = m->ciphone[(int) rc].filler ? m->sil : rc; if ((newl == lc) && (newr == rc)) return -1; return (mdef_phone_id(m, ci, newl, newr, wpos)); } return (rcptr->pid); } int mdef_is_ciphone(mdef_t * m, int p) { assert(m); assert((p >= 0) && (p < m->n_phone)); return ((p < m->n_ciphone) ? 1 : 0); } int mdef_is_cisenone(mdef_t * m, int s) { assert(m); if (s >= m->n_sen) { return 0; } assert(s >= 0); return ((s == m->cd2cisen[s]) ? 1 : 0); } /* Parse tmat and state->senone mappings for phone p and fill in structure */ static void parse_tmat_senmap(mdef_t * m, char *line, long off, int p) { int32 wlen, n, s; char *lp; __BIGSTACKVARIABLE__ char word[1024]; lp = line + off; /* Read transition matrix id */ if ((sscanf(lp, "%d%n", &n, &wlen) != 1) || (n < 0)) E_FATAL("Missing or bad transition matrix id: %s\n", line); m->phone[p].tmat = n; if (m->n_tmat <= n) E_FATAL("tmat-id(%d) > #tmat in header(%d): %s\n", n, m->n_tmat, line); lp += wlen; /* Read senone mappings for each emitting state */ for (n = 0; n < m->n_emit_state; n++) { if ((sscanf(lp, "%d%n", &s, &wlen) != 1) || (s < 0)) E_FATAL("Missing or bad state[%d]->senone mapping: %s\n", n, line); if ((p < m->n_ciphone) && (m->n_ci_sen <= s)) E_FATAL("CI-senone-id(%d) > #CI-senones(%d): %s\n", s, m->n_ci_sen, line); if (m->n_sen <= s) E_FATAL("Senone-id(%d) > #senones(%d): %s\n", s, m->n_sen, line); m->sseq[p][n] = s; lp += wlen; } /* Check for the last non-emitting state N */ if ((sscanf(lp, "%s%n", word, &wlen) != 1) || (strcmp(word, "N") != 0)) E_FATAL("Missing non-emitting state spec: %s\n", line); lp += wlen; /* Check for end of line */ if (sscanf(lp, "%s%n", word, &wlen) == 1) E_FATAL("Non-empty beyond non-emitting final state: %s\n", line); } static void parse_base_line(mdef_t * m, char *line, int p) { int32 wlen, n; __BIGSTACKVARIABLE__ char word[1024], *lp; int ci; lp = line; /* Read base phone name */ if (sscanf(lp, "%s%n", word, &wlen) != 1) E_FATAL("Missing base phone name: %s\n", line); lp += wlen; /* Make sure it's not a duplicate */ ci = mdef_ciphone_id(m, word); if (ci >= 0) E_FATAL("Duplicate base phone: %s\n", line); /* Add ciphone to ciphone table with id p */ ciphone_add(m, word, p); ci = (int) p; /* Read and skip "-" for lc, rc, wpos */ for (n = 0; n < 3; n++) { if ((sscanf(lp, "%s%n", word, &wlen) != 1) || (strcmp(word, "-") != 0)) E_FATAL("Bad context info for base phone: %s\n", line); lp += wlen; } /* Read filler attribute, if present */ if (sscanf(lp, "%s%n", word, &wlen) != 1) E_FATAL("Missing filler atribute field: %s\n", line); lp += wlen; if (strcmp(word, "filler") == 0) m->ciphone[(int) ci].filler = 1; else if (strcmp(word, "n/a") == 0) m->ciphone[(int) ci].filler = 0; else E_FATAL("Bad filler attribute field: %s\n", line); triphone_add(m, ci, -1, -1, WORD_POSN_UNDEFINED, p); /* Parse remainder of line: transition matrix and state->senone mappings */ parse_tmat_senmap(m, line, lp - line, p); } static void parse_tri_line(mdef_t * m, char *line, int p) { int32 wlen; __BIGSTACKVARIABLE__ char word[1024], *lp; int ci, lc, rc; word_posn_t wpos = WORD_POSN_BEGIN; lp = line; /* Read base phone name */ if (sscanf(lp, "%s%n", word, &wlen) != 1) E_FATAL("Missing base phone name: %s\n", line); lp += wlen; ci = mdef_ciphone_id(m, word); if (ci < 0) E_FATAL("Unknown base phone: %s\n", line); /* Read lc */ if (sscanf(lp, "%s%n", word, &wlen) != 1) E_FATAL("Missing left context: %s\n", line); lp += wlen; lc = mdef_ciphone_id(m, word); if (lc < 0) E_FATAL("Unknown left context: %s\n", line); /* Read rc */ if (sscanf(lp, "%s%n", word, &wlen) != 1) E_FATAL("Missing right context: %s\n", line); lp += wlen; rc = mdef_ciphone_id(m, word); if (rc < 0) E_FATAL("Unknown right context: %s\n", line); /* Read tripone word-position within word */ if ((sscanf(lp, "%s%n", word, &wlen) != 1) || (word[1] != '\0')) E_FATAL("Missing or bad word-position spec: %s\n", line); lp += wlen; switch (word[0]) { case 'b': wpos = WORD_POSN_BEGIN; break; case 'e': wpos = WORD_POSN_END; break; case 's': wpos = WORD_POSN_SINGLE; break; case 'i': wpos = WORD_POSN_INTERNAL; break; default: E_FATAL("Bad word-position spec: %s\n", line); } /* Read filler attribute, if present. Must match base phone attribute */ if (sscanf(lp, "%s%n", word, &wlen) != 1) E_FATAL("Missing filler attribute field: %s\n", line); lp += wlen; if (((strcmp(word, "filler") == 0) && (m->ciphone[(int) ci].filler)) || ((strcmp(word, "n/a") == 0) && (!m->ciphone[(int) ci].filler))) { /* Everything is fine */ } else E_FATAL("Bad filler attribute field: %s\n", line); triphone_add(m, ci, lc, rc, wpos, p); /* Parse remainder of line: transition matrix and state->senone mappings */ parse_tmat_senmap(m, line, lp - line, p); } static void sseq_compress(mdef_t * m) { hash_table_t *h; uint16 **sseq; int32 n_sseq; int32 p, j, k; glist_t g; gnode_t *gn; hash_entry_t *he; k = m->n_emit_state * sizeof(int16); h = hash_table_new(m->n_phone, HASH_CASE_YES); n_sseq = 0; /* Identify unique senone-sequence IDs. BUG: tmat-id not being considered!! */ for (p = 0; p < m->n_phone; p++) { /* Add senone sequence to hash table */ if (n_sseq == (j = hash_table_enter_bkey_int32(h, (char *)m->sseq[p], k, n_sseq))) n_sseq++; m->phone[p].ssid = j; } /* Generate compacted sseq table */ sseq = ckd_calloc_2d(n_sseq, m->n_emit_state, sizeof(**sseq)); /* freed in mdef_free() */ g = hash_table_tolist(h, &j); assert(j == n_sseq); for (gn = g; gn; gn = gnode_next(gn)) { he = (hash_entry_t *) gnode_ptr(gn); j = (int32)(long)hash_entry_val(he); memcpy(sseq[j], hash_entry_key(he), k); } glist_free(g); /* Free the old, temporary senone sequence table, replace with compacted one */ ckd_free_2d(m->sseq); m->sseq = sseq; m->n_sseq = n_sseq; hash_table_free(h); } static int32 noncomment_line(char *line, int32 size, FILE * fp) { while (fgets(line, size, fp) != NULL) { if (line[0] != '#') return 0; } return -1; } /* * Initialize phones (ci and triphones) and state->senone mappings from .mdef file. */ mdef_t * mdef_init(char *mdeffile, int32 breport) { FILE *fp; int32 n_ci, n_tri, n_map, n; __BIGSTACKVARIABLE__ char tag[1024], buf[1024]; uint16 **senmap; int p; int32 s, ci, cd; mdef_t *m; if (!mdeffile) E_FATAL("No mdef-file\n"); if (breport) E_INFO("Reading model definition: %s\n", mdeffile); m = (mdef_t *) ckd_calloc(1, sizeof(mdef_t)); /* freed in mdef_free */ if ((fp = fopen(mdeffile, "r")) == NULL) E_FATAL_SYSTEM("Failed to open mdef file '%s' for reading", mdeffile); if (noncomment_line(buf, sizeof(buf), fp) < 0) E_FATAL("Empty file: %s\n", mdeffile); if (strncmp(buf, "BMDF", 4) == 0 || strncmp(buf, "FDMB", 4) == 0) { E_INFO ("Found byte-order mark %.4s, assuming this is a binary mdef file\n", buf); fclose(fp); ckd_free(m); return NULL; } if (strncmp(buf, MODEL_DEF_VERSION, strlen(MODEL_DEF_VERSION)) != 0) E_FATAL("Version error: Expecing %s, but read %s\n", MODEL_DEF_VERSION, buf); /* Read #base phones, #triphones, #senone mappings defined in header */ n_ci = -1; n_tri = -1; n_map = -1; m->n_ci_sen = -1; m->n_sen = -1; m->n_tmat = -1; do { if (noncomment_line(buf, sizeof(buf), fp) < 0) E_FATAL("Incomplete header\n"); if ((sscanf(buf, "%d %s", &n, tag) != 2) || (n < 0)) E_FATAL("Error in header: %s\n", buf); if (strcmp(tag, "n_base") == 0) n_ci = n; else if (strcmp(tag, "n_tri") == 0) n_tri = n; else if (strcmp(tag, "n_state_map") == 0) n_map = n; else if (strcmp(tag, "n_tied_ci_state") == 0) m->n_ci_sen = n; else if (strcmp(tag, "n_tied_state") == 0) m->n_sen = n; else if (strcmp(tag, "n_tied_tmat") == 0) m->n_tmat = n; else E_FATAL("Unknown header line: %s\n", buf); } while ((n_ci < 0) || (n_tri < 0) || (n_map < 0) || (m->n_ci_sen < 0) || (m->n_sen < 0) || (m->n_tmat < 0)); if ((n_ci == 0) || (m->n_ci_sen == 0) || (m->n_tmat == 0) || (m->n_ci_sen > m->n_sen)) E_FATAL("%s: Error in header\n", mdeffile); /* Check typesize limits */ if (n_ci >= MAX_INT16) E_FATAL("%s: #CI phones (%d) exceeds limit (%d)\n", mdeffile, n_ci, MAX_INT16); if (n_ci + n_tri >= MAX_INT32) /* Comparison is always false... */ E_FATAL("%s: #Phones (%d) exceeds limit (%d)\n", mdeffile, n_ci + n_tri, MAX_INT32); if (m->n_sen >= MAX_INT16) E_FATAL("%s: #senones (%d) exceeds limit (%d)\n", mdeffile, m->n_sen, MAX_INT16); if (m->n_tmat >= MAX_INT32) /* Comparison is always false... */ E_FATAL("%s: #tmats (%d) exceeds limit (%d)\n", mdeffile, m->n_tmat, MAX_INT32); m->n_emit_state = (n_map / (n_ci + n_tri)) - 1; if ((m->n_emit_state + 1) * (n_ci + n_tri) != n_map) E_FATAL ("Header error: n_state_map not a multiple of n_ci*n_tri\n"); /* Initialize ciphone info */ m->n_ciphone = n_ci; m->ciphone_ht = hash_table_new(n_ci, HASH_CASE_YES); /* With case-insensitive string names *//* freed in mdef_free */ m->ciphone = (ciphone_t *) ckd_calloc(n_ci, sizeof(ciphone_t)); /* freed in mdef_free */ /* Initialize phones info (ciphones + triphones) */ m->n_phone = n_ci + n_tri; m->phone = (phone_t *) ckd_calloc(m->n_phone, sizeof(phone_t)); /* freed in mdef_free */ /* Allocate space for state->senone map for each phone */ senmap = ckd_calloc_2d(m->n_phone, m->n_emit_state, sizeof(**senmap)); /* freed in mdef_free */ m->sseq = senmap; /* TEMPORARY; until it is compressed into just the unique ones */ /* Allocate initial space for -> pid mapping */ m->wpos_ci_lclist = (ph_lc_t ***) ckd_calloc_2d(N_WORD_POSN, m->n_ciphone, sizeof(ph_lc_t *)); /* freed in mdef_free */ /* * Read base phones and triphones. They'll simply be assigned a running sequence * number as their "phone-id". If the phone-id < n_ci, it's a ciphone. */ /* Read base phones */ for (p = 0; p < n_ci; p++) { if (noncomment_line(buf, sizeof(buf), fp) < 0) E_FATAL("Premature EOF reading CIphone %d\n", p); parse_base_line(m, buf, p); } m->sil = mdef_ciphone_id(m, S3_SILENCE_CIPHONE); /* Read triphones, if any */ for (; p < m->n_phone; p++) { if (noncomment_line(buf, sizeof(buf), fp) < 0) E_FATAL("Premature EOF reading phone %d\n", p); parse_tri_line(m, buf, p); } if (noncomment_line(buf, sizeof(buf), fp) >= 0) E_ERROR("Non-empty file beyond expected #phones (%d)\n", m->n_phone); /* Build CD senones to CI senones map */ if (m->n_ciphone * m->n_emit_state != m->n_ci_sen) E_FATAL ("#CI-senones(%d) != #CI-phone(%d) x #emitting-states(%d)\n", m->n_ci_sen, m->n_ciphone, m->n_emit_state); m->cd2cisen = (int16 *) ckd_calloc(m->n_sen, sizeof(*m->cd2cisen)); /* freed in mdef_free */ m->sen2cimap = (int16 *) ckd_calloc(m->n_sen, sizeof(*m->sen2cimap)); /* freed in mdef_free */ for (s = 0; s < m->n_sen; s++) m->sen2cimap[s] = -1; for (s = 0; s < m->n_ci_sen; s++) { /* CI senones */ m->cd2cisen[s] = s; m->sen2cimap[s] = s / m->n_emit_state; } for (p = n_ci; p < m->n_phone; p++) { /* CD senones */ for (s = 0; s < m->n_emit_state; s++) { cd = m->sseq[p][s]; ci = m->sseq[m->phone[p].ci][s]; m->cd2cisen[cd] = ci; m->sen2cimap[cd] = m->phone[p].ci; } } sseq_compress(m); fclose(fp); return m; } void mdef_report(mdef_t * m) { E_INFO_NOFN("Initialization of mdef_t, report:\n"); E_INFO_NOFN ("%d CI-phone, %d CD-phone, %d emitstate/phone, %d CI-sen, %d Sen, %d Sen-Seq\n", m->n_ciphone, m->n_phone - m->n_ciphone, m->n_emit_state, m->n_ci_sen, m->n_sen, m->n_sseq); E_INFO_NOFN("\n"); } /* RAH 4.23.01, Need to step down the ->next list to see if there are any more things to free */ /* RAH 4.19.01, Attempt to free memory that was allocated within this module I have not verified that all the memory has been freed. I've taken only a reasonable effort for now. RAH 4.24.01 - verified that all memory is released. */ void mdef_free_recursive_lc(ph_lc_t * lc) { if (lc == NULL) return; if (lc->rclist) mdef_free_recursive_rc(lc->rclist); if (lc->next) mdef_free_recursive_lc(lc->next); ckd_free((void *) lc); } void mdef_free_recursive_rc(ph_rc_t * rc) { if (rc == NULL) return; if (rc->next) mdef_free_recursive_rc(rc->next); ckd_free((void *) rc); } /* RAH, Free memory that was allocated in mdef_init Rational purify shows that no leaks exist */ void mdef_free(mdef_t * m) { int i, j; if (m) { if (m->sen2cimap) ckd_free((void *) m->sen2cimap); if (m->cd2cisen) ckd_free((void *) m->cd2cisen); /* RAH, go down the ->next list and delete all the pieces */ for (i = 0; i < N_WORD_POSN; i++) for (j = 0; j < m->n_ciphone; j++) if (m->wpos_ci_lclist[i][j]) { mdef_free_recursive_lc(m->wpos_ci_lclist[i][j]->next); mdef_free_recursive_rc(m->wpos_ci_lclist[i][j]-> rclist); } for (i = 0; i < N_WORD_POSN; i++) for (j = 0; j < m->n_ciphone; j++) if (m->wpos_ci_lclist[i][j]) ckd_free((void *) m->wpos_ci_lclist[i][j]); if (m->wpos_ci_lclist) ckd_free_2d((void *) m->wpos_ci_lclist); if (m->sseq) ckd_free_2d((void *) m->sseq); /* Free phone context */ if (m->phone) ckd_free((void *) m->phone); if (m->ciphone_ht) hash_table_free(m->ciphone_ht); for (i = 0; i < m->n_ciphone; i++) { if (m->ciphone[i].name) ckd_free((void *) m->ciphone[i].name); } if (m->ciphone) ckd_free((void *) m->ciphone); ckd_free((void *) m); } } pocketsphinx-5prealpha/src/libpocketsphinx/kws_search.h0000664000175000017500000001062112560370306020700 00000000000000/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* ==================================================================== * Copyright (c) 2013 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. * * ==================================================================== * */ /* * kws_search.h -- Search structures for keyword spotting. */ #ifndef __KWS_SEARCH_H__ #define __KWS_SEARCH_H__ /* SphinxBase headers. */ #include #include /* Local headers. */ #include "pocketsphinx_internal.h" #include "kws_detections.h" #include "hmm.h" /** * Segmentation "iterator" for KWS history. */ typedef struct kws_seg_s { ps_seg_t base; /**< Base structure. */ gnode_t *detection; /**< Keyword detection correspondent to segment. */ frame_idx_t last_frame; /**< Last frame to raise the detection */ } kws_seg_t; typedef struct kws_keyword_s { char* word; int32 threshold; hmm_t* hmms; int32 n_hmms; } kws_keyword_t; /** * Implementation of KWS search structure. */ typedef struct kws_search_s { ps_search_t base; hmm_context_t *hmmctx; /**< HMM context. */ kws_detections_t *detections; /**< Keyword spotting history */ kws_keyword_t* keyphrases; /**< Keyphrases to spot */ int n_keyphrases; /**< Keyphrases amount */ frame_idx_t frame; /**< Frame index */ int32 beam; int32 plp; /**< Phone loop probability */ int32 bestscore; /**< For beam pruning */ int32 def_threshold; /**< default threshold for p(hyp)/p(altern) ratio */ int32 delay; /**< Delay to wait for best detection score */ int32 n_pl; /**< Number of CI phones */ hmm_t *pl_hmms; /**< Phone loop hmms - hmms of CI phones */ } kws_search_t; /** * Create, initialize and return a search module. Gets keywords either * from keyphrase or from a keyphrase file. */ ps_search_t *kws_search_init(const char *name, const char *keyphrase, const char *keyfile, cmd_ln_t * config, acmod_t * acmod, dict_t * dict, dict2pid_t * d2p); /** * Deallocate search structure. */ void kws_search_free(ps_search_t * search); /** * Update KWS search module for new key phrase. */ int kws_search_reinit(ps_search_t * kwss, dict_t * dict, dict2pid_t * d2p); /** * Prepare the KWS search structure for beginning decoding of the next * utterance. */ int kws_search_start(ps_search_t * search); /** * Step one frame forward through the Viterbi search. */ int kws_search_step(ps_search_t * search, int frame_idx); /** * Windup and clean the KWS search structure after utterance. */ int kws_search_finish(ps_search_t * search); /** * Get hypothesis string from the KWS search. */ char const *kws_search_hyp(ps_search_t * search, int32 * out_score, int32 * out_is_final); /** * Get active keyphrases */ char* kws_search_get_keywords(ps_search_t * search); #endif /* __KWS_SEARCH_H__ */ pocketsphinx-5prealpha/src/libpocketsphinx/acmod.h0000664000175000017500000004042312504317100017624 00000000000000/* -*- 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 acmod.h Acoustic model structures for PocketSphinx. * @author David Huggins-Daines */ #ifndef __ACMOD_H__ #define __ACMOD_H__ /* System headers. */ #include /* SphinxBase headers. */ #include #include #include #include #include #include #include /* Local headers. */ #include "ps_mllr.h" #include "bin_mdef.h" #include "tmat.h" #include "hmm.h" /** * States in utterance processing. */ typedef enum acmod_state_e { ACMOD_IDLE, /**< Not in an utterance. */ ACMOD_STARTED, /**< Utterance started, no data yet. */ ACMOD_PROCESSING, /**< Utterance in progress. */ ACMOD_ENDED /**< Utterance ended, still buffering. */ } acmod_state_t; /** * Dummy senone score value for unintentionally active states. */ #define SENSCR_DUMMY 0x7fff /** * Feature space linear transform structure. */ struct ps_mllr_s { int refcnt; /**< Reference count. */ int n_class; /**< Number of MLLR classes. */ int n_feat; /**< Number of feature streams. */ int *veclen; /**< Length of input vectors for each stream. */ float32 ****A; /**< Rotation part of mean transformations. */ float32 ***b; /**< Bias part of mean transformations. */ float32 ***h; /**< Diagonal transformation of variances. */ int32 *cb2mllr; /**< Mapping from codebooks to transformations. */ }; /** * Acoustic model parameter structure. */ typedef struct ps_mgau_s ps_mgau_t; typedef struct ps_mgaufuncs_s { char const *name; int (*frame_eval)(ps_mgau_t *mgau, int16 *senscr, uint8 *senone_active, int32 n_senone_active, mfcc_t ** feat, int32 frame, int32 compallsen); int (*transform)(ps_mgau_t *mgau, ps_mllr_t *mllr); void (*free)(ps_mgau_t *mgau); } ps_mgaufuncs_t; struct ps_mgau_s { ps_mgaufuncs_t *vt; /**< vtable of mgau functions. */ int frame_idx; /**< frame counter. */ }; #define ps_mgau_base(mg) ((ps_mgau_t *)(mg)) #define ps_mgau_frame_eval(mg,senscr,senone_active,n_senone_active,feat,frame,compallsen) \ (*ps_mgau_base(mg)->vt->frame_eval) \ (mg, senscr, senone_active, n_senone_active, feat, frame, compallsen) #define ps_mgau_transform(mg, mllr) \ (*ps_mgau_base(mg)->vt->transform)(mg, mllr) #define ps_mgau_free(mg) \ (*ps_mgau_base(mg)->vt->free)(mg) /** * Acoustic model structure. * * This object encapsulates all stages of acoustic processing, from * raw audio input to acoustic score output. The reason for grouping * all of these modules together is that they all have to "agree" in * their parameterizations, and the configuration of the acoustic and * dynamic feature computation is completely dependent on the * parameters used to build the original acoustic model (which should * by now always be specified in a feat.params file). * * Because there is not a one-to-one correspondence from blocks of * input audio or frames of input features to frames of acoustic * scores (due to dynamic feature calculation), results may not be * immediately available after input, and the output results will not * correspond to the last piece of data input. * * TODO: In addition, this structure serves the purpose of queueing * frames of features (and potentially also scores in the future) for * asynchronous passes of recognition operating in parallel. */ struct acmod_s { /* Global objects, not retained. */ cmd_ln_t *config; /**< Configuration. */ logmath_t *lmath; /**< Log-math computation. */ glist_t strings; /**< Temporary acoustic model filenames. */ /* Feature computation: */ fe_t *fe; /**< Acoustic feature computation. */ feat_t *fcb; /**< Dynamic feature computation. */ /* Model parameters: */ bin_mdef_t *mdef; /**< Model definition. */ tmat_t *tmat; /**< Transition matrices. */ ps_mgau_t *mgau; /**< Model parameters. */ ps_mllr_t *mllr; /**< Speaker transformation. */ /* Senone scoring: */ int16 *senone_scores; /**< GMM scores for current frame. */ bitvec_t *senone_active_vec; /**< Active GMMs in current frame. */ uint8 *senone_active; /**< Array of deltas to active GMMs. */ int senscr_frame; /**< Frame index for senone_scores. */ int n_senone_active; /**< Number of active GMMs. */ int log_zero; /**< Zero log-probability value. */ /* Utterance processing: */ mfcc_t **mfc_buf; /**< Temporary buffer of acoustic features. */ mfcc_t ***feat_buf; /**< Temporary buffer of dynamic features. */ FILE *rawfh; /**< File for writing raw audio data. */ FILE *mfcfh; /**< File for writing acoustic feature data. */ FILE *senfh; /**< File for writing senone score data. */ FILE *insenfh; /**< Input senone score file. */ long *framepos; /**< File positions of recent frames in senone file. */ /* Rawdata collected during decoding */ int16 *rawdata; int32 rawdata_size; int32 rawdata_pos; /* A whole bunch of flags and counters: */ uint8 state; /**< State of utterance processing. */ uint8 compallsen; /**< Compute all senones? */ uint8 grow_feat; /**< Whether to grow feat_buf. */ uint8 insen_swap; /**< Whether to swap input senone score. */ frame_idx_t utt_start_frame; /**< Index of the utterance start in the stream, all timings are relative to that. */ frame_idx_t output_frame; /**< Index of next frame of dynamic features. */ frame_idx_t n_mfc_alloc; /**< Number of frames allocated in mfc_buf */ frame_idx_t n_mfc_frame; /**< Number of frames active in mfc_buf */ frame_idx_t mfc_outidx; /**< Start of active frames in mfc_buf */ frame_idx_t n_feat_alloc; /**< Number of frames allocated in feat_buf */ frame_idx_t n_feat_frame; /**< Number of frames active in feat_buf */ frame_idx_t feat_outidx; /**< Start of active frames in feat_buf */ }; typedef struct acmod_s acmod_t; /** * Initialize an acoustic model. * * @param config a command-line object containing parameters. This * pointer is not retained by this object. * @param lmath global log-math parameters. * @param fe a previously-initialized acoustic feature module to use, * or NULL to create one automatically. If this is supplied * and its parameters do not match those in the acoustic * model, this function will fail. This pointer is not retained. * @param fe a previously-initialized dynamic feature module to use, * or NULL to create one automatically. If this is supplied * and its parameters do not match those in the acoustic * model, this function will fail. This pointer is not retained. * @return a newly initialized acmod_t, or NULL on failure. */ acmod_t *acmod_init(cmd_ln_t *config, logmath_t *lmath, fe_t *fe, feat_t *fcb); /** * Adapt acoustic model using a linear transform. * * @param mllr The new transform to use, or NULL to update the existing * transform. The decoder retains ownership of this pointer, * so you should not attempt to free it manually. Use * ps_mllr_retain() if you wish to reuse it * elsewhere. * @return The updated transform object for this decoder, or * NULL on failure. */ ps_mllr_t *acmod_update_mllr(acmod_t *acmod, ps_mllr_t *mllr); /** * Start logging senone scores to a filehandle. * * @param acmod Acoustic model object. * @param logfh Filehandle to log to. * @return 0 for success, <0 on error. */ int acmod_set_senfh(acmod_t *acmod, FILE *senfh); /** * Start logging MFCCs to a filehandle. * * @param acmod Acoustic model object. * @param logfh Filehandle to log to. * @return 0 for success, <0 on error. */ int acmod_set_mfcfh(acmod_t *acmod, FILE *logfh); /** * Start logging raw audio to a filehandle. * * @param acmod Acoustic model object. * @param logfh Filehandle to log to. * @return 0 for success, <0 on error. */ int acmod_set_rawfh(acmod_t *acmod, FILE *logfh); /** * Finalize an acoustic model. */ void acmod_free(acmod_t *acmod); /** * Mark the start of an utterance. */ int acmod_start_utt(acmod_t *acmod); /** * Mark the end of an utterance. */ int acmod_end_utt(acmod_t *acmod); /** * Rewind the current utterance, allowing it to be rescored. * * After calling this function, the internal frame index is reset, and * acmod_score() will return scores starting at the first frame of the * current utterance. Currently, acmod_set_grow() must have been * called to enable growing the feature buffer in order for this to * work. In the future, senone scores may be cached instead. * * @return 0 for success, <0 for failure (if the utterance can't be * rewound due to no feature or score data available) */ int acmod_rewind(acmod_t *acmod); /** * Advance the frame index. * * This function moves to the next frame of input data. Subsequent * calls to acmod_score() will return scores for that frame, until the * next call to acmod_advance(). * * @return New frame index. */ int acmod_advance(acmod_t *acmod); /** * Set memory allocation policy for utterance processing. * * @param grow_feat If non-zero, the internal dynamic feature buffer * will expand as necessary to encompass any amount of data fed to the * model. * @return previous allocation policy. */ int acmod_set_grow(acmod_t *acmod, int grow_feat); /** * TODO: Set queue length for utterance processing. * * This function allows multiple concurrent passes of search to * operate on different parts of the utterance. */ /** * Feed raw audio data to the acoustic model for scoring. * * @param inout_raw In: Pointer to buffer of raw samples * Out: Pointer to next sample to be read * @param inout_n_samps In: Number of samples available * Out: Number of samples remaining * @param full_utt If non-zero, this block represents a full * utterance and should be processed as such. * @return Number of frames of data processed. */ int acmod_process_raw(acmod_t *acmod, int16 const **inout_raw, size_t *inout_n_samps, int full_utt); /** * Feed acoustic feature data into the acoustic model for scoring. * * @param inout_cep In: Pointer to buffer of features * Out: Pointer to next frame to be read * @param inout_n_frames In: Number of frames available * Out: Number of frames remaining * @param full_utt If non-zero, this block represents a full * utterance and should be processed as such. * @return Number of frames of data processed. */ int acmod_process_cep(acmod_t *acmod, mfcc_t ***inout_cep, int *inout_n_frames, int full_utt); /** * Feed dynamic feature data into the acoustic model for scoring. * * Unlike acmod_process_raw() and acmod_process_cep(), this function * accepts a single frame at a time. This is because there is no need * to do buffering when using dynamic features as input. However, if * the dynamic feature buffer is full, this function will fail, so you * should either always check the return value, or always pair a call * to it with a call to acmod_score(). * * @param feat Pointer to one frame of dynamic features. * @return Number of frames processed (either 0 or 1). */ int acmod_process_feat(acmod_t *acmod, mfcc_t **feat); /** * Set up a senone score dump file for input. * * @param insenfh File handle of dump file * @return 0 for success, <0 for failure */ int acmod_set_insenfh(acmod_t *acmod, FILE *insenfh); /** * Read one frame of scores from senone score dump file. * * @return Number of frames read or <0 on error. */ int acmod_read_scores(acmod_t *acmod); /** * Get a frame of dynamic feature data. * * @param inout_frame_idx Input: frame index to get, or NULL * to obtain features for the most recent frame. * Output: frame index corresponding to this * set of features. * @return Feature array, or NULL if requested frame is not available. */ mfcc_t **acmod_get_frame(acmod_t *acmod, int *inout_frame_idx); /** * Score one frame of data. * * @param inout_frame_idx Input: frame index to score, or NULL * to obtain scores for the most recent frame. * Output: frame index corresponding to this * set of scores. * @return Array of senone scores for this frame, or NULL if no frame * is available for scoring (such as if a frame index is * requested that is not yet or no longer available). The * data pointed to persists only until the next call to * acmod_score() or acmod_advance(). */ int16 const *acmod_score(acmod_t *acmod, int *inout_frame_idx); /** * Write senone dump file header. */ int acmod_write_senfh_header(acmod_t *acmod, FILE *logfh); /** * Write a frame of senone scores to a dump file. */ int acmod_write_scores(acmod_t *acmod, int n_active, uint8 const *active, int16 const *senscr, FILE *senfh); /** * Get best score and senone index for current frame. */ int acmod_best_score(acmod_t *acmod, int *out_best_senid); /** * Clear set of active senones. */ void acmod_clear_active(acmod_t *acmod); /** * Activate senones associated with an HMM. */ void acmod_activate_hmm(acmod_t *acmod, hmm_t *hmm); /** * Activate a single senone. */ #define acmod_activate_sen(acmod, sen) bitvec_set((acmod)->senone_active_vec, sen) /** * Build active list from */ int32 acmod_flags2list(acmod_t *acmod); /** * Get the offset of the utterance start of the current stream, helpful for stream-wide timing. */ int32 acmod_stream_offset(acmod_t *acmod); /** * Reset the current stream */ void acmod_start_stream(acmod_t *acmod); /** * Sets the limit of the raw audio data to store */ void acmod_set_rawdata_size(acmod_t *acmod, int32 size); /** * Retrieves the raw data collected during utterance decoding */ void acmod_get_rawdata(acmod_t *acmod, int16 **buffer, int32 *size); #endif /* __ACMOD_H__ */ pocketsphinx-5prealpha/src/libpocketsphinx/ps_alignment.c0000664000175000017500000003404612504317656021240 00000000000000/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* ==================================================================== * Copyright (c) 2010 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 ps_alignment.c Multi-level alignment structure */ /* System headers. */ /* SphinxBase headers. */ #include /* Local headers. */ #include "ps_alignment.h" ps_alignment_t * ps_alignment_init(dict2pid_t *d2p) { ps_alignment_t *al = ckd_calloc(1, sizeof(*al)); al->d2p = dict2pid_retain(d2p); return al; } int ps_alignment_free(ps_alignment_t *al) { if (al == NULL) return 0; dict2pid_free(al->d2p); ckd_free(al->word.seq); ckd_free(al->sseq.seq); ckd_free(al->state.seq); ckd_free(al); return 0; } #define VECTOR_GROW 10 static void * vector_grow_one(void *ptr, uint16 *n_alloc, uint16 *n, size_t item_size) { int newsize = *n + 1; if (newsize < *n_alloc) { *n += 1; return ptr; } newsize += VECTOR_GROW; if (newsize > 0xffff) return NULL; ptr = ckd_realloc(ptr, newsize * item_size); *n += 1; *n_alloc = newsize; return ptr; } static ps_alignment_entry_t * ps_alignment_vector_grow_one(ps_alignment_vector_t *vec) { void *ptr; ptr = vector_grow_one(vec->seq, &vec->n_alloc, &vec->n_ent, sizeof(*vec->seq)); if (ptr == NULL) return NULL; vec->seq = ptr; return vec->seq + vec->n_ent - 1; } static void ps_alignment_vector_empty(ps_alignment_vector_t *vec) { vec->n_ent = 0; } int ps_alignment_add_word(ps_alignment_t *al, int32 wid, int duration) { ps_alignment_entry_t *ent; if ((ent = ps_alignment_vector_grow_one(&al->word)) == NULL) return 0; ent->id.wid = wid; if (al->word.n_ent > 1) ent->start = ent[-1].start + ent[-1].duration; else ent->start = 0; ent->duration = duration; ent->score = 0; ent->parent = PS_ALIGNMENT_NONE; ent->child = PS_ALIGNMENT_NONE; return al->word.n_ent; } int ps_alignment_populate(ps_alignment_t *al) { dict2pid_t *d2p; dict_t *dict; bin_mdef_t *mdef; int i, lc; /* Clear phone and state sequences. */ ps_alignment_vector_empty(&al->sseq); ps_alignment_vector_empty(&al->state); /* For each word, expand to phones/senone sequences. */ d2p = al->d2p; dict = d2p->dict; mdef = d2p->mdef; lc = bin_mdef_silphone(mdef); for (i = 0; i < al->word.n_ent; ++i) { ps_alignment_entry_t *went = al->word.seq + i; ps_alignment_entry_t *sent; int wid = went->id.wid; int len = dict_pronlen(dict, wid); int j, rc; if (i < al->word.n_ent - 1) rc = dict_first_phone(dict, al->word.seq[i+1].id.wid); else rc = bin_mdef_silphone(mdef); /* First phone. */ if ((sent = ps_alignment_vector_grow_one(&al->sseq)) == NULL) { E_ERROR("Failed to add phone entry!\n"); return -1; } sent->id.pid.cipid = dict_first_phone(dict, wid); sent->id.pid.tmatid = bin_mdef_pid2tmatid(mdef, sent->id.pid.cipid); sent->start = went->start; sent->duration = went->duration; sent->score = 0; sent->parent = i; went->child = (uint16)(sent - al->sseq.seq); if (len == 1) sent->id.pid.ssid = dict2pid_lrdiph_rc(d2p, sent->id.pid.cipid, lc, rc); else sent->id.pid.ssid = dict2pid_ldiph_lc(d2p, sent->id.pid.cipid, dict_second_phone(dict, wid), lc); assert(sent->id.pid.ssid != BAD_SSID); /* Internal phones. */ for (j = 1; j < len - 1; ++j) { if ((sent = ps_alignment_vector_grow_one(&al->sseq)) == NULL) { E_ERROR("Failed to add phone entry!\n"); return -1; } sent->id.pid.cipid = dict_pron(dict, wid, j); sent->id.pid.tmatid = bin_mdef_pid2tmatid(mdef, sent->id.pid.cipid); sent->id.pid.ssid = dict2pid_internal(d2p, wid, j); assert(sent->id.pid.ssid != BAD_SSID); sent->start = went->start; sent->duration = went->duration; sent->score = 0; sent->parent = i; } /* Last phone. */ if (j < len) { xwdssid_t *rssid; assert(j == len - 1); if ((sent = ps_alignment_vector_grow_one(&al->sseq)) == NULL) { E_ERROR("Failed to add phone entry!\n"); return -1; } sent->id.pid.cipid = dict_last_phone(dict, wid); sent->id.pid.tmatid = bin_mdef_pid2tmatid(mdef, sent->id.pid.cipid); rssid = dict2pid_rssid(d2p, sent->id.pid.cipid, dict_second_last_phone(dict, wid)); sent->id.pid.ssid = rssid->ssid[rssid->cimap[rc]]; assert(sent->id.pid.ssid != BAD_SSID); sent->start = went->start; sent->duration = went->duration; sent->score = 0; sent->parent = i; } /* Update lc. Could just use sent->id.pid.cipid here but that * seems needlessly obscure. */ lc = dict_last_phone(dict, wid); } /* For each senone sequence, expand to senones. (we could do this * nested above but this makes it more clear and easier to * refactor) */ for (i = 0; i < al->sseq.n_ent; ++i) { ps_alignment_entry_t *pent = al->sseq.seq + i; ps_alignment_entry_t *sent; int j; for (j = 0; j < bin_mdef_n_emit_state(mdef); ++j) { if ((sent = ps_alignment_vector_grow_one(&al->state)) == NULL) { E_ERROR("Failed to add state entry!\n"); return -1; } sent->id.senid = bin_mdef_sseq2sen(mdef, pent->id.pid.ssid, j); assert(sent->id.senid != BAD_SENID); sent->start = pent->start; sent->duration = pent->duration; sent->score = 0; sent->parent = i; if (j == 0) pent->child = (uint16)(sent - al->state.seq); } } return 0; } /* FIXME: Somewhat the same as the above function, needs refactoring */ int ps_alignment_populate_ci(ps_alignment_t *al) { dict2pid_t *d2p; dict_t *dict; bin_mdef_t *mdef; int i; /* Clear phone and state sequences. */ ps_alignment_vector_empty(&al->sseq); ps_alignment_vector_empty(&al->state); /* For each word, expand to phones/senone sequences. */ d2p = al->d2p; dict = d2p->dict; mdef = d2p->mdef; for (i = 0; i < al->word.n_ent; ++i) { ps_alignment_entry_t *went = al->word.seq + i; ps_alignment_entry_t *sent; int wid = went->id.wid; int len = dict_pronlen(dict, wid); int j; for (j = 0; j < len; ++j) { if ((sent = ps_alignment_vector_grow_one(&al->sseq)) == NULL) { E_ERROR("Failed to add phone entry!\n"); return -1; } sent->id.pid.cipid = dict_pron(dict, wid, j); sent->id.pid.tmatid = bin_mdef_pid2tmatid(mdef, sent->id.pid.cipid); sent->id.pid.ssid = bin_mdef_pid2ssid(mdef, sent->id.pid.cipid); assert(sent->id.pid.ssid != BAD_SSID); sent->start = went->start; sent->duration = went->duration; sent->score = 0; sent->parent = i; } } /* For each senone sequence, expand to senones. (we could do this * nested above but this makes it more clear and easier to * refactor) */ for (i = 0; i < al->sseq.n_ent; ++i) { ps_alignment_entry_t *pent = al->sseq.seq + i; ps_alignment_entry_t *sent; int j; for (j = 0; j < bin_mdef_n_emit_state(mdef); ++j) { if ((sent = ps_alignment_vector_grow_one(&al->state)) == NULL) { E_ERROR("Failed to add state entry!\n"); return -1; } sent->id.senid = bin_mdef_sseq2sen(mdef, pent->id.pid.ssid, j); assert(sent->id.senid != BAD_SENID); sent->start = pent->start; sent->duration = pent->duration; sent->score = 0; sent->parent = i; if (j == 0) pent->child = (uint16)(sent - al->state.seq); } } return 0; } int ps_alignment_propagate(ps_alignment_t *al) { ps_alignment_entry_t *last_ent = NULL; int i; /* Propagate duration up from states to phones. */ for (i = 0; i < al->state.n_ent; ++i) { ps_alignment_entry_t *sent = al->state.seq + i; ps_alignment_entry_t *pent = al->sseq.seq + sent->parent; if (pent != last_ent) { pent->start = sent->start; pent->duration = 0; pent->score = 0; } pent->duration += sent->duration; pent->score += sent->score; last_ent = pent; } /* Propagate duration up from phones to words. */ last_ent = NULL; for (i = 0; i < al->sseq.n_ent; ++i) { ps_alignment_entry_t *pent = al->sseq.seq + i; ps_alignment_entry_t *went = al->word.seq + pent->parent; if (went != last_ent) { went->start = pent->start; went->duration = 0; went->score = 0; } went->duration += pent->duration; went->score += pent->score; last_ent = went; } return 0; } int ps_alignment_n_words(ps_alignment_t *al) { return (int)al->word.n_ent; } int ps_alignment_n_phones(ps_alignment_t *al) { return (int)al->sseq.n_ent; } int ps_alignment_n_states(ps_alignment_t *al) { return (int)al->state.n_ent; } ps_alignment_iter_t * ps_alignment_words(ps_alignment_t *al) { ps_alignment_iter_t *itor; if (al->word.n_ent == 0) return NULL; itor = ckd_calloc(1, sizeof(*itor)); itor->al = al; itor->vec = &al->word; itor->pos = 0; return itor; } ps_alignment_iter_t * ps_alignment_phones(ps_alignment_t *al) { ps_alignment_iter_t *itor; if (al->sseq.n_ent == 0) return NULL; itor = ckd_calloc(1, sizeof(*itor)); itor->al = al; itor->vec = &al->sseq; itor->pos = 0; return itor; } ps_alignment_iter_t * ps_alignment_states(ps_alignment_t *al) { ps_alignment_iter_t *itor; if (al->state.n_ent == 0) return NULL; itor = ckd_calloc(1, sizeof(*itor)); itor->al = al; itor->vec = &al->state; itor->pos = 0; return itor; } ps_alignment_entry_t * ps_alignment_iter_get(ps_alignment_iter_t *itor) { return itor->vec->seq + itor->pos; } int ps_alignment_iter_free(ps_alignment_iter_t *itor) { ckd_free(itor); return 0; } ps_alignment_iter_t * ps_alignment_iter_goto(ps_alignment_iter_t *itor, int pos) { if (itor == NULL) return NULL; if (pos >= itor->vec->n_ent) { ps_alignment_iter_free(itor); return NULL; } itor->pos = pos; return itor; } ps_alignment_iter_t * ps_alignment_iter_next(ps_alignment_iter_t *itor) { if (itor == NULL) return NULL; if (++itor->pos >= itor->vec->n_ent) { ps_alignment_iter_free(itor); return NULL; } return itor; } ps_alignment_iter_t * ps_alignment_iter_prev(ps_alignment_iter_t *itor) { if (itor == NULL) return NULL; if (--itor->pos < 0) { ps_alignment_iter_free(itor); return NULL; } return itor; } ps_alignment_iter_t * ps_alignment_iter_up(ps_alignment_iter_t *itor) { ps_alignment_iter_t *itor2; if (itor == NULL) return NULL; if (itor->vec == &itor->al->word) return NULL; if (itor->vec->seq[itor->pos].parent == PS_ALIGNMENT_NONE) return NULL; itor2 = ckd_calloc(1, sizeof(*itor2)); itor2->al = itor->al; itor2->pos = itor->vec->seq[itor->pos].parent; if (itor->vec == &itor->al->sseq) itor2->vec = &itor->al->word; else itor2->vec = &itor->al->sseq; return itor2; } ps_alignment_iter_t * ps_alignment_iter_down(ps_alignment_iter_t *itor) { ps_alignment_iter_t *itor2; if (itor == NULL) return NULL; if (itor->vec == &itor->al->state) return NULL; if (itor->vec->seq[itor->pos].child == PS_ALIGNMENT_NONE) return NULL; itor2 = ckd_calloc(1, sizeof(*itor2)); itor2->al = itor->al; itor2->pos = itor->vec->seq[itor->pos].child; if (itor->vec == &itor->al->word) itor2->vec = &itor->al->sseq; else itor2->vec = &itor->al->state; return itor2; } pocketsphinx-5prealpha/src/libpocketsphinx/state_align_search.h0000664000175000017500000000643712520771215022400 00000000000000/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* ==================================================================== * Copyright (c) 2010 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 state_align_search.h State (and phone and word) alignment search. */ #ifndef __STATE_ALIGN_SEARCH_H__ #define __STATE_ALIGN_SEARCH_H__ /* SphinxBase headers. */ #include /* Local headers. */ #include "pocketsphinx_internal.h" #include "ps_alignment.h" #include "hmm.h" /** * History structure */ struct state_align_hist_s { uint16 id; int32 score; }; typedef struct state_align_hist_s state_align_hist_t; /** * Phone loop search structure. */ struct state_align_search_s { ps_search_t base; /**< Base search structure. */ hmm_context_t *hmmctx; /**< HMM context structure. */ ps_alignment_t *al; /**< Alignment structure being operated on. */ hmm_t *hmms; /**< Vector of HMMs corresponding to phone level. */ int n_phones; /**< Number of HMMs (phones). */ int frame; /**< Current frame being processed. */ int32 best_score; /**< Best score in current frame. */ int n_emit_state; /**< Number of emitting states (tokens per frame) */ state_align_hist_t *tokens; /**< Tokens (backpointers) for state alignment. */ int n_fr_alloc; /**< Number of frames of tokens allocated. */ }; typedef struct state_align_search_s state_align_search_t; ps_search_t *state_align_search_init(const char *name, cmd_ln_t *config, acmod_t *acmod, ps_alignment_t *al); #endif /* __STATE_ALIGN_SEARCH_H__ */ pocketsphinx-5prealpha/src/libpocketsphinx/hmm.h0000664000175000017500000002433212504317100017323 00000000000000/* -*- 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 hmm.h Hidden Markov Model base structures. */ #ifndef __HMM_H__ #define __HMM_H__ /* System headers. */ #include /* SphinxBase headers. */ #include #include /* PocketSphinx headers. */ #include "bin_mdef.h" #ifdef __cplusplus extern "C" { #endif /** * Type for frame index values. Used in HMM indexes and * backpointers and affects memory required.Due to limitations of FSG * search implementation this value needs to be signed. */ typedef int32 frame_idx_t; /** * Maximum number of frames in index, should be in sync with above. */ #define MAX_N_FRAMES MAX_INT32 /** Shift count for senone scores. */ #define SENSCR_SHIFT 10 /** * Large "bad" score. * * This number must be "bad" enough so that 4 times WORST_SCORE will * not overflow. The reason for this is that the search doesn't check * the scores in a model before evaluating the model and it may * require as many was 4 plies before the new 'good' score can wipe * out the initial WORST_SCORE initialization. */ #define WORST_SCORE ((int)0xE0000000) /** * Watch out, though! Transition matrix entries that are supposed to * be "zero" don't actually get that small due to quantization. */ #define TMAT_WORST_SCORE (-255) /** * Is one score better than another? */ #define BETTER_THAN > /** * Is one score worse than another? */ #define WORSE_THAN < /** \file hmm.h * \brief HMM data structure and operation * * For efficiency, this version is hardwired for two possible HMM * topologies, but will fall back to others: * * 5-state left-to-right HMMs: (0 is the *emitting* entry state and E * is a non-emitting exit state; the x's indicate allowed transitions * between source and destination states): * *
 *               0   1   2   3   4   E (destination-states)
 *           0   x   x   x
 *           1       x   x   x
 *           2           x   x   x
 *           3               x   x   x
 *           4                   x   x
 *    (source-states)
 * 
* * 5-state topologies that contain a subset of the above transitions should work as well. * * 3-state left-to-right HMMs (similar notation as the 5-state topology above): * *
 *               0   1   2   E (destination-states)
 *           0   x   x   x
 *           1       x   x   x
 *           2           x   x 
 *    (source-states)
 * 
* * 3-state topologies that contain a subset of the above transitions should work as well. */ /** * @struct hmm_context_t * @brief Shared information between a set of HMMs. * * We assume that the initial state is emitting and that the * transition matrix is n_emit_state x (n_emit_state+1), where the * extra destination dimension correponds to the non-emitting final or * exit state. */ typedef struct hmm_context_s { int32 n_emit_state; /**< Number of emitting states in this set of HMMs. */ uint8 ** const *tp; /**< State transition scores tp[id][from][to] (logs3 values). */ int16 const *senscore; /**< State emission scores senscore[senid] (negated scaled logs3 values). */ uint16 * const *sseq; /**< Senone sequence mapping. */ int32 *st_sen_scr; /**< Temporary array of senone scores (for some topologies). */ listelem_alloc_t *mpx_ssid_alloc; /**< Allocator for senone sequence ID arrays. */ void *udata; /**< Whatever you feel like, gosh. */ } hmm_context_t; /** * Hard-coded limit on the number of emitting states. */ #define HMM_MAX_NSTATE 5 /** * @struct hmm_t * @brief An individual HMM among the HMM search space. * * An individual HMM among the HMM search space. An HMM with N * emitting states consists of N+1 internal states including the * non-emitting exit (out) state. */ typedef struct hmm_s { hmm_context_t *ctx; /**< Shared context data for this HMM. */ int32 score[HMM_MAX_NSTATE]; /**< State scores for emitting states. */ int32 history[HMM_MAX_NSTATE]; /**< History indices for emitting states. */ int32 out_score; /**< Score for non-emitting exit state. */ int32 out_history; /**< History index for non-emitting exit state. */ uint16 ssid; /**< Senone sequence ID (for non-MPX) */ uint16 senid[HMM_MAX_NSTATE]; /**< Senone IDs (non-MPX) or sequence IDs (MPX) */ int32 bestscore; /**< Best [emitting] state score in current frame (for pruning). */ int16 tmatid; /**< Transition matrix ID (see hmm_context_t). */ frame_idx_t frame; /**< Frame in which this HMM was last active; <0 if inactive */ uint8 mpx; /**< Is this HMM multiplex? (hoisted for speed) */ uint8 n_emit_state; /**< Number of emitting states (hoisted for speed) */ } hmm_t; /** Access macros. */ #define hmm_context(h) (h)->ctx #define hmm_is_mpx(h) (h)->mpx #define hmm_in_score(h) (h)->score[0] #define hmm_score(h,st) (h)->score[st] #define hmm_out_score(h) (h)->out_score #define hmm_in_history(h) (h)->history[0] #define hmm_history(h,st) (h)->history[st] #define hmm_out_history(h) (h)->out_history #define hmm_bestscore(h) (h)->bestscore #define hmm_frame(h) (h)->frame #define hmm_mpx_ssid(h,st) (h)->senid[st] #define hmm_nonmpx_ssid(h) (h)->ssid #define hmm_ssid(h,st) (hmm_is_mpx(h) \ ? hmm_mpx_ssid(h,st) : hmm_nonmpx_ssid(h)) #define hmm_mpx_senid(h,st) (hmm_mpx_ssid(h,st) == BAD_SENID \ ? BAD_SENID : (h)->ctx->sseq[hmm_mpx_ssid(h,st)][st]) #define hmm_nonmpx_senid(h,st) ((h)->senid[st]) #define hmm_senid(h,st) (hmm_is_mpx(h) \ ? hmm_mpx_senid(h,st) : hmm_nonmpx_senid(h,st)) #define hmm_senscr(h,st) (hmm_senid(h,st) == BAD_SENID \ ? WORST_SCORE \ : -(h)->ctx->senscore[hmm_senid(h,st)]) #define hmm_tmatid(h) (h)->tmatid #define hmm_tprob(h,i,j) (-(h)->ctx->tp[hmm_tmatid(h)][i][j]) #define hmm_n_emit_state(h) ((h)->n_emit_state) #define hmm_n_state(h) ((h)->n_emit_state + 1) /** * Create an HMM context. **/ hmm_context_t *hmm_context_init(int32 n_emit_state, uint8 ** const *tp, int16 const *senscore, uint16 * const *sseq); /** * Change the senone score array for a context. **/ #define hmm_context_set_senscore(ctx, senscr) ((ctx)->senscore = (senscr)) /** * Free an HMM context. * * @note The transition matrices, senone scores, and senone sequence * mapping are all assumed to be allocated externally, and will NOT be * freed by this function. **/ void hmm_context_free(hmm_context_t *ctx); /** * Populate a previously-allocated HMM structure, allocating internal data. **/ void hmm_init(hmm_context_t *ctx, hmm_t *hmm, int mpx, int ssid, int tmatid); /** * Free an HMM structure, releasing internal data (but not the HMM structure itself). */ void hmm_deinit(hmm_t *hmm); /** * Reset the states of the HMM to the invalid condition. * i.e., scores to WORST_SCORE and hist to undefined. */ void hmm_clear(hmm_t *h); /** * Reset the scores of the HMM. */ void hmm_clear_scores(hmm_t *h); /** * Renormalize the scores in this HMM based on the given best score. */ void hmm_normalize(hmm_t *h, int32 bestscr); /** * Enter an HMM with the given path score and history ID. **/ void hmm_enter(hmm_t *h, int32 score, int32 histid, int frame); /** * Viterbi evaluation of given HMM. * * @note If this module were being used for tracking state * segmentations, the dummy, non-emitting exit state would have to be * updated separately. In the Viterbi DP diagram, transitions to the * exit state occur from the current time; they are vertical * transitions. Hence they should be made only after the history has * been logged for the emitting states. But we're not bothered with * state segmentations, for now. So, we update the exit state as * well. */ int32 hmm_vit_eval(hmm_t *hmm); /** * Like hmm_vit_eval, but dump HMM state and relevant senscr to fp first, for debugging;. */ int32 hmm_dump_vit_eval(hmm_t *hmm, /**< In/Out: HMM being updated */ FILE *fp /**< An output file pointer */ ); /** * For debugging, dump the whole HMM out. */ void hmm_dump(hmm_t *h, /**< In/Out: HMM being updated */ FILE *fp /**< An output file pointer */ ); #ifdef __cplusplus } #endif #endif /* __HMM_H__ */ pocketsphinx-5prealpha/src/libpocketsphinx/ms_mgau.c0000664000175000017500000002111512504317100020161 00000000000000/* -*- 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. * * ==================================================================== * */ /* * ms_mgau.c -- Essentially a wrapper that wrap up gauden and * senone. It supports multi-stream. * * * ********************************************** * CMU ARPA Speech Project * * Copyright (c) 1997 Carnegie Mellon University. * ALL RIGHTS RESERVED. * ********************************************** * HISTORY * $Log$ * Revision 1.2 2006/02/22 16:56:01 arthchan2003 * Merged from SPHINX3_5_2_RCI_IRII_BRANCH: Added ms_mgau.[ch] into the trunk. It is a wrapper of ms_gauden and ms_senone * * Revision 1.1.2.4 2005/09/25 18:55:19 arthchan2003 * Added a flag to turn on and off precomputation. * * Revision 1.1.2.3 2005/08/03 18:53:44 dhdfu * Add memory deallocation functions. Also move all the initialization * of ms_mgau_model_t into ms_mgau_init (duh!), which entails removing it * from decode_anytopo and friends. * * Revision 1.1.2.2 2005/08/02 21:05:38 arthchan2003 * 1, Added dist and mgau_active as intermediate variable for computation. 2, Added ms_cont_mgau_frame_eval, which is a multi stream version of GMM computation mainly s3.0 family of tools. 3, Fixed dox-doc. * * Revision 1.1.2.1 2005/07/20 19:37:09 arthchan2003 * Added a multi-stream cont_mgau (ms_mgau) which is a wrapper of both gauden and senone. Add ms_mgau_init and model_set_mllr. This allow eliminating 600 lines of code in decode_anytopo/align/allphone. * * * */ /* Local headers. */ #include "ms_mgau.h" static ps_mgaufuncs_t ms_mgau_funcs = { "ms", ms_cont_mgau_frame_eval, /* frame_eval */ ms_mgau_mllr_transform, /* transform */ ms_mgau_free /* free */ }; ps_mgau_t * ms_mgau_init(acmod_t *acmod, logmath_t *lmath, bin_mdef_t *mdef) { /* Codebooks */ ms_mgau_model_t *msg; ps_mgau_t *mg; gauden_t *g; senone_t *s; cmd_ln_t *config; int i; config = acmod->config; msg = (ms_mgau_model_t *) ckd_calloc(1, sizeof(ms_mgau_model_t)); msg->config = config; msg->g = NULL; msg->s = NULL; g = msg->g = gauden_init(cmd_ln_str_r(config, "-mean"), cmd_ln_str_r(config, "-var"), cmd_ln_float32_r(config, "-varfloor"), lmath); /* Verify n_feat and veclen, against acmod. */ if (g->n_feat != feat_dimension1(acmod->fcb)) { E_ERROR("Number of streams does not match: %d != %d\n", g->n_feat, feat_dimension1(acmod->fcb)); goto error_out; } for (i = 0; i < g->n_feat; ++i) { if (g->featlen[i] != feat_dimension2(acmod->fcb, i)) { E_ERROR("Dimension of stream %d does not match: %d != %d\n", i, g->featlen[i], feat_dimension2(acmod->fcb, i)); goto error_out; } } s = msg->s = senone_init(msg->g, cmd_ln_str_r(config, "-mixw"), cmd_ln_str_r(config, "-senmgau"), cmd_ln_float32_r(config, "-mixwfloor"), lmath, mdef); s->aw = cmd_ln_int32_r(config, "-aw"); /* Verify senone parameters against gauden parameters */ if (s->n_feat != g->n_feat) E_FATAL("#Feature mismatch: gauden= %d, senone= %d\n", g->n_feat, s->n_feat); if (s->n_cw != g->n_density) E_FATAL("#Densities mismatch: gauden= %d, senone= %d\n", g->n_density, s->n_cw); if (s->n_gauden > g->n_mgau) E_FATAL("Senones need more codebooks (%d) than present (%d)\n", s->n_gauden, g->n_mgau); if (s->n_gauden < g->n_mgau) E_ERROR("Senones use fewer codebooks (%d) than present (%d)\n", s->n_gauden, g->n_mgau); msg->topn = cmd_ln_int32_r(config, "-topn"); E_INFO("The value of topn: %d\n", msg->topn); if (msg->topn == 0 || msg->topn > msg->g->n_density) { E_WARN ("-topn argument (%d) invalid or > #density codewords (%d); set to latter\n", msg->topn, msg->g->n_density); msg->topn = msg->g->n_density; } msg->dist = (gauden_dist_t ***) ckd_calloc_3d(g->n_mgau, g->n_feat, msg->topn, sizeof(gauden_dist_t)); msg->mgau_active = ckd_calloc(g->n_mgau, sizeof(int8)); mg = (ps_mgau_t *)msg; mg->vt = &ms_mgau_funcs; return mg; error_out: ms_mgau_free(ps_mgau_base(msg)); return NULL; } void ms_mgau_free(ps_mgau_t * mg) { ms_mgau_model_t *msg = (ms_mgau_model_t *)mg; if (msg == NULL) return; if (msg->g) gauden_free(msg->g); if (msg->s) senone_free(msg->s); if (msg->dist) ckd_free_3d((void *) msg->dist); if (msg->mgau_active) ckd_free(msg->mgau_active); ckd_free(msg); } int ms_mgau_mllr_transform(ps_mgau_t *s, ps_mllr_t *mllr) { ms_mgau_model_t *msg = (ms_mgau_model_t *)s; return gauden_mllr_transform(msg->g, mllr, msg->config); } int32 ms_cont_mgau_frame_eval(ps_mgau_t * mg, int16 *senscr, uint8 *senone_active, int32 n_senone_active, mfcc_t ** feat, int32 frame, int32 compallsen) { ms_mgau_model_t *msg = (ms_mgau_model_t *)mg; int32 gid; int32 topn; int32 best; gauden_t *g; senone_t *sen; topn = ms_mgau_topn(msg); g = ms_mgau_gauden(msg); sen = ms_mgau_senone(msg); if (compallsen) { int32 s; for (gid = 0; gid < g->n_mgau; gid++) gauden_dist(g, gid, topn, feat, msg->dist[gid]); best = (int32) 0x7fffffff; for (s = 0; s < sen->n_sen; s++) { senscr[s] = senone_eval(sen, s, msg->dist[sen->mgau[s]], topn); if (best > senscr[s]) { best = senscr[s]; } } /* Normalize senone scores */ for (s = 0; s < sen->n_sen; s++) { int32 bs = senscr[s] - best; if (bs > 32767) bs = 32767; if (bs < -32768) bs = -32768; senscr[s] = bs; } } else { int32 i, n; /* Flag all active mixture-gaussian codebooks */ for (gid = 0; gid < g->n_mgau; gid++) msg->mgau_active[gid] = 0; n = 0; for (i = 0; i < n_senone_active; i++) { /* senone_active consists of deltas. */ int32 s = senone_active[i] + n; msg->mgau_active[sen->mgau[s]] = 1; n = s; } /* Compute topn gaussian density values (for active codebooks) */ for (gid = 0; gid < g->n_mgau; gid++) { if (msg->mgau_active[gid]) gauden_dist(g, gid, topn, feat, msg->dist[gid]); } best = (int32) 0x7fffffff; n = 0; for (i = 0; i < n_senone_active; i++) { int32 s = senone_active[i] + n; senscr[s] = senone_eval(sen, s, msg->dist[sen->mgau[s]], topn); if (best > senscr[s]) { best = senscr[s]; } n = s; } /* Normalize senone scores */ n = 0; for (i = 0; i < n_senone_active; i++) { int32 s = senone_active[i] + n; int32 bs = senscr[s] - best; if (bs > 32767) bs = 32767; if (bs < -32768) bs = -32768; senscr[s] = bs; n = s; } } return 0; } pocketsphinx-5prealpha/src/libpocketsphinx/fsg_search.c0000664000175000017500000013705012520771215020654 00000000000000/* -*- 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_search.c -- Search structures for FSM decoding. * * ********************************************** * CMU ARPA Speech Project * * Copyright (c) 2004 Carnegie Mellon University. * ALL RIGHTS RESERVED. * ********************************************** * * HISTORY * * 18-Feb-2004 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon * Started. */ /* System headers. */ #include #include #include /* SphinxBase headers. */ #include #include #include #include /* Local headers. */ #include "pocketsphinx_internal.h" #include "ps_lattice_internal.h" #include "fsg_search_internal.h" #include "fsg_history.h" #include "fsg_lextree.h" /* Turn this on for detailed debugging dump */ #define __FSG_DBG__ 0 #define __FSG_DBG_CHAN__ 0 static ps_seg_t *fsg_search_seg_iter(ps_search_t *search, int32 *out_score); static ps_lattice_t *fsg_search_lattice(ps_search_t *search); static int fsg_search_prob(ps_search_t *search); static ps_searchfuncs_t fsg_funcs = { /* start: */ fsg_search_start, /* step: */ fsg_search_step, /* finish: */ fsg_search_finish, /* reinit: */ fsg_search_reinit, /* free: */ fsg_search_free, /* lattice: */ fsg_search_lattice, /* hyp: */ fsg_search_hyp, /* prob: */ fsg_search_prob, /* seg_iter: */ fsg_search_seg_iter, }; static int fsg_search_add_silences(fsg_search_t *fsgs, fsg_model_t *fsg) { dict_t *dict; int32 wid; int n_sil; dict = ps_search_dict(fsgs); /* * NOTE: Unlike N-Gram search, we do not use explicit start and * end symbols. This is because the start and end nodes are * defined in the grammar. We do add silence/filler self-loops to * all states in order to allow for silence between words and at * the beginning and end of utterances. * * This has some implications for word graph generation, namely, * that there can (and usually will) be multiple start and end * states in the word graph. We therefore do add explicit start * and end nodes to the graph. */ /* Add silence self-loops to all states. */ fsg_model_add_silence(fsg, "", -1, cmd_ln_float32_r(ps_search_config(fsgs), "-silprob")); n_sil = 0; /* Add self-loops for all other fillers. */ for (wid = dict_filler_start(dict); wid < dict_filler_end(dict); ++wid) { char const *word = dict_wordstr(dict, wid); if (wid == dict_startwid(dict) || wid == dict_finishwid(dict)) continue; fsg_model_add_silence(fsg, word, -1, cmd_ln_float32_r(ps_search_config(fsgs), "-fillprob")); ++n_sil; } return n_sil; } /* Scans the dictionary and check if all words are present. */ static int fsg_search_check_dict(fsg_search_t *fsgs, fsg_model_t *fsg) { dict_t *dict; int i; dict = ps_search_dict(fsgs); for (i = 0; i < fsg_model_n_word(fsg); ++i) { char const *word; int32 wid; word = fsg_model_word_str(fsg, i); wid = dict_wordid(dict, word); if (wid == BAD_S3WID) { E_ERROR("The word '%s' is missing in the dictionary\n", word); return FALSE; } } return TRUE; } static int fsg_search_add_altpron(fsg_search_t *fsgs, fsg_model_t *fsg) { dict_t *dict; int n_alt, n_word; int i; dict = ps_search_dict(fsgs); /* Scan FSG's vocabulary for words that have alternate pronunciations. */ n_alt = 0; n_word = fsg_model_n_word(fsg); for (i = 0; i < n_word; ++i) { char const *word; int32 wid; word = fsg_model_word_str(fsg, i); wid = dict_wordid(dict, word); if (wid != BAD_S3WID) { while ((wid = dict_nextalt(dict, wid)) != BAD_S3WID) { n_alt += fsg_model_add_alt(fsg, word, dict_wordstr(dict, wid)); } } } E_INFO("Added %d alternate word transitions\n", n_alt); return n_alt; } ps_search_t * fsg_search_init(const char *name, fsg_model_t *fsg, cmd_ln_t *config, acmod_t *acmod, dict_t *dict, dict2pid_t *d2p) { fsg_search_t *fsgs = ckd_calloc(1, sizeof(*fsgs)); ps_search_init(ps_search_base(fsgs), &fsg_funcs, PS_SEARCH_TYPE_FSG, name, config, acmod, dict, d2p); fsgs->fsg = fsg_model_retain(fsg); /* Initialize HMM context. */ fsgs->hmmctx = hmm_context_init(bin_mdef_n_emit_state(acmod->mdef), acmod->tmat->tp, NULL, acmod->mdef->sseq); if (fsgs->hmmctx == NULL) { ps_search_free(ps_search_base(fsgs)); return NULL; } /* Intialize the search history object */ fsgs->history = fsg_history_init(NULL, dict); fsgs->frame = -1; /* Get search pruning parameters */ fsgs->beam_factor = 1.0f; fsgs->beam = fsgs->beam_orig = (int32) logmath_log(acmod->lmath, cmd_ln_float64_r(config, "-beam")) >> SENSCR_SHIFT; fsgs->pbeam = fsgs->pbeam_orig = (int32) logmath_log(acmod->lmath, cmd_ln_float64_r(config, "-pbeam")) >> SENSCR_SHIFT; fsgs->wbeam = fsgs->wbeam_orig = (int32) logmath_log(acmod->lmath, cmd_ln_float64_r(config, "-wbeam")) >> SENSCR_SHIFT; /* LM related weights/penalties */ fsgs->lw = cmd_ln_float32_r(config, "-lw"); fsgs->pip = (int32) (logmath_log(acmod->lmath, cmd_ln_float32_r(config, "-pip")) * fsgs->lw) >> SENSCR_SHIFT; fsgs->wip = (int32) (logmath_log(acmod->lmath, cmd_ln_float32_r(config, "-wip")) * fsgs->lw) >> SENSCR_SHIFT; /* Acoustic score scale for posterior probabilities. */ fsgs->ascale = 1.0 / cmd_ln_float32_r(config, "-ascale"); E_INFO("FSG(beam: %d, pbeam: %d, wbeam: %d; wip: %d, pip: %d)\n", fsgs->beam_orig, fsgs->pbeam_orig, fsgs->wbeam_orig, fsgs->wip, fsgs->pip); if (!fsg_search_check_dict(fsgs, fsg)) { fsg_search_free(ps_search_base(fsgs)); return NULL; } if (cmd_ln_boolean_r(config, "-fsgusefiller") && !fsg_model_has_sil(fsg)) fsg_search_add_silences(fsgs, fsg); if (cmd_ln_boolean_r(config, "-fsgusealtpron") && !fsg_model_has_alt(fsg)) fsg_search_add_altpron(fsgs, fsg); if (fsg_search_reinit(ps_search_base(fsgs), ps_search_dict(fsgs), ps_search_dict2pid(fsgs)) < 0) { ps_search_free(ps_search_base(fsgs)); return NULL; } return ps_search_base(fsgs); } void fsg_search_free(ps_search_t *search) { fsg_search_t *fsgs = (fsg_search_t *)search; ps_search_base_free(search); fsg_lextree_free(fsgs->lextree); if (fsgs->history) { fsg_history_reset(fsgs->history); fsg_history_set_fsg(fsgs->history, NULL, NULL); fsg_history_free(fsgs->history); } hmm_context_free(fsgs->hmmctx); fsg_model_free(fsgs->fsg); ckd_free(fsgs); } int fsg_search_reinit(ps_search_t *search, dict_t *dict, dict2pid_t *d2p) { fsg_search_t *fsgs = (fsg_search_t *)search; /* Free the old lextree */ if (fsgs->lextree) fsg_lextree_free(fsgs->lextree); /* Free old dict2pid, dict */ ps_search_base_reinit(search, dict, d2p); /* Update the number of words (not used by this module though). */ search->n_words = dict_size(dict); /* Allocate new lextree for the given FSG */ fsgs->lextree = fsg_lextree_init(fsgs->fsg, dict, d2p, ps_search_acmod(fsgs)->mdef, fsgs->hmmctx, fsgs->wip, fsgs->pip); /* Inform the history module of the new fsg */ fsg_history_set_fsg(fsgs->history, fsgs->fsg, dict); return 0; } static void fsg_search_sen_active(fsg_search_t *fsgs) { gnode_t *gn; fsg_pnode_t *pnode; hmm_t *hmm; acmod_clear_active(ps_search_acmod(fsgs)); for (gn = fsgs->pnode_active; gn; gn = gnode_next(gn)) { pnode = (fsg_pnode_t *) gnode_ptr(gn); hmm = fsg_pnode_hmmptr(pnode); assert(hmm_frame(hmm) == fsgs->frame); acmod_activate_hmm(ps_search_acmod(fsgs), hmm); } } /* * Evaluate all the active HMMs. * (Executed once per frame.) */ static void fsg_search_hmm_eval(fsg_search_t *fsgs) { gnode_t *gn; fsg_pnode_t *pnode; hmm_t *hmm; int32 bestscore; int32 n, maxhmmpf; bestscore = WORST_SCORE; if (!fsgs->pnode_active) { E_ERROR("Frame %d: No active HMM!!\n", fsgs->frame); return; } for (n = 0, gn = fsgs->pnode_active; gn; gn = gnode_next(gn), n++) { int32 score; pnode = (fsg_pnode_t *) gnode_ptr(gn); hmm = fsg_pnode_hmmptr(pnode); assert(hmm_frame(hmm) == fsgs->frame); #if __FSG_DBG__ E_INFO("pnode(%08x) active @frm %5d\n", (int32) pnode, fsgs->frame); hmm_dump(hmm, stdout); #endif score = hmm_vit_eval(hmm); #if __FSG_DBG_CHAN__ E_INFO("pnode(%08x) after eval @frm %5d\n", (int32) pnode, fsgs->frame); hmm_dump(hmm, stdout); #endif if (score BETTER_THAN bestscore) bestscore = score; } #if __FSG_DBG__ E_INFO("[%5d] %6d HMM; bestscr: %11d\n", fsgs->frame, n, bestscore); #endif fsgs->n_hmm_eval += n; /* Adjust beams if #active HMMs larger than absolute threshold */ maxhmmpf = cmd_ln_int32_r(ps_search_config(fsgs), "-maxhmmpf"); if (maxhmmpf != -1 && n > maxhmmpf) { /* * Too many HMMs active; reduce the beam factor applied to the default * beams, but not if the factor is already at a floor (0.1). */ if (fsgs->beam_factor > 0.1) { /* Hack!! Hardwired constant 0.1 */ fsgs->beam_factor *= 0.9f; /* Hack!! Hardwired constant 0.9 */ fsgs->beam = (int32) (fsgs->beam_orig * fsgs->beam_factor); fsgs->pbeam = (int32) (fsgs->pbeam_orig * fsgs->beam_factor); fsgs->wbeam = (int32) (fsgs->wbeam_orig * fsgs->beam_factor); } } else { fsgs->beam_factor = 1.0f; fsgs->beam = fsgs->beam_orig; fsgs->pbeam = fsgs->pbeam_orig; fsgs->wbeam = fsgs->wbeam_orig; } if (n > fsg_lextree_n_pnode(fsgs->lextree)) E_FATAL("PANIC! Frame %d: #HMM evaluated(%d) > #PNodes(%d)\n", fsgs->frame, n, fsg_lextree_n_pnode(fsgs->lextree)); fsgs->bestscore = bestscore; } static void fsg_search_pnode_trans(fsg_search_t *fsgs, fsg_pnode_t * pnode) { fsg_pnode_t *child; hmm_t *hmm; int32 newscore, thresh, nf; assert(pnode); assert(!fsg_pnode_leaf(pnode)); nf = fsgs->frame + 1; thresh = fsgs->bestscore + fsgs->beam; hmm = fsg_pnode_hmmptr(pnode); for (child = fsg_pnode_succ(pnode); child; child = fsg_pnode_sibling(child)) { newscore = hmm_out_score(hmm) + child->logs2prob; if ((newscore BETTER_THAN thresh) && (newscore BETTER_THAN hmm_in_score(&child->hmm))) { /* Incoming score > pruning threshold and > target's existing score */ if (hmm_frame(&child->hmm) < nf) { /* Child node not yet activated; do so */ fsgs->pnode_active_next = glist_add_ptr(fsgs->pnode_active_next, (void *) child); } hmm_enter(&child->hmm, newscore, hmm_out_history(hmm), nf); } } } static void fsg_search_pnode_exit(fsg_search_t *fsgs, fsg_pnode_t * pnode) { hmm_t *hmm; fsg_link_t *fl; int32 wid; fsg_pnode_ctxt_t ctxt; assert(pnode); assert(fsg_pnode_leaf(pnode)); hmm = fsg_pnode_hmmptr(pnode); fl = fsg_pnode_fsglink(pnode); assert(fl); wid = fsg_link_wid(fl); assert(wid >= 0); #if __FSG_DBG__ E_INFO("[%5d] Exit(%08x) %10d(score) %5d(pred)\n", fsgs->frame, (int32) pnode, hmm_out_score(hmm), hmm_out_history(hmm)); #endif /* * Check if this is filler or single phone word; these do not model right * context (i.e., the exit score applies to all right contexts). */ if (fsg_model_is_filler(fsgs->fsg, wid) /* FIXME: This might be slow due to repeated calls to dict_to_id(). */ || (dict_is_single_phone(ps_search_dict(fsgs), dict_wordid(ps_search_dict(fsgs), fsg_model_word_str(fsgs->fsg, wid))))) { /* Create a dummy context structure that applies to all right contexts */ fsg_pnode_add_all_ctxt(&ctxt); /* Create history table entry for this word exit */ fsg_history_entry_add(fsgs->history, fl, fsgs->frame, hmm_out_score(hmm), hmm_out_history(hmm), pnode->ci_ext, ctxt); } else { /* Create history table entry for this word exit */ fsg_history_entry_add(fsgs->history, fl, fsgs->frame, hmm_out_score(hmm), hmm_out_history(hmm), pnode->ci_ext, pnode->ctxt); } } /* * (Beam) prune the just evaluated HMMs, determine which ones remain * active, which ones transition to successors, which ones exit and * terminate in their respective destination FSM states. * (Executed once per frame.) */ static void fsg_search_hmm_prune_prop(fsg_search_t *fsgs) { gnode_t *gn; fsg_pnode_t *pnode; hmm_t *hmm; int32 thresh, word_thresh, phone_thresh; assert(fsgs->pnode_active_next == NULL); thresh = fsgs->bestscore + fsgs->beam; phone_thresh = fsgs->bestscore + fsgs->pbeam; word_thresh = fsgs->bestscore + fsgs->wbeam; for (gn = fsgs->pnode_active; gn; gn = gnode_next(gn)) { pnode = (fsg_pnode_t *) gnode_ptr(gn); hmm = fsg_pnode_hmmptr(pnode); if (hmm_bestscore(hmm) >= thresh) { /* Keep this HMM active in the next frame */ if (hmm_frame(hmm) == fsgs->frame) { hmm_frame(hmm) = fsgs->frame + 1; fsgs->pnode_active_next = glist_add_ptr(fsgs->pnode_active_next, (void *) pnode); } else { assert(hmm_frame(hmm) == fsgs->frame + 1); } if (!fsg_pnode_leaf(pnode)) { if (hmm_out_score(hmm) >= phone_thresh) { /* Transition out of this phone into its children */ fsg_search_pnode_trans(fsgs, pnode); } } else { if (hmm_out_score(hmm) >= word_thresh) { /* Transition out of leaf node into destination FSG state */ fsg_search_pnode_exit(fsgs, pnode); } } } } } /* * Propagate newly created history entries through null transitions. */ static void fsg_search_null_prop(fsg_search_t *fsgs) { int32 bpidx, n_entries, thresh, newscore; fsg_hist_entry_t *hist_entry; fsg_link_t *l; int32 s; fsg_model_t *fsg; fsg = fsgs->fsg; thresh = fsgs->bestscore + fsgs->wbeam; /* Which beam really?? */ n_entries = fsg_history_n_entries(fsgs->history); for (bpidx = fsgs->bpidx_start; bpidx < n_entries; bpidx++) { fsg_arciter_t *itor; hist_entry = fsg_history_entry_get(fsgs->history, bpidx); l = fsg_hist_entry_fsglink(hist_entry); /* Destination FSG state for history entry */ s = l ? fsg_link_to_state(l) : fsg_model_start_state(fsg); /* * Check null transitions from d to all other states. (Only need to * propagate one step, since FSG contains transitive closure of null * transitions.) */ /* Add all links from from_state to dst */ for (itor = fsg_model_arcs(fsg, s); itor; itor = fsg_arciter_next(itor)) { fsg_link_t *l = fsg_arciter_get(itor); /* FIXME: Need to deal with tag transitions somehow. */ if (fsg_link_wid(l) != -1) continue; newscore = fsg_hist_entry_score(hist_entry) + (fsg_link_logs2prob(l) >> SENSCR_SHIFT); if (newscore >= thresh) { fsg_history_entry_add(fsgs->history, l, fsg_hist_entry_frame(hist_entry), newscore, bpidx, fsg_hist_entry_lc(hist_entry), fsg_hist_entry_rc(hist_entry)); } } } } /* * Perform cross-word transitions; propagate each history entry created in this * frame to lextree roots attached to the target FSG state for that entry. */ static void fsg_search_word_trans(fsg_search_t *fsgs) { int32 bpidx, n_entries; fsg_hist_entry_t *hist_entry; fsg_link_t *l; int32 score, newscore, thresh, nf, d; fsg_pnode_t *root; int32 lc, rc; n_entries = fsg_history_n_entries(fsgs->history); thresh = fsgs->bestscore + fsgs->beam; nf = fsgs->frame + 1; for (bpidx = fsgs->bpidx_start; bpidx < n_entries; bpidx++) { hist_entry = fsg_history_entry_get(fsgs->history, bpidx); assert(hist_entry); score = fsg_hist_entry_score(hist_entry); assert(fsgs->frame == fsg_hist_entry_frame(hist_entry)); l = fsg_hist_entry_fsglink(hist_entry); /* Destination state for hist_entry */ d = l ? fsg_link_to_state(l) : fsg_model_start_state(fsgs-> fsg); lc = fsg_hist_entry_lc(hist_entry); /* Transition to all root nodes attached to state d */ for (root = fsg_lextree_root(fsgs->lextree, d); root; root = root->sibling) { rc = root->ci_ext; if ((root->ctxt.bv[lc >> 5] & (1 << (lc & 0x001f))) && (hist_entry->rc.bv[rc >> 5] & (1 << (rc & 0x001f)))) { /* * Last CIphone of history entry is in left-context list supported by * target root node, and * first CIphone of target root node is in right context list supported * by history entry; * So the transition can go ahead (if new score is good enough). */ newscore = score + root->logs2prob; if ((newscore BETTER_THAN thresh) && (newscore BETTER_THAN hmm_in_score(&root->hmm))) { if (hmm_frame(&root->hmm) < nf) { /* Newly activated node; add to active list */ fsgs->pnode_active_next = glist_add_ptr(fsgs->pnode_active_next, (void *) root); #if __FSG_DBG__ E_INFO ("[%5d] WordTrans bpidx[%d] -> pnode[%08x] (activated)\n", fsgs->frame, bpidx, (int32) root); #endif } else { #if __FSG_DBG__ E_INFO ("[%5d] WordTrans bpidx[%d] -> pnode[%08x]\n", fsgs->frame, bpidx, (int32) root); #endif } hmm_enter(&root->hmm, newscore, bpidx, nf); } } } } } int fsg_search_step(ps_search_t *search, int frame_idx) { fsg_search_t *fsgs = (fsg_search_t *)search; int16 const *senscr; acmod_t *acmod = search->acmod; gnode_t *gn; fsg_pnode_t *pnode; hmm_t *hmm; /* Activate our HMMs for the current frame if need be. */ if (!acmod->compallsen) fsg_search_sen_active(fsgs); /* Compute GMM scores for the current frame. */ senscr = acmod_score(acmod, &frame_idx); fsgs->n_sen_eval += acmod->n_senone_active; hmm_context_set_senscore(fsgs->hmmctx, senscr); /* Mark backpointer table for current frame. */ fsgs->bpidx_start = fsg_history_n_entries(fsgs->history); /* Evaluate all active pnodes (HMMs) */ fsg_search_hmm_eval(fsgs); /* * Prune and propagate the HMMs evaluated; create history entries for * word exits. The words exits are tentative, and may be pruned; make * the survivors permanent via fsg_history_end_frame(). */ fsg_search_hmm_prune_prop(fsgs); fsg_history_end_frame(fsgs->history); /* * Propagate new history entries through any null transitions, creating * new history entries, and then make the survivors permanent. */ fsg_search_null_prop(fsgs); fsg_history_end_frame(fsgs->history); /* * Perform cross-word transitions; propagate each history entry across its * terminating state to the root nodes of the lextree attached to the state. */ fsg_search_word_trans(fsgs); /* * We've now come full circle, HMM and FSG states have been updated for * the next frame. * Update the active lists, deactivate any currently active HMMs that * did not survive into the next frame */ for (gn = fsgs->pnode_active; gn; gn = gnode_next(gn)) { pnode = (fsg_pnode_t *) gnode_ptr(gn); hmm = fsg_pnode_hmmptr(pnode); if (hmm_frame(hmm) == fsgs->frame) { /* This HMM NOT activated for the next frame; reset it */ fsg_psubtree_pnode_deactivate(pnode); } else { assert(hmm_frame(hmm) == (fsgs->frame + 1)); } } /* Free the currently active list */ glist_free(fsgs->pnode_active); /* Make the next-frame active list the current one */ fsgs->pnode_active = fsgs->pnode_active_next; fsgs->pnode_active_next = NULL; /* End of this frame; ready for the next */ ++fsgs->frame; return 1; } /* * Set all HMMs to inactive, clear active lists, initialize FSM start * state to be the only active node. * (Executed at the start of each utterance.) */ int fsg_search_start(ps_search_t *search) { fsg_search_t *fsgs = (fsg_search_t *)search; int32 silcipid; fsg_pnode_ctxt_t ctxt; /* Reset dynamic adjustment factor for beams */ fsgs->beam_factor = 1.0f; fsgs->beam = fsgs->beam_orig; fsgs->pbeam = fsgs->pbeam_orig; fsgs->wbeam = fsgs->wbeam_orig; silcipid = bin_mdef_ciphone_id(ps_search_acmod(fsgs)->mdef, "SIL"); /* Initialize EVERYTHING to be inactive */ assert(fsgs->pnode_active == NULL); assert(fsgs->pnode_active_next == NULL); fsg_history_reset(fsgs->history); fsg_history_utt_start(fsgs->history); fsgs->final = FALSE; /* Dummy context structure that allows all right contexts to use this entry */ fsg_pnode_add_all_ctxt(&ctxt); /* Create dummy history entry leading to start state */ fsgs->frame = -1; fsgs->bestscore = 0; fsg_history_entry_add(fsgs->history, NULL, -1, 0, -1, silcipid, ctxt); fsgs->bpidx_start = 0; /* Propagate dummy history entry through NULL transitions from start state */ fsg_search_null_prop(fsgs); /* Perform word transitions from this dummy history entry */ fsg_search_word_trans(fsgs); /* Make the next-frame active list the current one */ fsgs->pnode_active = fsgs->pnode_active_next; fsgs->pnode_active_next = NULL; ++fsgs->frame; fsgs->n_hmm_eval = 0; fsgs->n_sen_eval = 0; return 0; } /* * Cleanup at the end of each utterance. */ int fsg_search_finish(ps_search_t *search) { fsg_search_t *fsgs = (fsg_search_t *)search; gnode_t *gn; fsg_pnode_t *pnode; int32 n_hist; /* Deactivate all nodes in the current and next-frame active lists */ for (gn = fsgs->pnode_active; gn; gn = gnode_next(gn)) { pnode = (fsg_pnode_t *) gnode_ptr(gn); fsg_psubtree_pnode_deactivate(pnode); } for (gn = fsgs->pnode_active_next; gn; gn = gnode_next(gn)) { pnode = (fsg_pnode_t *) gnode_ptr(gn); fsg_psubtree_pnode_deactivate(pnode); } glist_free(fsgs->pnode_active); fsgs->pnode_active = NULL; glist_free(fsgs->pnode_active_next); fsgs->pnode_active_next = NULL; fsgs->final = TRUE; n_hist = fsg_history_n_entries(fsgs->history); E_INFO ("%d frames, %d HMMs (%d/fr), %d senones (%d/fr), %d history entries (%d/fr)\n\n", fsgs->frame, fsgs->n_hmm_eval, (fsgs->frame > 0) ? fsgs->n_hmm_eval / fsgs->frame : 0, fsgs->n_sen_eval, (fsgs->frame > 0) ? fsgs->n_sen_eval / fsgs->frame : 0, n_hist, (fsgs->frame > 0) ? n_hist / fsgs->frame : 0); return 0; } static int fsg_search_find_exit(fsg_search_t *fsgs, int frame_idx, int final, int32 *out_score, int32* out_is_final) { fsg_hist_entry_t *hist_entry = NULL; fsg_model_t *fsg; int bpidx, frm, last_frm, besthist; int32 bestscore; if (out_is_final) *out_is_final = FALSE; if (frame_idx == -1) frame_idx = fsgs->frame - 1; last_frm = frm = frame_idx; /* Scan backwards to find a word exit in frame_idx. */ bpidx = fsg_history_n_entries(fsgs->history) - 1; while (bpidx > 0) { hist_entry = fsg_history_entry_get(fsgs->history, bpidx); if (fsg_hist_entry_frame(hist_entry) <= frame_idx) { frm = last_frm = fsg_hist_entry_frame(hist_entry); break; } bpidx--; } /* No hypothesis (yet). */ if (bpidx <= 0) return bpidx; /* Now find best word exit in this frame. */ bestscore = INT_MIN; besthist = -1; fsg = fsgs->fsg; while (frm == last_frm) { fsg_link_t *fl; int32 score; fl = fsg_hist_entry_fsglink(hist_entry); score = fsg_hist_entry_score(hist_entry); if (fl == NULL) break; /* Prefer final hypothesis */ if (score == bestscore && fsg_link_to_state(fl) == fsg_model_final_state(fsg)) { besthist = bpidx; } else if (score BETTER_THAN bestscore) { /* Only enforce the final state constraint if this is a final hypothesis. */ if ((!final) || fsg_link_to_state(fl) == fsg_model_final_state(fsg)) { bestscore = score; besthist = bpidx; } } --bpidx; if (bpidx < 0) break; hist_entry = fsg_history_entry_get(fsgs->history, bpidx); frm = fsg_hist_entry_frame(hist_entry); } /* Final state not reached. */ if (besthist == -1) { E_ERROR("Final result does not match the grammar in frame %d\n", frame_idx); return -1; } /* This here's the one we want. */ if (out_score) *out_score = bestscore; if (out_is_final) { fsg_link_t *fl; hist_entry = fsg_history_entry_get(fsgs->history, besthist); fl = fsg_hist_entry_fsglink(hist_entry); *out_is_final = (fsg_link_to_state(fl) == fsg_model_final_state(fsg)); } return besthist; } /* FIXME: Mostly duplicated with ngram_search_bestpath(). */ static ps_latlink_t * fsg_search_bestpath(ps_search_t *search, int32 *out_score, int backward) { fsg_search_t *fsgs = (fsg_search_t *)search; if (search->last_link == NULL) { search->last_link = ps_lattice_bestpath(search->dag, NULL, 1.0, fsgs->ascale); if (search->last_link == NULL) return NULL; /* Also calculate betas so we can fill in the posterior * probability field in the segmentation. */ if (search->post == 0) search->post = ps_lattice_posterior(search->dag, NULL, fsgs->ascale); } if (out_score) *out_score = search->last_link->path_scr + search->dag->final_node_ascr; return search->last_link; } char const * fsg_search_hyp(ps_search_t *search, int32 *out_score, int32 *out_is_final) { fsg_search_t *fsgs = (fsg_search_t *)search; dict_t *dict = ps_search_dict(search); char *c; size_t len; int bp, bpidx; /* Get last backpointer table index. */ bpidx = fsg_search_find_exit(fsgs, fsgs->frame, fsgs->final, out_score, out_is_final); /* No hypothesis (yet). */ if (bpidx <= 0) { return NULL; } /* If bestpath is enabled and the utterance is complete, then run it. */ if (fsgs->bestpath && fsgs->final) { ps_lattice_t *dag; ps_latlink_t *link; if ((dag = fsg_search_lattice(search)) == NULL) { E_WARN("Failed to obtain the lattice while bestpath enabled\n"); return NULL; } if ((link = fsg_search_bestpath(search, out_score, FALSE)) == NULL) { E_WARN("Failed to find the bestpath in a lattice\n"); return NULL; } return ps_lattice_hyp(dag, link); } bp = bpidx; len = 0; while (bp > 0) { fsg_hist_entry_t *hist_entry = fsg_history_entry_get(fsgs->history, bp); fsg_link_t *fl = fsg_hist_entry_fsglink(hist_entry); char const *baseword; int32 wid; bp = fsg_hist_entry_pred(hist_entry); wid = fsg_link_wid(fl); if (wid < 0 || fsg_model_is_filler(fsgs->fsg, wid)) continue; baseword = dict_basestr(dict, dict_wordid(dict, fsg_model_word_str(fsgs->fsg, wid))); len += strlen(baseword) + 1; } ckd_free(search->hyp_str); if (len == 0) { search->hyp_str = NULL; return search->hyp_str; } search->hyp_str = ckd_calloc(1, len); bp = bpidx; c = search->hyp_str + len - 1; while (bp > 0) { fsg_hist_entry_t *hist_entry = fsg_history_entry_get(fsgs->history, bp); fsg_link_t *fl = fsg_hist_entry_fsglink(hist_entry); char const *baseword; int32 wid; bp = fsg_hist_entry_pred(hist_entry); wid = fsg_link_wid(fl); if (wid < 0 || fsg_model_is_filler(fsgs->fsg, wid)) continue; baseword = dict_basestr(dict, dict_wordid(dict, fsg_model_word_str(fsgs->fsg, wid))); len = strlen(baseword); c -= len; memcpy(c, baseword, len); if (c > search->hyp_str) { --c; *c = ' '; } } return search->hyp_str; } static void fsg_seg_bp2itor(ps_seg_t *seg, fsg_hist_entry_t *hist_entry) { fsg_search_t *fsgs = (fsg_search_t *)seg->search; fsg_hist_entry_t *ph = NULL; int32 bp; if ((bp = fsg_hist_entry_pred(hist_entry)) >= 0) ph = fsg_history_entry_get(fsgs->history, bp); seg->word = fsg_model_word_str(fsgs->fsg, hist_entry->fsglink->wid); seg->ef = fsg_hist_entry_frame(hist_entry); seg->sf = ph ? fsg_hist_entry_frame(ph) + 1 : 0; /* This is kind of silly but it happens for null transitions. */ if (seg->sf > seg->ef) seg->sf = seg->ef; seg->prob = 0; /* Bogus value... */ /* "Language model" score = transition probability. */ seg->lback = 1; seg->lscr = fsg_link_logs2prob(hist_entry->fsglink) >> SENSCR_SHIFT; if (ph) { /* FIXME: Not sure exactly how cross-word triphones are handled. */ seg->ascr = hist_entry->score - ph->score - seg->lscr; } else seg->ascr = hist_entry->score - seg->lscr; } static void fsg_seg_free(ps_seg_t *seg) { fsg_seg_t *itor = (fsg_seg_t *)seg; ckd_free(itor->hist); ckd_free(itor); } static ps_seg_t * fsg_seg_next(ps_seg_t *seg) { fsg_seg_t *itor = (fsg_seg_t *)seg; if (++itor->cur == itor->n_hist) { fsg_seg_free(seg); return NULL; } fsg_seg_bp2itor(seg, itor->hist[itor->cur]); return seg; } static ps_segfuncs_t fsg_segfuncs = { /* seg_next */ fsg_seg_next, /* seg_free */ fsg_seg_free }; static ps_seg_t * fsg_search_seg_iter(ps_search_t *search, int32 *out_score) { fsg_search_t *fsgs = (fsg_search_t *)search; fsg_seg_t *itor; int bp, bpidx, cur; bpidx = fsg_search_find_exit(fsgs, fsgs->frame, fsgs->final, out_score, NULL); /* No hypothesis (yet). */ if (bpidx <= 0) return NULL; /* If bestpath is enabled and the utterance is complete, then run it. */ if (fsgs->bestpath && fsgs->final) { ps_lattice_t *dag; ps_latlink_t *link; if ((dag = fsg_search_lattice(search)) == NULL) return NULL; if ((link = fsg_search_bestpath(search, out_score, TRUE)) == NULL) return NULL; return ps_lattice_seg_iter(dag, link, 1.0); } /* Calling this an "iterator" is a bit of a misnomer since we have * to get the entire backtrace in order to produce it. On the * other hand, all we actually need is the bptbl IDs, and we can * allocate a fixed-size array of them. */ itor = ckd_calloc(1, sizeof(*itor)); itor->base.vt = &fsg_segfuncs; itor->base.search = search; itor->base.lwf = 1.0; itor->n_hist = 0; bp = bpidx; while (bp > 0) { fsg_hist_entry_t *hist_entry = fsg_history_entry_get(fsgs->history, bp); bp = fsg_hist_entry_pred(hist_entry); ++itor->n_hist; } if (itor->n_hist == 0) { ckd_free(itor); return NULL; } itor->hist = ckd_calloc(itor->n_hist, sizeof(*itor->hist)); cur = itor->n_hist - 1; bp = bpidx; while (bp > 0) { fsg_hist_entry_t *hist_entry = fsg_history_entry_get(fsgs->history, bp); itor->hist[cur] = hist_entry; bp = fsg_hist_entry_pred(hist_entry); --cur; } /* Fill in relevant fields for first element. */ fsg_seg_bp2itor((ps_seg_t *)itor, itor->hist[0]); return (ps_seg_t *)itor; } static int fsg_search_prob(ps_search_t *search) { fsg_search_t *fsgs = (fsg_search_t *)search; /* If bestpath is enabled and the utterance is complete, then run it. */ if (fsgs->bestpath && fsgs->final) { ps_lattice_t *dag; ps_latlink_t *link; if ((dag = fsg_search_lattice(search)) == NULL) return 0; if ((link = fsg_search_bestpath(search, NULL, TRUE)) == NULL) return 0; return search->post; } else { /* FIXME: Give some kind of good estimate here, eventually. */ return 0; } } static ps_latnode_t * find_node(ps_lattice_t *dag, fsg_model_t *fsg, int sf, int32 wid, int32 node_id) { ps_latnode_t *node; for (node = dag->nodes; node; node = node->next) if ((node->sf == sf) && (node->wid == wid) && (node->node_id == node_id)) break; return node; } static ps_latnode_t * new_node(ps_lattice_t *dag, fsg_model_t *fsg, int sf, int ef, int32 wid, int32 node_id, int32 ascr) { ps_latnode_t *node; node = find_node(dag, fsg, sf, wid, node_id); if (node) { /* Update end frames. */ if (node->lef == -1 || node->lef < ef) node->lef = ef; if (node->fef == -1 || node->fef > ef) node->fef = ef; /* Update best link score. */ if (ascr BETTER_THAN node->info.best_exit) node->info.best_exit = ascr; } else { /* New node; link to head of list */ node = listelem_malloc(dag->latnode_alloc); node->wid = wid; node->sf = sf; node->fef = node->lef = ef; node->reachable = FALSE; node->entries = NULL; node->exits = NULL; node->info.best_exit = ascr; node->node_id = node_id; node->next = dag->nodes; dag->nodes = node; ++dag->n_nodes; } return node; } static ps_latnode_t * find_start_node(fsg_search_t *fsgs, ps_lattice_t *dag) { ps_latnode_t *node; glist_t start = NULL; int nstart = 0; /* Look for all nodes starting in frame zero with some exits. */ for (node = dag->nodes; node; node = node->next) { if (node->sf == 0 && node->exits) { E_INFO("Start node %s.%d:%d:%d\n", fsg_model_word_str(fsgs->fsg, node->wid), node->sf, node->fef, node->lef); start = glist_add_ptr(start, node); ++nstart; } } /* If there was more than one start node candidate, then we need * to create an artificial start node with epsilon transitions to * all of them. */ if (nstart == 1) { node = gnode_ptr(start); } else { gnode_t *st; int wid; wid = fsg_model_word_add(fsgs->fsg, ""); if (fsgs->fsg->silwords) bitvec_set(fsgs->fsg->silwords, wid); node = new_node(dag, fsgs->fsg, 0, 0, wid, -1, 0); for (st = start; st; st = gnode_next(st)) ps_lattice_link(dag, node, gnode_ptr(st), 0, 0); } glist_free(start); return node; } static ps_latnode_t * find_end_node(fsg_search_t *fsgs, ps_lattice_t *dag) { ps_latnode_t *node; glist_t end = NULL; int nend = 0; /* Look for all nodes ending in last frame with some entries. */ for (node = dag->nodes; node; node = node->next) { if (node->lef == dag->n_frames - 1 && node->entries) { E_INFO("End node %s.%d:%d:%d (%d)\n", fsg_model_word_str(fsgs->fsg, node->wid), node->sf, node->fef, node->lef, node->info.best_exit); end = glist_add_ptr(end, node); ++nend; } } if (nend == 1) { node = gnode_ptr(end); } else if (nend == 0) { ps_latnode_t *last = NULL; int ef = 0; /* If there were no end node candidates, then just use the * node with the last exit frame. */ for (node = dag->nodes; node; node = node->next) { if (node->lef > ef && node->entries) { last = node; ef = node->lef; } } node = last; if (node) E_INFO("End node %s.%d:%d:%d (%d)\n", fsg_model_word_str(fsgs->fsg, node->wid), node->sf, node->fef, node->lef, node->info.best_exit); } else { /* If there was more than one end node candidate, then we need * to create an artificial end node with epsilon transitions * out of all of them. */ gnode_t *st; int wid; wid = fsg_model_word_add(fsgs->fsg, ""); if (fsgs->fsg->silwords) bitvec_set(fsgs->fsg->silwords, wid); node = new_node(dag, fsgs->fsg, fsgs->frame, fsgs->frame, wid, -1, 0); /* Use the "best" (in reality it will be the only) exit link * score from this final node as the link score. */ for (st = end; st; st = gnode_next(st)) { ps_latnode_t *src = gnode_ptr(st); ps_lattice_link(dag, src, node, src->info.best_exit, fsgs->frame); } } glist_free(end); return node; } static void mark_reachable(ps_lattice_t *dag, ps_latnode_t *end) { glist_t q; /* It doesn't matter which order we do this in. */ end->reachable = TRUE; q = glist_add_ptr(NULL, end); while (q) { ps_latnode_t *node = gnode_ptr(q); latlink_list_t *x; /* Pop the front of the list. */ q = gnode_free(q, NULL); /* Expand all its predecessors that haven't been seen yet. */ for (x = node->entries; x; x = x->next) { ps_latnode_t *next = x->link->from; if (!next->reachable) { next->reachable = TRUE; q = glist_add_ptr(q, next); } } } } /** * Generate a lattice from FSG search results. * * One might think that this is simply a matter of adding acoustic * scores to the FSG's edges. However, one would be wrong. The * crucial difference here is that the word lattice is acyclic, and it * also contains timing information. */ static ps_lattice_t * fsg_search_lattice(ps_search_t *search) { fsg_search_t *fsgs; fsg_model_t *fsg; ps_latnode_t *node; ps_lattice_t *dag; int32 i, n; fsgs = (fsg_search_t *)search; /* Check to see if a lattice has previously been created over the * same number of frames, and reuse it if so. */ if (search->dag && search->dag->n_frames == fsgs->frame) return search->dag; /* Nope, create a new one. */ ps_lattice_free(search->dag); search->dag = NULL; dag = ps_lattice_init_search(search, fsgs->frame); fsg = fsgs->fsg; /* * Each history table entry represents a link in the word graph. * The set of nodes is determined by the number of unique * (word,start-frame) pairs in the history table. So we will * first find all those nodes. */ n = fsg_history_n_entries(fsgs->history); for (i = 0; i < n; ++i) { fsg_hist_entry_t *fh = fsg_history_entry_get(fsgs->history, i); int32 ascr; int sf; /* Skip null transitions. */ if (fh->fsglink == NULL || fh->fsglink->wid == -1) continue; /* Find the start node of this link. */ if (fh->pred) { fsg_hist_entry_t *pfh = fsg_history_entry_get(fsgs->history, fh->pred); /* FIXME: We include the transition score in the lattice * link score. This is because of the practical * difficulty of obtaining it separately in bestpath or * forward-backward search, and because it is essentially * a unigram probability, so there is no need to treat it * separately from the acoustic score. However, it's not * clear that this will actually yield correct results.*/ ascr = fh->score - pfh->score; sf = pfh->frame + 1; } else { ascr = fh->score; sf = 0; } /* * Note that although scores are tied to links rather than * nodes, it's possible that there are no links out of the * destination node, and thus we need to preserve its score in * case it turns out to be utterance-final. */ new_node(dag, fsg, sf, fh->frame, fh->fsglink->wid, fsg_link_to_state(fh->fsglink), ascr); } /* * Now, we will create links only to nodes that actually exist. */ n = fsg_history_n_entries(fsgs->history); for (i = 0; i < n; ++i) { fsg_hist_entry_t *fh = fsg_history_entry_get(fsgs->history, i); fsg_arciter_t *itor; ps_latnode_t *src, *dest; int32 ascr; int sf; /* Skip null transitions. */ if (fh->fsglink == NULL || fh->fsglink->wid == -1) continue; /* Find the start node of this link and calculate its link score. */ if (fh->pred) { fsg_hist_entry_t *pfh = fsg_history_entry_get(fsgs->history, fh->pred); sf = pfh->frame + 1; ascr = fh->score - pfh->score; } else { ascr = fh->score; sf = 0; } src = find_node(dag, fsg, sf, fh->fsglink->wid, fsg_link_to_state(fh->fsglink)); sf = fh->frame + 1; for (itor = fsg_model_arcs(fsg, fsg_link_to_state(fh->fsglink)); itor; itor = fsg_arciter_next(itor)) { fsg_link_t *link = fsg_arciter_get(itor); /* FIXME: Need to figure out what to do about tag transitions. */ if (link->wid >= 0) { /* * For each non-epsilon link following this one, look for a * matching node in the lattice and link to it. */ if ((dest = find_node(dag, fsg, sf, link->wid, fsg_link_to_state(link))) != NULL) ps_lattice_link(dag, src, dest, ascr, fh->frame); } else { /* * Transitive closure on nulls has already been done, so we * just need to look one link forward from them. */ fsg_arciter_t *itor2; /* Add all non-null links out of j. */ for (itor2 = fsg_model_arcs(fsg, fsg_link_to_state(link)); itor2; itor2 = fsg_arciter_next(itor2)) { fsg_link_t *link = fsg_arciter_get(itor2); if (link->wid == -1) continue; if ((dest = find_node(dag, fsg, sf, link->wid, fsg_link_to_state(link))) != NULL) { ps_lattice_link(dag, src, dest, ascr, fh->frame); } } } } } /* Figure out which nodes are the start and end nodes. */ if ((dag->start = find_start_node(fsgs, dag)) == NULL) { E_WARN("Failed to find the start node\n"); goto error_out; } if ((dag->end = find_end_node(fsgs, dag)) == NULL) { E_WARN("Failed to find the end node\n"); goto error_out; } E_INFO("lattice start node %s.%d end node %s.%d\n", fsg_model_word_str(fsg, dag->start->wid), dag->start->sf, fsg_model_word_str(fsg, dag->end->wid), dag->end->sf); /* FIXME: Need to calculate final_node_ascr here. */ /* * Convert word IDs from FSG to dictionary. */ for (node = dag->nodes; node; node = node->next) { node->wid = dict_wordid(dag->search->dict, fsg_model_word_str(fsg, node->wid)); node->basewid = dict_basewid(dag->search->dict, node->wid); } /* * Now we are done, because the links in the graph are uniquely * defined by the history table. However we should remove any * nodes which are not reachable from the end node of the FSG. * Everything is reachable from the start node by definition. */ mark_reachable(dag, dag->end); ps_lattice_delete_unreachable(dag); { int32 silpen, fillpen; silpen = (int32)(logmath_log(fsg->lmath, cmd_ln_float32_r(ps_search_config(fsgs), "-silprob")) * fsg->lw) >> SENSCR_SHIFT; fillpen = (int32)(logmath_log(fsg->lmath, cmd_ln_float32_r(ps_search_config(fsgs), "-fillprob")) * fsg->lw) >> SENSCR_SHIFT; ps_lattice_penalize_fillers(dag, silpen, fillpen); } search->dag = dag; return dag; error_out: ps_lattice_free(dag); return NULL; } pocketsphinx-5prealpha/src/libpocketsphinx/tmat.c0000664000175000017500000002663112504317100017506 00000000000000/* -*- 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. * * ==================================================================== * */ /* * tmat.c * * ********************************************** * CMU ARPA Speech Project * * Copyright (c) 1997 Carnegie Mellon University. * ALL RIGHTS RESERVED. * ********************************************** * * HISTORY * $Log: tmat.c,v $ * Revision 1.1.1.1 2006/05/23 18:45:01 dhuggins * re-importation * * Revision 1.4 2005/11/14 16:14:34 dhuggins * Use LOG() instead of logs3() for loading tmats, makes startup * ***much*** faster. * * Revision 1.3 2005/10/10 14:50:35 dhuggins * Deal properly with empty transition matrices. * * Revision 1.2 2005/09/30 15:01:23 dhuggins * More robust tmat reading - read the tmat in accordance with the fixed s2 topology * * Revision 1.1 2005/09/29 21:51:19 dhuggins * Add support for Sphinx3 tmat files. Amazingly enough, it Just Works * (but it isn't terribly robust) * * Revision 1.6 2005/07/05 13:12:39 dhdfu * Add new arguments to logs3_init() in some tests, main_ep * * Revision 1.5 2005/06/21 19:23:35 arthchan2003 * 1, Fixed doxygen documentation. 2, Added $ keyword. * * Revision 1.5 2005/05/03 04:09:09 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.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:47 archan * Fixed mistakes in last updates. Add * * * 20.Apr.2001 RAH (rhoughton@mediasite.com, ricky.houghton@cs.cmu.edu) * Added tmat_free to free allocated memory * * 29-Feb-2000 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University. * Added tmat_chk_1skip(), and made tmat_chk_uppertri() public. * * 10-Dec-1999 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University. * Made tmat_dump() public. * * 11-Mar-97 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon University. * Started based on original S3 implementation. */ /* System headers. */ #include /* SphinxBase headers. */ #include #include #include #include /* Local headers. */ #include "tmat.h" #include "hmm.h" #include "vector.h" #define TMAT_PARAM_VERSION "1.0" /** * Checks that no transition matrix in the given object contains backward arcs. * @returns 0 if successful, -1 if check failed. */ static int32 tmat_chk_uppertri(tmat_t *tmat, logmath_t *lmath); /** * Checks that transition matrix arcs in the given object skip over * at most 1 state. * @returns 0 if successful, -1 if check failed. */ static int32 tmat_chk_1skip(tmat_t *tmat, logmath_t *lmath); void tmat_dump(tmat_t * tmat, FILE * fp) { int32 i, src, dst; for (i = 0; i < tmat->n_tmat; i++) { fprintf(fp, "TMAT %d = %d x %d\n", i, tmat->n_state, tmat->n_state + 1); for (src = 0; src < tmat->n_state; src++) { for (dst = 0; dst <= tmat->n_state; dst++) fprintf(fp, " %12d", tmat->tp[i][src][dst]); fprintf(fp, "\n"); } fprintf(fp, "\n"); } fflush(fp); } /* * Check model tprob matrices that they conform to upper-triangular assumption; * i.e. no "backward" transitions allowed. */ int32 tmat_chk_uppertri(tmat_t * tmat, logmath_t *lmath) { int32 i, src, dst; /* Check that each tmat is upper-triangular */ for (i = 0; i < tmat->n_tmat; i++) { for (dst = 0; dst < tmat->n_state; dst++) for (src = dst + 1; src < tmat->n_state; src++) if (tmat->tp[i][src][dst] < 255) { E_ERROR("tmat[%d][%d][%d] = %d\n", i, src, dst, tmat->tp[i][src][dst]); return -1; } } return 0; } int32 tmat_chk_1skip(tmat_t * tmat, logmath_t *lmath) { int32 i, src, dst; for (i = 0; i < tmat->n_tmat; i++) { for (src = 0; src < tmat->n_state; src++) for (dst = src + 3; dst <= tmat->n_state; dst++) if (tmat->tp[i][src][dst] < 255) { E_ERROR("tmat[%d][%d][%d] = %d\n", i, src, dst, tmat->tp[i][src][dst]); return -1; } } return 0; } tmat_t * tmat_init(char const *file_name, logmath_t *lmath, float64 tpfloor, int32 breport) { char tmp; int32 n_src, n_dst, n_tmat; FILE *fp; int32 byteswap, chksum_present; uint32 chksum; float32 **tp; int32 i, j, k, tp_per_tmat; char **argname, **argval; tmat_t *t; if (breport) { E_INFO("Reading HMM transition probability matrices: %s\n", file_name); } t = (tmat_t *) ckd_calloc(1, sizeof(tmat_t)); if ((fp = fopen(file_name, "rb")) == NULL) E_FATAL_SYSTEM("Failed to open transition file '%s' for reading", file_name); /* Read header, including argument-value info and 32-bit byteorder magic */ if (bio_readhdr(fp, &argname, &argval, &byteswap) < 0) E_FATAL("Failed to read header from file '%s'\n", file_name); /* Parse argument-value list */ chksum_present = 0; for (i = 0; argname[i]; i++) { if (strcmp(argname[i], "version") == 0) { if (strcmp(argval[i], TMAT_PARAM_VERSION) != 0) E_WARN("Version mismatch(%s): %s, expecting %s\n", file_name, argval[i], TMAT_PARAM_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; /* Read #tmat, #from-states, #to-states, arraysize */ if ((bio_fread(&n_tmat, sizeof(int32), 1, fp, byteswap, &chksum) != 1) || (bio_fread(&n_src, sizeof(int32), 1, fp, byteswap, &chksum) != 1) || (bio_fread(&n_dst, sizeof(int32), 1, fp, byteswap, &chksum) != 1) || (bio_fread(&i, sizeof(int32), 1, fp, byteswap, &chksum) != 1)) { E_FATAL("Failed to read header from '%s'\n", file_name); } if (n_tmat >= MAX_INT16) E_FATAL("%s: Number of transition matrices (%d) exceeds limit (%d)\n", file_name, n_tmat, MAX_INT16); t->n_tmat = n_tmat; if (n_dst != n_src + 1) E_FATAL("%s: Unsupported transition matrix. Number of source states (%d) != number of target states (%d)-1\n", file_name, n_src, n_dst); t->n_state = n_src; if (i != t->n_tmat * n_src * n_dst) { E_FATAL ("%s: Invalid transitions. Number of coefficients (%d) doesn't match expected array dimension: %d x %d x %d\n", file_name, i, t->n_tmat, n_src, n_dst); } /* Allocate memory for tmat data */ t->tp = ckd_calloc_3d(t->n_tmat, n_src, n_dst, sizeof(***t->tp)); /* Temporary structure to read in the float data */ tp = ckd_calloc_2d(n_src, n_dst, sizeof(**tp)); /* Read transition matrices, normalize and floor them, and convert to log domain */ tp_per_tmat = n_src * n_dst; for (i = 0; i < t->n_tmat; i++) { if (bio_fread(tp[0], sizeof(float32), tp_per_tmat, fp, byteswap, &chksum) != tp_per_tmat) { E_FATAL("Failed to read transition matrix %d from '%s'\n", i, file_name); } /* Normalize and floor */ for (j = 0; j < n_src; j++) { if (vector_sum_norm(tp[j], n_dst) == 0.0) E_WARN("Normalization failed for transition matrix %d from state %d\n", i, j); vector_nz_floor(tp[j], n_dst, tpfloor); vector_sum_norm(tp[j], n_dst); /* Convert to logs3. */ for (k = 0; k < n_dst; k++) { int ltp; #if 0 /* No, don't do this! It will subtly break 3-state HMMs. */ /* For these ones, we floor them even if they are * zero, otherwise HMM evaluation goes nuts. */ if (k >= j && k-j < 3 && tp[j][k] == 0.0f) tp[j][k] = tpfloor; #endif /* Log and quantize them. */ ltp = -logmath_log(lmath, tp[j][k]) >> SENSCR_SHIFT; if (ltp > 255) ltp = 255; t->tp[i][j][k] = (uint8)ltp; } } } ckd_free_2d(tp); if (chksum_present) bio_verify_chksum(fp, byteswap, chksum); if (fread(&tmp, 1, 1, fp) == 1) E_ERROR("Non-empty file beyond end of data\n"); fclose(fp); if (tmat_chk_uppertri(t, lmath) < 0) E_FATAL("Tmat not upper triangular\n"); if (tmat_chk_1skip(t, lmath) < 0) E_FATAL("Topology not Left-to-Right or Bakis\n"); return t; } void tmat_report(tmat_t * t) { E_INFO_NOFN("Initialization of tmat_t, report:\n"); E_INFO_NOFN("Read %d transition matrices of size %dx%d\n", t->n_tmat, t->n_state, t->n_state + 1); E_INFO_NOFN("\n"); } /* * RAH, Free memory allocated in tmat_init () */ void tmat_free(tmat_t * t) { if (t) { if (t->tp) ckd_free_3d(t->tp); ckd_free(t); } } pocketsphinx-5prealpha/src/libpocketsphinx/ngram_search_fwdflat.c0000664000175000017500000010161312504317100022673 00000000000000/* -*- 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_search_fwdflat.c Flat lexicon search. */ /* System headers. */ #include #include /* SphinxBase headers. */ #include #include #include /* Local headers. */ #include "ngram_search.h" #include "ps_lattice_internal.h" /* Turn this on to dump channels for debugging */ #define __CHAN_DUMP__ 0 #if __CHAN_DUMP__ #define chan_v_eval(chan) hmm_dump_vit_eval(&(chan)->hmm, stderr) #else #define chan_v_eval(chan) hmm_vit_eval(&(chan)->hmm) #endif static void ngram_fwdflat_expand_all(ngram_search_t *ngs) { int n_words, i; /* For all "real words" (not fillers or /) in the dictionary, * * 1) Add the ones which are in the LM to the fwdflat wordlist * 2) And to the expansion list (since we are expanding all) */ ngs->n_expand_words = 0; n_words = ps_search_n_words(ngs); bitvec_clear_all(ngs->expand_word_flag, ps_search_n_words(ngs)); for (i = 0; i < n_words; ++i) { if (!ngram_model_set_known_wid(ngs->lmset, dict_basewid(ps_search_dict(ngs),i))) continue; ngs->fwdflat_wordlist[ngs->n_expand_words] = i; ngs->expand_word_list[ngs->n_expand_words] = i; bitvec_set(ngs->expand_word_flag, i); ngs->n_expand_words++; } E_INFO("Utterance vocabulary contains %d words\n", ngs->n_expand_words); ngs->expand_word_list[ngs->n_expand_words] = -1; ngs->fwdflat_wordlist[ngs->n_expand_words] = -1; } static void ngram_fwdflat_allocate_1ph(ngram_search_t *ngs) { dict_t *dict = ps_search_dict(ngs); int n_words = ps_search_n_words(ngs); int i, w; /* Allocate single-phone words, since they won't have * been allocated for us by fwdtree initialization. */ ngs->n_1ph_words = 0; for (w = 0; w < n_words; w++) { if (dict_is_single_phone(dict, w)) ++ngs->n_1ph_words; } ngs->single_phone_wid = ckd_calloc(ngs->n_1ph_words, sizeof(*ngs->single_phone_wid)); ngs->rhmm_1ph = ckd_calloc(ngs->n_1ph_words, sizeof(*ngs->rhmm_1ph)); i = 0; for (w = 0; w < n_words; w++) { if (!dict_is_single_phone(dict, w)) continue; /* DICT2PID location */ ngs->rhmm_1ph[i].ciphone = dict_first_phone(dict, w); ngs->rhmm_1ph[i].ci2phone = bin_mdef_silphone(ps_search_acmod(ngs)->mdef); hmm_init(ngs->hmmctx, &ngs->rhmm_1ph[i].hmm, TRUE, /* ssid */ bin_mdef_pid2ssid(ps_search_acmod(ngs)->mdef, ngs->rhmm_1ph[i].ciphone), /* tmatid */ bin_mdef_pid2tmatid(ps_search_acmod(ngs)->mdef, ngs->rhmm_1ph[i].ciphone)); ngs->rhmm_1ph[i].next = NULL; ngs->word_chan[w] = (chan_t *) &(ngs->rhmm_1ph[i]); ngs->single_phone_wid[i] = w; i++; } } static void ngram_fwdflat_free_1ph(ngram_search_t *ngs) { int i, w; int n_words = ps_search_n_words(ngs); for (i = w = 0; w < n_words; ++w) { if (!dict_is_single_phone(ps_search_dict(ngs), w)) continue; hmm_deinit(&ngs->rhmm_1ph[i].hmm); ++i; } ckd_free(ngs->rhmm_1ph); ngs->rhmm_1ph = NULL; ckd_free(ngs->single_phone_wid); } void ngram_fwdflat_init(ngram_search_t *ngs) { int n_words; n_words = ps_search_n_words(ngs); ngs->fwdflat_wordlist = ckd_calloc(n_words + 1, sizeof(*ngs->fwdflat_wordlist)); ngs->expand_word_flag = bitvec_alloc(n_words); ngs->expand_word_list = ckd_calloc(n_words + 1, sizeof(*ngs->expand_word_list)); ngs->frm_wordlist = ckd_calloc(ngs->n_frame_alloc, sizeof(*ngs->frm_wordlist)); ngs->min_ef_width = cmd_ln_int32_r(ps_search_config(ngs), "-fwdflatefwid"); ngs->max_sf_win = cmd_ln_int32_r(ps_search_config(ngs), "-fwdflatsfwin"); E_INFO("fwdflat: min_ef_width = %d, max_sf_win = %d\n", ngs->min_ef_width, ngs->max_sf_win); /* No tree-search; pre-build the expansion list, including all LM words. */ if (!ngs->fwdtree) { /* Build full expansion list from LM words. */ ngram_fwdflat_expand_all(ngs); /* Allocate single phone words. */ ngram_fwdflat_allocate_1ph(ngs); } } void ngram_fwdflat_deinit(ngram_search_t *ngs) { double n_speech = (double)ngs->n_tot_frame / cmd_ln_int32_r(ps_search_config(ngs), "-frate"); E_INFO("TOTAL fwdflat %.2f CPU %.3f xRT\n", ngs->fwdflat_perf.t_tot_cpu, ngs->fwdflat_perf.t_tot_cpu / n_speech); E_INFO("TOTAL fwdflat %.2f wall %.3f xRT\n", ngs->fwdflat_perf.t_tot_elapsed, ngs->fwdflat_perf.t_tot_elapsed / n_speech); /* Free single-phone words if we allocated them. */ if (!ngs->fwdtree) { ngram_fwdflat_free_1ph(ngs); } ckd_free(ngs->fwdflat_wordlist); bitvec_free(ngs->expand_word_flag); ckd_free(ngs->expand_word_list); ckd_free(ngs->frm_wordlist); } int ngram_fwdflat_reinit(ngram_search_t *ngs) { /* Reallocate things that depend on the number of words. */ int n_words; ckd_free(ngs->fwdflat_wordlist); ckd_free(ngs->expand_word_list); bitvec_free(ngs->expand_word_flag); n_words = ps_search_n_words(ngs); ngs->fwdflat_wordlist = ckd_calloc(n_words + 1, sizeof(*ngs->fwdflat_wordlist)); ngs->expand_word_flag = bitvec_alloc(n_words); ngs->expand_word_list = ckd_calloc(n_words + 1, sizeof(*ngs->expand_word_list)); /* No tree-search; take care of the expansion list and single phone words. */ if (!ngs->fwdtree) { /* Free single-phone words. */ ngram_fwdflat_free_1ph(ngs); /* Reallocate word_chan. */ ckd_free(ngs->word_chan); ngs->word_chan = ckd_calloc(dict_size(ps_search_dict(ngs)), sizeof(*ngs->word_chan)); /* Rebuild full expansion list from LM words. */ ngram_fwdflat_expand_all(ngs); /* Allocate single phone words. */ ngram_fwdflat_allocate_1ph(ngs); } /* Otherwise there is nothing to do since the wordlist is * generated anew every utterance. */ return 0; } /** * Find all active words in backpointer table and sort by frame. */ static void build_fwdflat_wordlist(ngram_search_t *ngs) { int32 i, f, sf, ef, wid, nwd; bptbl_t *bp; ps_latnode_t *node, *prevnode, *nextnode; /* No tree-search, use statically allocated wordlist. */ if (!ngs->fwdtree) return; memset(ngs->frm_wordlist, 0, ngs->n_frame_alloc * sizeof(*ngs->frm_wordlist)); /* Scan the backpointer table for all active words and record * their exit frames. */ for (i = 0, bp = ngs->bp_table; i < ngs->bpidx; i++, bp++) { sf = (bp->bp < 0) ? 0 : ngs->bp_table[bp->bp].frame + 1; ef = bp->frame; wid = bp->wid; /* Anything that can be transitioned to in the LM can go in * the word list. */ if (!ngram_model_set_known_wid(ngs->lmset, dict_basewid(ps_search_dict(ngs), wid))) continue; /* Look for it in the wordlist. */ for (node = ngs->frm_wordlist[sf]; node && (node->wid != wid); node = node->next); /* Update last end frame. */ if (node) node->lef = ef; else { /* New node; link to head of list */ node = listelem_malloc(ngs->latnode_alloc); node->wid = wid; node->fef = node->lef = ef; node->next = ngs->frm_wordlist[sf]; ngs->frm_wordlist[sf] = node; } } /* Eliminate "unlikely" words, for which there are too few end points */ for (f = 0; f < ngs->n_frame; f++) { prevnode = NULL; for (node = ngs->frm_wordlist[f]; node; node = nextnode) { nextnode = node->next; /* Word has too few endpoints */ if ((node->lef - node->fef < ngs->min_ef_width) || /* Word is
and doesn't actually end in last frame */ ((node->wid == ps_search_finish_wid(ngs)) && (node->lef < ngs->n_frame - 1))) { if (!prevnode) ngs->frm_wordlist[f] = nextnode; else prevnode->next = nextnode; listelem_free(ngs->latnode_alloc, node); } else prevnode = node; } } /* Form overall wordlist for 2nd pass */ nwd = 0; bitvec_clear_all(ngs->word_active, ps_search_n_words(ngs)); for (f = 0; f < ngs->n_frame; f++) { for (node = ngs->frm_wordlist[f]; node; node = node->next) { if (!bitvec_is_set(ngs->word_active, node->wid)) { bitvec_set(ngs->word_active, node->wid); ngs->fwdflat_wordlist[nwd++] = node->wid; } } } ngs->fwdflat_wordlist[nwd] = -1; E_INFO("Utterance vocabulary contains %d words\n", nwd); } /** * Build HMM network for one utterance of fwdflat search. */ static void build_fwdflat_chan(ngram_search_t *ngs) { int32 i, wid, p; root_chan_t *rhmm; chan_t *hmm, *prevhmm; dict_t *dict; dict2pid_t *d2p; dict = ps_search_dict(ngs); d2p = ps_search_dict2pid(ngs); /* Build word HMMs for each word in the lattice. */ for (i = 0; ngs->fwdflat_wordlist[i] >= 0; i++) { wid = ngs->fwdflat_wordlist[i]; /* Single-phone words are permanently allocated */ if (dict_is_single_phone(dict, wid)) continue; assert(ngs->word_chan[wid] == NULL); /* Multiplex root HMM for first phone (one root per word, flat * lexicon). diphone is irrelevant here, for the time being, * at least. */ rhmm = listelem_malloc(ngs->root_chan_alloc); rhmm->ci2phone = dict_second_phone(dict, wid); rhmm->ciphone = dict_first_phone(dict, wid); rhmm->next = NULL; hmm_init(ngs->hmmctx, &rhmm->hmm, TRUE, bin_mdef_pid2ssid(ps_search_acmod(ngs)->mdef, rhmm->ciphone), bin_mdef_pid2tmatid(ps_search_acmod(ngs)->mdef, rhmm->ciphone)); /* HMMs for word-internal phones */ prevhmm = NULL; for (p = 1; p < dict_pronlen(dict, wid) - 1; p++) { hmm = listelem_malloc(ngs->chan_alloc); hmm->ciphone = dict_pron(dict, wid, p); hmm->info.rc_id = (p == dict_pronlen(dict, wid) - 1) ? 0 : -1; hmm->next = NULL; hmm_init(ngs->hmmctx, &hmm->hmm, FALSE, dict2pid_internal(d2p,wid,p), bin_mdef_pid2tmatid(ps_search_acmod(ngs)->mdef, hmm->ciphone)); if (prevhmm) prevhmm->next = hmm; else rhmm->next = hmm; prevhmm = hmm; } /* Right-context phones */ ngram_search_alloc_all_rc(ngs, wid); /* Link in just allocated right-context phones */ if (prevhmm) prevhmm->next = ngs->word_chan[wid]; else rhmm->next = ngs->word_chan[wid]; ngs->word_chan[wid] = (chan_t *) rhmm; } } void ngram_fwdflat_start(ngram_search_t *ngs) { root_chan_t *rhmm; int i; ptmr_reset(&ngs->fwdflat_perf); ptmr_start(&ngs->fwdflat_perf); build_fwdflat_wordlist(ngs); build_fwdflat_chan(ngs); ngs->bpidx = 0; ngs->bss_head = 0; for (i = 0; i < ps_search_n_words(ngs); i++) ngs->word_lat_idx[i] = NO_BP; /* Reset the permanently allocated single-phone words, since they * may have junk left over in them from previous searches. */ for (i = 0; i < ngs->n_1ph_words; i++) { int32 w = ngs->single_phone_wid[i]; rhmm = (root_chan_t *) ngs->word_chan[w]; hmm_clear(&rhmm->hmm); } /* Start search with ; word_chan[] is permanently allocated */ rhmm = (root_chan_t *) ngs->word_chan[ps_search_start_wid(ngs)]; hmm_enter(&rhmm->hmm, 0, NO_BP, 0); ngs->active_word_list[0][0] = ps_search_start_wid(ngs); ngs->n_active_word[0] = 1; ngs->best_score = 0; ngs->renormalized = FALSE; for (i = 0; i < ps_search_n_words(ngs); i++) ngs->last_ltrans[i].sf = -1; if (!ngs->fwdtree) ngs->n_frame = 0; ngs->st.n_fwdflat_chan = 0; ngs->st.n_fwdflat_words = 0; ngs->st.n_fwdflat_word_transition = 0; ngs->st.n_senone_active_utt = 0; } static void compute_fwdflat_sen_active(ngram_search_t *ngs, int frame_idx) { int32 i, nw, w; int32 *awl; root_chan_t *rhmm; chan_t *hmm; acmod_clear_active(ps_search_acmod(ngs)); nw = ngs->n_active_word[frame_idx & 0x1]; awl = ngs->active_word_list[frame_idx & 0x1]; for (i = 0; i < nw; i++) { w = *(awl++); rhmm = (root_chan_t *)ngs->word_chan[w]; if (hmm_frame(&rhmm->hmm) == frame_idx) { acmod_activate_hmm(ps_search_acmod(ngs), &rhmm->hmm); } for (hmm = rhmm->next; hmm; hmm = hmm->next) { if (hmm_frame(&hmm->hmm) == frame_idx) { acmod_activate_hmm(ps_search_acmod(ngs), &hmm->hmm); } } } } static void fwdflat_eval_chan(ngram_search_t *ngs, int frame_idx) { int32 i, w, nw, bestscore; int32 *awl; root_chan_t *rhmm; chan_t *hmm; nw = ngs->n_active_word[frame_idx & 0x1]; awl = ngs->active_word_list[frame_idx & 0x1]; bestscore = WORST_SCORE; ngs->st.n_fwdflat_words += nw; /* Scan all active words. */ for (i = 0; i < nw; i++) { w = *(awl++); rhmm = (root_chan_t *) ngs->word_chan[w]; if (hmm_frame(&rhmm->hmm) == frame_idx) { int32 score = chan_v_eval(rhmm); if ((score BETTER_THAN bestscore) && (w != ps_search_finish_wid(ngs))) bestscore = score; ngs->st.n_fwdflat_chan++; } for (hmm = rhmm->next; hmm; hmm = hmm->next) { if (hmm_frame(&hmm->hmm) == frame_idx) { int32 score = chan_v_eval(hmm); if (score BETTER_THAN bestscore) bestscore = score; ngs->st.n_fwdflat_chan++; } } } ngs->best_score = bestscore; } static void fwdflat_prune_chan(ngram_search_t *ngs, int frame_idx) { int32 i, nw, cf, nf, w, pip, newscore, thresh, wordthresh; int32 *awl; root_chan_t *rhmm; chan_t *hmm, *nexthmm; cf = frame_idx; nf = cf + 1; nw = ngs->n_active_word[cf & 0x1]; awl = ngs->active_word_list[cf & 0x1]; bitvec_clear_all(ngs->word_active, ps_search_n_words(ngs)); thresh = ngs->best_score + ngs->fwdflatbeam; wordthresh = ngs->best_score + ngs->fwdflatwbeam; pip = ngs->pip; E_DEBUG(3,("frame %d thresh %d wordthresh %d\n", frame_idx, thresh, wordthresh)); /* Scan all active words. */ for (i = 0; i < nw; i++) { w = *(awl++); rhmm = (root_chan_t *) ngs->word_chan[w]; /* Propagate active root channels */ if (hmm_frame(&rhmm->hmm) == cf && hmm_bestscore(&rhmm->hmm) BETTER_THAN thresh) { hmm_frame(&rhmm->hmm) = nf; bitvec_set(ngs->word_active, w); /* Transitions out of root channel */ newscore = hmm_out_score(&rhmm->hmm); if (rhmm->next) { assert(!dict_is_single_phone(ps_search_dict(ngs), w)); newscore += pip; if (newscore BETTER_THAN thresh) { hmm = rhmm->next; /* Enter all right context phones */ if (hmm->info.rc_id >= 0) { for (; hmm; hmm = hmm->next) { if ((hmm_frame(&hmm->hmm) < cf) || (newscore BETTER_THAN hmm_in_score(&hmm->hmm))) { hmm_enter(&hmm->hmm, newscore, hmm_out_history(&rhmm->hmm), nf); } } } /* Just a normal word internal phone */ else { if ((hmm_frame(&hmm->hmm) < cf) || (newscore BETTER_THAN hmm_in_score(&hmm->hmm))) { hmm_enter(&hmm->hmm, newscore, hmm_out_history(&rhmm->hmm), nf); } } } } else { assert(dict_is_single_phone(ps_search_dict(ngs), w)); /* Word exit for single-phone words (where did their * whmms come from?) (either from * ngram_search_fwdtree, or from * ngram_fwdflat_allocate_1ph(), that's where) */ if (newscore BETTER_THAN wordthresh) { ngram_search_save_bp(ngs, cf, w, newscore, hmm_out_history(&rhmm->hmm), 0); } } } /* Transitions out of non-root channels. */ for (hmm = rhmm->next; hmm; hmm = hmm->next) { if (hmm_frame(&hmm->hmm) >= cf) { /* Propagate forward HMMs inside the beam. */ if (hmm_bestscore(&hmm->hmm) BETTER_THAN thresh) { hmm_frame(&hmm->hmm) = nf; bitvec_set(ngs->word_active, w); newscore = hmm_out_score(&hmm->hmm); /* Word-internal phones */ if (hmm->info.rc_id < 0) { newscore += pip; if (newscore BETTER_THAN thresh) { nexthmm = hmm->next; /* Enter all right-context phones. */ if (nexthmm->info.rc_id >= 0) { for (; nexthmm; nexthmm = nexthmm->next) { if ((hmm_frame(&nexthmm->hmm) < cf) || (newscore BETTER_THAN hmm_in_score(&nexthmm->hmm))) { hmm_enter(&nexthmm->hmm, newscore, hmm_out_history(&hmm->hmm), nf); } } } /* Enter single word-internal phone. */ else { if ((hmm_frame(&nexthmm->hmm) < cf) || (newscore BETTER_THAN hmm_in_score(&nexthmm->hmm))) { hmm_enter(&nexthmm->hmm, newscore, hmm_out_history(&hmm->hmm), nf); } } } } /* Right-context phones - apply word beam and exit. */ else { if (newscore BETTER_THAN wordthresh) { ngram_search_save_bp(ngs, cf, w, newscore, hmm_out_history(&hmm->hmm), hmm->info.rc_id); } } } /* Zero out inactive HMMs. */ else if (hmm_frame(&hmm->hmm) != nf) { hmm_clear_scores(&hmm->hmm); } } } } } static void get_expand_wordlist(ngram_search_t *ngs, int32 frm, int32 win) { int32 f, sf, ef; ps_latnode_t *node; if (!ngs->fwdtree) { ngs->st.n_fwdflat_word_transition += ngs->n_expand_words; return; } sf = frm - win; if (sf < 0) sf = 0; ef = frm + win; if (ef > ngs->n_frame) ef = ngs->n_frame; bitvec_clear_all(ngs->expand_word_flag, ps_search_n_words(ngs)); ngs->n_expand_words = 0; for (f = sf; f < ef; f++) { for (node = ngs->frm_wordlist[f]; node; node = node->next) { if (!bitvec_is_set(ngs->expand_word_flag, node->wid)) { ngs->expand_word_list[ngs->n_expand_words++] = node->wid; bitvec_set(ngs->expand_word_flag, node->wid); } } } ngs->expand_word_list[ngs->n_expand_words] = -1; ngs->st.n_fwdflat_word_transition += ngs->n_expand_words; } static void fwdflat_word_transition(ngram_search_t *ngs, int frame_idx) { int32 cf, nf, b, thresh, pip, i, nw, w, newscore; int32 best_silrc_score = 0, best_silrc_bp = 0; /* FIXME: good defaults? */ bptbl_t *bp; int32 *rcss; root_chan_t *rhmm; int32 *awl; float32 lwf; dict_t *dict = ps_search_dict(ngs); dict2pid_t *d2p = ps_search_dict2pid(ngs); cf = frame_idx; nf = cf + 1; thresh = ngs->best_score + ngs->fwdflatbeam; pip = ngs->pip; best_silrc_score = WORST_SCORE; lwf = ngs->fwdflat_fwdtree_lw_ratio; /* Search for all words starting within a window of this frame. * These are the successors for words exiting now. */ get_expand_wordlist(ngs, cf, ngs->max_sf_win); /* Scan words exited in current frame */ for (b = ngs->bp_table_idx[cf]; b < ngs->bpidx; b++) { xwdssid_t *rssid; int32 silscore; bp = ngs->bp_table + b; ngs->word_lat_idx[bp->wid] = NO_BP; if (bp->wid == ps_search_finish_wid(ngs)) continue; /* DICT2PID location */ /* Get the mapping from right context phone ID to index in the * right context table and the bscore_stack. */ rcss = ngs->bscore_stack + bp->s_idx; if (bp->last2_phone == -1) rssid = NULL; else rssid = dict2pid_rssid(d2p, bp->last_phone, bp->last2_phone); /* Transition to all successor words. */ for (i = 0; ngs->expand_word_list[i] >= 0; i++) { int32 n_used; w = ngs->expand_word_list[i]; /* Get the exit score we recorded in save_bwd_ptr(), or * something approximating it. */ if (rssid) newscore = rcss[rssid->cimap[dict_first_phone(dict, w)]]; else newscore = bp->score; if (newscore == WORST_SCORE) continue; /* FIXME: Floating point... */ newscore += lwf * (ngram_tg_score(ngs->lmset, dict_basewid(dict, w), bp->real_wid, bp->prev_real_wid, &n_used) >> SENSCR_SHIFT); newscore += pip; /* Enter the next word */ if (newscore BETTER_THAN thresh) { rhmm = (root_chan_t *) ngs->word_chan[w]; if ((hmm_frame(&rhmm->hmm) < cf) || (newscore BETTER_THAN hmm_in_score(&rhmm->hmm))) { hmm_enter(&rhmm->hmm, newscore, b, nf); /* DICT2PID: This is where mpx ssids get introduced. */ /* Look up the ssid to use when entering this mpx triphone. */ hmm_mpx_ssid(&rhmm->hmm, 0) = dict2pid_ldiph_lc(d2p, rhmm->ciphone, rhmm->ci2phone, dict_last_phone(dict, bp->wid)); assert(IS_S3SSID(hmm_mpx_ssid(&rhmm->hmm, 0))); E_DEBUG(6,("ssid %d(%d,%d) = %d\n", rhmm->ciphone, dict_last_phone(dict, bp->wid), rhmm->ci2phone, hmm_mpx_ssid(&rhmm->hmm, 0))); bitvec_set(ngs->word_active, w); } } } /* Get the best exit into silence. */ if (rssid) silscore = rcss[rssid->cimap[ps_search_acmod(ngs)->mdef->sil]]; else silscore = bp->score; if (silscore BETTER_THAN best_silrc_score) { best_silrc_score = silscore; best_silrc_bp = b; } } /* Transition to */ newscore = best_silrc_score + ngs->silpen + pip; if ((newscore BETTER_THAN thresh) && (newscore BETTER_THAN WORST_SCORE)) { w = ps_search_silence_wid(ngs); rhmm = (root_chan_t *) ngs->word_chan[w]; if ((hmm_frame(&rhmm->hmm) < cf) || (newscore BETTER_THAN hmm_in_score(&rhmm->hmm))) { hmm_enter(&rhmm->hmm, newscore, best_silrc_bp, nf); bitvec_set(ngs->word_active, w); } } /* Transition to noise words */ newscore = best_silrc_score + ngs->fillpen + pip; if ((newscore BETTER_THAN thresh) && (newscore BETTER_THAN WORST_SCORE)) { for (w = dict_filler_start(dict); w <= dict_filler_end(dict); w++) { if (w == ps_search_silence_wid(ngs)) continue; rhmm = (root_chan_t *) ngs->word_chan[w]; /* Noise words that aren't a single phone will have NULL here. */ if (rhmm == NULL) continue; if ((hmm_frame(&rhmm->hmm) < cf) || (newscore BETTER_THAN hmm_in_score(&rhmm->hmm))) { hmm_enter(&rhmm->hmm, newscore, best_silrc_bp, nf); bitvec_set(ngs->word_active, w); } } } /* Reset initial channels of words that have become inactive even after word trans. */ nw = ngs->n_active_word[cf & 0x1]; awl = ngs->active_word_list[cf & 0x1]; for (i = 0; i < nw; i++) { w = *(awl++); rhmm = (root_chan_t *) ngs->word_chan[w]; if (hmm_frame(&rhmm->hmm) == cf) { hmm_clear_scores(&rhmm->hmm); } } } static void fwdflat_renormalize_scores(ngram_search_t *ngs, int frame_idx, int32 norm) { root_chan_t *rhmm; chan_t *hmm; int32 i, nw, cf, w, *awl; cf = frame_idx; /* Renormalize individual word channels */ nw = ngs->n_active_word[cf & 0x1]; awl = ngs->active_word_list[cf & 0x1]; for (i = 0; i < nw; i++) { w = *(awl++); rhmm = (root_chan_t *) ngs->word_chan[w]; if (hmm_frame(&rhmm->hmm) == cf) { hmm_normalize(&rhmm->hmm, norm); } for (hmm = rhmm->next; hmm; hmm = hmm->next) { if (hmm_frame(&hmm->hmm) == cf) { hmm_normalize(&hmm->hmm, norm); } } } ngs->renormalized = TRUE; } int ngram_fwdflat_search(ngram_search_t *ngs, int frame_idx) { int16 const *senscr; int32 nf, i, j; int32 *nawl; /* Activate our HMMs for the current frame if need be. */ if (!ps_search_acmod(ngs)->compallsen) compute_fwdflat_sen_active(ngs, frame_idx); /* Compute GMM scores for the current frame. */ senscr = acmod_score(ps_search_acmod(ngs), &frame_idx); ngs->st.n_senone_active_utt += ps_search_acmod(ngs)->n_senone_active; /* Mark backpointer table for current frame. */ ngram_search_mark_bptable(ngs, frame_idx); /* If the best score is equal to or worse than WORST_SCORE, * recognition has failed, don't bother to keep trying. */ if (ngs->best_score == WORST_SCORE || ngs->best_score WORSE_THAN WORST_SCORE) return 0; /* Renormalize if necessary */ if (ngs->best_score + (2 * ngs->beam) WORSE_THAN WORST_SCORE) { E_INFO("Renormalizing Scores at frame %d, best score %d\n", frame_idx, ngs->best_score); fwdflat_renormalize_scores(ngs, frame_idx, ngs->best_score); } ngs->best_score = WORST_SCORE; hmm_context_set_senscore(ngs->hmmctx, senscr); /* Evaluate HMMs */ fwdflat_eval_chan(ngs, frame_idx); /* Prune HMMs and do phone transitions. */ fwdflat_prune_chan(ngs, frame_idx); /* Do word transitions. */ fwdflat_word_transition(ngs, frame_idx); /* Create next active word list, skip fillers */ nf = frame_idx + 1; nawl = ngs->active_word_list[nf & 0x1]; for (i = 0, j = 0; ngs->fwdflat_wordlist[i] >= 0; i++) { int32 wid = ngs->fwdflat_wordlist[i]; if (bitvec_is_set(ngs->word_active, wid) && wid < ps_search_start_wid(ngs)) { *(nawl++) = wid; j++; } } /* Add fillers */ for (i = ps_search_start_wid(ngs); i < ps_search_n_words(ngs); i++) { if (bitvec_is_set(ngs->word_active, i)) { *(nawl++) = i; j++; } } if (!ngs->fwdtree) ++ngs->n_frame; ngs->n_active_word[nf & 0x1] = j; /* Return the number of frames processed. */ return 1; } /** * Destroy wordlist from the current utterance. */ static void destroy_fwdflat_wordlist(ngram_search_t *ngs) { ps_latnode_t *node, *tnode; int32 f; if (!ngs->fwdtree) return; for (f = 0; f < ngs->n_frame; f++) { for (node = ngs->frm_wordlist[f]; node; node = tnode) { tnode = node->next; listelem_free(ngs->latnode_alloc, node); } } } /** * Free HMM network for one utterance of fwdflat search. */ static void destroy_fwdflat_chan(ngram_search_t *ngs) { int32 i, wid; for (i = 0; ngs->fwdflat_wordlist[i] >= 0; i++) { root_chan_t *rhmm; chan_t *thmm; wid = ngs->fwdflat_wordlist[i]; if (dict_is_single_phone(ps_search_dict(ngs),wid)) continue; assert(ngs->word_chan[wid] != NULL); /* The first HMM in ngs->word_chan[wid] was allocated with * ngs->root_chan_alloc, but this will attempt to free it * using ngs->chan_alloc, which will not work. Therefore we * free it manually and move the list forward before handing * it off. */ rhmm = (root_chan_t *)ngs->word_chan[wid]; thmm = rhmm->next; listelem_free(ngs->root_chan_alloc, rhmm); ngs->word_chan[wid] = thmm; ngram_search_free_all_rc(ngs, wid); } } void ngram_fwdflat_finish(ngram_search_t *ngs) { int32 cf; destroy_fwdflat_chan(ngs); destroy_fwdflat_wordlist(ngs); bitvec_clear_all(ngs->word_active, ps_search_n_words(ngs)); /* This is the number of frames processed. */ cf = ps_search_acmod(ngs)->output_frame; /* Add a mark in the backpointer table for one past the final frame. */ ngram_search_mark_bptable(ngs, cf); ptmr_stop(&ngs->fwdflat_perf); /* Print out some statistics. */ if (cf > 0) { double n_speech = (double)(cf + 1) / cmd_ln_int32_r(ps_search_config(ngs), "-frate"); E_INFO("%8d words recognized (%d/fr)\n", ngs->bpidx, (ngs->bpidx + (cf >> 1)) / (cf + 1)); E_INFO("%8d senones evaluated (%d/fr)\n", ngs->st.n_senone_active_utt, (ngs->st.n_senone_active_utt + (cf >> 1)) / (cf + 1)); E_INFO("%8d channels searched (%d/fr)\n", ngs->st.n_fwdflat_chan, ngs->st.n_fwdflat_chan / (cf + 1)); E_INFO("%8d words searched (%d/fr)\n", ngs->st.n_fwdflat_words, ngs->st.n_fwdflat_words / (cf + 1)); E_INFO("%8d word transitions (%d/fr)\n", ngs->st.n_fwdflat_word_transition, ngs->st.n_fwdflat_word_transition / (cf + 1)); E_INFO("fwdflat %.2f CPU %.3f xRT\n", ngs->fwdflat_perf.t_cpu, ngs->fwdflat_perf.t_cpu / n_speech); E_INFO("fwdflat %.2f wall %.3f xRT\n", ngs->fwdflat_perf.t_elapsed, ngs->fwdflat_perf.t_elapsed / n_speech); } } pocketsphinx-5prealpha/src/libpocketsphinx/ms_gauden.h0000664000175000017500000001326612504317100020510 00000000000000/* -*- 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 _LIBFBS_GAUDEN_H_ #define _LIBFBS_GAUDEN_H_ /** \file ms_gauden.h * \brief (Sphinx 3.0 specific) Gaussian density module. * * Gaussian density distribution implementation. There are two major * difference bettwen ms_gauden and cont_mgau. One is the fact that * ms_gauden only take cares of the Gaussian computation part where * cont_mgau actually take care of senone computation as well. The * other is the fact that ms_gauden is a multi-stream implementation * of GMM computation. * */ /* SphinxBase headers. */ #include #include #include /* Local headers. */ #include "vector.h" #include "pocketsphinx_internal.h" #include "hmm.h" #ifdef __cplusplus extern "C" { #endif /** * \struct gauden_dist_t * \brief Structure to store distance (density) values for a given input observation wrt density values in some given codebook. */ typedef struct { int32 id; /**< Index of codeword (gaussian density) */ mfcc_t dist; /**< Density value for input observation wrt above codeword; NOTE: result in logs3 domain, but var_t used for speed */ } gauden_dist_t; /** * \struct gauden_t * \brief Multivariate gaussian mixture density parameters */ typedef struct { mfcc_t ****mean; /**< mean[codebook][feature][codeword] vector */ mfcc_t ****var; /**< like mean; diagonal covariance vector only */ mfcc_t ***det; /**< log(determinant) for each variance vector; actually, log(sqrt(2*pi*det)) */ logmath_t *lmath; /**< log math computation */ int32 n_mgau; /**< Number codebooks */ int32 n_feat; /**< Number feature streams in each codebook */ int32 n_density; /**< Number gaussian densities in each codebook-feature stream */ int32 *featlen; /**< feature length for each feature */ } gauden_t; /** * Read mixture gaussian codebooks from the given files. Allocate memory space needed * for them. Apply the specified variance floor value. * Return value: ptr to the model created; NULL if error. * (See Sphinx3 model file-format documentation.) */ gauden_t * gauden_init (char const *meanfile,/**< Input: File containing means of mixture gaussians */ char const *varfile,/**< Input: File containing variances of mixture gaussians */ float32 varfloor, /**< Input: Floor value to be applied to variances */ logmath_t *lmath ); /** Release memory allocated by gauden_init. */ void gauden_free(gauden_t *g); /**< In: The gauden_t to free */ /** Transform Gaussians according to an MLLR matrix (or, eventually, more). */ int32 gauden_mllr_transform(gauden_t *s, ps_mllr_t *mllr, cmd_ln_t *config); /** * Compute gaussian density values for the given input observation vector wrt the * specified mixture gaussian codebook (which may consist of several feature streams). * Density values are left UNnormalized. * @return 0 if successful, -1 otherwise. */ int32 gauden_dist (gauden_t *g, /**< In: handle to entire ensemble of codebooks */ int mgau, /**< In: codebook for which density values to be evaluated (g->{mean,var}[mgau]) */ int n_top, /**< In: Number top densities to be evaluated */ mfcc_t **obs, /**< In: Observation vector; obs[f] = for feature f */ gauden_dist_t **out_dist /**< Out: n_top best codewords and density values, in worsening order, for each feature stream. out_dist[f][i] = i-th best density for feature f. Caller must allocate memory for this output */ ); /** Dump the definitionn of Gaussian distribution. */ void gauden_dump (const gauden_t *g /**< In: Gaussian distribution g*/ ); /** Dump the definition of Gaussian distribution of a particular index to the standard output stream */ void gauden_dump_ind (const gauden_t *g, /**< In: Gaussian distribution g*/ int senidx /**< In: The senone index of the Gaussian */ ); #ifdef __cplusplus } #endif #endif /* GAUDEN_H */ pocketsphinx-5prealpha/src/libpocketsphinx/dict.c0000664000175000017500000003435712520771215017501 00000000000000/* -*- 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. * * ==================================================================== * */ /* System headers. */ #include /* SphinxBase headers. */ #include #include /* Local headers. */ #include "dict.h" #define DELIM " \t\n" /* Set of field separator characters */ #define DEFAULT_NUM_PHONE (MAX_S3CIPID+1) #if WIN32 #define snprintf sprintf_s #endif extern const char *const cmu6_lts_phone_table[]; static s3cipid_t dict_ciphone_id(dict_t * d, const char *str) { if (d->nocase) return bin_mdef_ciphone_id_nocase(d->mdef, str); else return bin_mdef_ciphone_id(d->mdef, str); } const char * dict_ciphone_str(dict_t * d, s3wid_t wid, int32 pos) { assert(d != NULL); assert((wid >= 0) && (wid < d->n_word)); assert((pos >= 0) && (pos < d->word[wid].pronlen)); return bin_mdef_ciphone_str(d->mdef, d->word[wid].ciphone[pos]); } s3wid_t dict_add_word(dict_t * d, char const *word, s3cipid_t const * p, int32 np) { int32 len; dictword_t *wordp; s3wid_t newwid; char *wword; if (d->n_word >= d->max_words) { E_INFO("Reallocating to %d KiB for word entries\n", (d->max_words + S3DICT_INC_SZ) * sizeof(dictword_t) / 1024); d->word = (dictword_t *) ckd_realloc(d->word, (d->max_words + S3DICT_INC_SZ) * sizeof(dictword_t)); d->max_words = d->max_words + S3DICT_INC_SZ; } wordp = d->word + d->n_word; wordp->word = (char *) ckd_salloc(word); /* Freed in dict_free */ /* Determine base/alt wids */ wword = ckd_salloc(word); if ((len = dict_word2basestr(wword)) > 0) { int32 w; /* Truncated to a baseword string; find its ID */ if (hash_table_lookup_int32(d->ht, wword, &w) < 0) { E_ERROR("Missing base word for: %s\n", word); ckd_free(wword); ckd_free(wordp->word); wordp->word = NULL; return BAD_S3WID; } /* Link into alt list */ wordp->basewid = w; wordp->alt = d->word[w].alt; d->word[w].alt = d->n_word; } else { wordp->alt = BAD_S3WID; wordp->basewid = d->n_word; } ckd_free(wword); /* Associate word string with d->n_word in hash table */ if (hash_table_enter_int32(d->ht, wordp->word, d->n_word) != d->n_word) { ckd_free(wordp->word); wordp->word = NULL; return BAD_S3WID; } /* Fill in word entry, and set defaults */ if (p && (np > 0)) { wordp->ciphone = (s3cipid_t *) ckd_malloc(np * sizeof(s3cipid_t)); /* Freed in dict_free */ memcpy(wordp->ciphone, p, np * sizeof(s3cipid_t)); wordp->pronlen = np; } else { wordp->ciphone = NULL; wordp->pronlen = 0; } newwid = d->n_word++; return newwid; } static int32 dict_read(FILE * fp, dict_t * d) { lineiter_t *li; char **wptr; s3cipid_t *p; int32 lineno, nwd; s3wid_t w; int32 i, maxwd; size_t stralloc, phnalloc; maxwd = 512; p = (s3cipid_t *) ckd_calloc(maxwd + 4, sizeof(*p)); wptr = (char **) ckd_calloc(maxwd, sizeof(char *)); /* Freed below */ lineno = 0; stralloc = phnalloc = 0; for (li = lineiter_start(fp); li; li = lineiter_next(li)) { lineno++; if (0 == strncmp(li->buf, "##", 2) || 0 == strncmp(li->buf, ";;", 2)) continue; if ((nwd = str2words(li->buf, wptr, maxwd)) < 0) { /* Increase size of p, wptr. */ nwd = str2words(li->buf, NULL, 0); assert(nwd > maxwd); /* why else would it fail? */ maxwd = nwd; p = (s3cipid_t *) ckd_realloc(p, (maxwd + 4) * sizeof(*p)); wptr = (char **) ckd_realloc(wptr, maxwd * sizeof(*wptr)); } if (nwd == 0) /* Empty line */ continue; /* wptr[0] is the word-string and wptr[1..nwd-1] the pronunciation sequence */ if (nwd == 1) { E_ERROR("Line %d: No pronunciation for word '%s'; ignored\n", lineno, wptr[0]); continue; } /* Convert pronunciation string to CI-phone-ids */ for (i = 1; i < nwd; i++) { p[i - 1] = dict_ciphone_id(d, wptr[i]); if (NOT_S3CIPID(p[i - 1])) { E_ERROR("Line %d: Phone '%s' is mising in the acoustic model; word '%s' ignored\n", lineno, wptr[i], wptr[0]); break; } } if (i == nwd) { /* All CI-phones successfully converted to IDs */ w = dict_add_word(d, wptr[0], p, nwd - 1); if (NOT_S3WID(w)) E_ERROR ("Line %d: Failed to add the word '%s' (duplicate?); ignored\n", lineno, wptr[0]); else { stralloc += strlen(d->word[w].word); phnalloc += d->word[w].pronlen * sizeof(s3cipid_t); } } } E_INFO("Allocated %d KiB for strings, %d KiB for phones\n", (int)stralloc / 1024, (int)phnalloc / 1024); ckd_free(p); ckd_free(wptr); return 0; } int dict_write(dict_t *dict, char const *filename, char const *format) { FILE *fh; int i; if ((fh = fopen(filename, "w")) == NULL) { E_ERROR_SYSTEM("Failed to open '%s'", filename); return -1; } for (i = 0; i < dict->n_word; ++i) { char *phones; int j, phlen; if (!dict_real_word(dict, i)) continue; for (phlen = j = 0; j < dict_pronlen(dict, i); ++j) phlen += strlen(dict_ciphone_str(dict, i, j)) + 1; phones = ckd_calloc(1, phlen); for (j = 0; j < dict_pronlen(dict, i); ++j) { strcat(phones, dict_ciphone_str(dict, i, j)); if (j != dict_pronlen(dict, i) - 1) strcat(phones, " "); } fprintf(fh, "%-30s %s\n", dict_wordstr(dict, i), phones); ckd_free(phones); } fclose(fh); return 0; } dict_t * dict_init(cmd_ln_t *config, bin_mdef_t * mdef) { FILE *fp, *fp2; int32 n; lineiter_t *li; dict_t *d; s3cipid_t sil; char const *dictfile = NULL, *fillerfile = NULL; if (config) { dictfile = cmd_ln_str_r(config, "-dict"); fillerfile = cmd_ln_str_r(config, "-fdict"); } /* * First obtain #words in dictionary (for hash table allocation). * Reason: The PC NT system doesn't like to grow memory gradually. Better to allocate * all the required memory in one go. */ fp = NULL; n = 0; if (dictfile) { if ((fp = fopen(dictfile, "r")) == NULL) { E_ERROR_SYSTEM("Failed to open dictionary file '%s' for reading", dictfile); return NULL; } for (li = lineiter_start(fp); li; li = lineiter_next(li)) { if (0 != strncmp(li->buf, "##", 2) && 0 != strncmp(li->buf, ";;", 2)) n++; } fseek(fp, 0L, SEEK_SET); } fp2 = NULL; if (fillerfile) { if ((fp2 = fopen(fillerfile, "r")) == NULL) { E_ERROR_SYSTEM("Failed to open filler dictionary file '%s' for reading", fillerfile); fclose(fp); return NULL; } for (li = lineiter_start(fp2); li; li = lineiter_next(li)) { if (0 != strncmp(li->buf, "##", 2) && 0 != strncmp(li->buf, ";;", 2)) n++; } fseek(fp2, 0L, SEEK_SET); } /* * Allocate dict entries. HACK!! Allow some extra entries for words not in file. * Also check for type size restrictions. */ d = (dict_t *) ckd_calloc(1, sizeof(dict_t)); /* freed in dict_free() */ d->refcnt = 1; d->max_words = (n + S3DICT_INC_SZ < MAX_S3WID) ? n + S3DICT_INC_SZ : MAX_S3WID; if (n >= MAX_S3WID) { E_ERROR("Number of words in dictionaries (%d) exceeds limit (%d)\n", n, MAX_S3WID); fclose(fp); fclose(fp2); ckd_free(d); return NULL; } E_INFO("Allocating %d * %d bytes (%d KiB) for word entries\n", d->max_words, sizeof(dictword_t), d->max_words * sizeof(dictword_t) / 1024); d->word = (dictword_t *) ckd_calloc(d->max_words, sizeof(dictword_t)); /* freed in dict_free() */ d->n_word = 0; if (mdef) d->mdef = bin_mdef_retain(mdef); /* Create new hash table for word strings; case-insensitive word strings */ if (config && cmd_ln_exists_r(config, "-dictcase")) d->nocase = cmd_ln_boolean_r(config, "-dictcase"); d->ht = hash_table_new(d->max_words, d->nocase); /* Digest main dictionary file */ if (fp) { E_INFO("Reading main dictionary: %s\n", dictfile); dict_read(fp, d); fclose(fp); E_INFO("%d words read\n", d->n_word); } if (dict_wordid(d, S3_START_WORD) != BAD_S3WID) { E_ERROR("Remove sentence start word '' from the dictionary\n"); dict_free(d); return NULL; } if (dict_wordid(d, S3_FINISH_WORD) != BAD_S3WID) { E_ERROR("Remove sentence start word '' from the dictionary\n"); dict_free(d); return NULL; } if (dict_wordid(d, S3_SILENCE_WORD) != BAD_S3WID) { E_ERROR("Remove silence word '' from the dictionary\n"); dict_free(d); return NULL; } /* Now the filler dictionary file, if it exists */ d->filler_start = d->n_word; if (fillerfile) { E_INFO("Reading filler dictionary: %s\n", fillerfile); dict_read(fp2, d); fclose(fp2); E_INFO("%d words read\n", d->n_word - d->filler_start); } if (mdef) sil = bin_mdef_silphone(mdef); else sil = 0; if (dict_wordid(d, S3_START_WORD) == BAD_S3WID) { dict_add_word(d, S3_START_WORD, &sil, 1); } if (dict_wordid(d, S3_FINISH_WORD) == BAD_S3WID) { dict_add_word(d, S3_FINISH_WORD, &sil, 1); } if (dict_wordid(d, S3_SILENCE_WORD) == BAD_S3WID) { dict_add_word(d, S3_SILENCE_WORD, &sil, 1); } d->filler_end = d->n_word - 1; /* Initialize distinguished word-ids */ d->startwid = dict_wordid(d, S3_START_WORD); d->finishwid = dict_wordid(d, S3_FINISH_WORD); d->silwid = dict_wordid(d, S3_SILENCE_WORD); if ((d->filler_start > d->filler_end) || (!dict_filler_word(d, d->silwid))) { E_ERROR("Word '%s' must occur (only) in filler dictionary\n", S3_SILENCE_WORD); dict_free(d); return NULL; } /* No check that alternative pronunciations for filler words are in filler range!! */ return d; } s3wid_t dict_wordid(dict_t *d, const char *word) { int32 w; assert(d); assert(word); if (hash_table_lookup_int32(d->ht, word, &w) < 0) return (BAD_S3WID); return w; } int dict_filler_word(dict_t *d, s3wid_t w) { assert(d); assert((w >= 0) && (w < d->n_word)); w = dict_basewid(d, w); if ((w == d->startwid) || (w == d->finishwid)) return 0; if ((w >= d->filler_start) && (w <= d->filler_end)) return 1; return 0; } int dict_real_word(dict_t *d, s3wid_t w) { assert(d); assert((w >= 0) && (w < d->n_word)); w = dict_basewid(d, w); if ((w == d->startwid) || (w == d->finishwid)) return 0; if ((w >= d->filler_start) && (w <= d->filler_end)) return 0; return 1; } int32 dict_word2basestr(char *word) { int32 i, len; len = strlen(word); if (word[len - 1] == ')') { for (i = len - 2; (i > 0) && (word[i] != '('); --i); if (i > 0) { /* The word is of the form (...); strip from left-paren */ word[i] = '\0'; return i; } } return -1; } dict_t * dict_retain(dict_t *d) { ++d->refcnt; return d; } int dict_free(dict_t * d) { int i; dictword_t *word; if (d == NULL) return 0; if (--d->refcnt > 0) return d->refcnt; /* First Step, free all memory allocated for each word */ for (i = 0; i < d->n_word; i++) { word = (dictword_t *) & (d->word[i]); if (word->word) ckd_free((void *) word->word); if (word->ciphone) ckd_free((void *) word->ciphone); } if (d->word) ckd_free((void *) d->word); if (d->ht) hash_table_free(d->ht); if (d->mdef) bin_mdef_free(d->mdef); ckd_free((void *) d); return 0; } void dict_report(dict_t * d) { E_INFO_NOFN("Initialization of dict_t, report:\n"); E_INFO_NOFN("Max word: %d\n", d->max_words); E_INFO_NOFN("No of word: %d\n", d->n_word); E_INFO_NOFN("\n"); } pocketsphinx-5prealpha/src/libpocketsphinx/state_align_search.c0000664000175000017500000002352712520771215022372 00000000000000/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* ==================================================================== * Copyright (c) 2010 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 state_align_search.c State (and phone and word) alignment search. */ #include "state_align_search.h" static int state_align_search_start(ps_search_t *search) { state_align_search_t *sas = (state_align_search_t *)search; /* Activate the initial state. */ hmm_enter(sas->hmms, 0, 0, 0); return 0; } static void renormalize_hmms(state_align_search_t *sas, int frame_idx, int32 norm) { int i; for (i = 0; i < sas->n_phones; ++i) hmm_normalize(sas->hmms + i, norm); } static int32 evaluate_hmms(state_align_search_t *sas, int16 const *senscr, int frame_idx) { int32 bs = WORST_SCORE; int i; hmm_context_set_senscore(sas->hmmctx, senscr); for (i = 0; i < sas->n_phones; ++i) { hmm_t *hmm = sas->hmms + i; int32 score; if (hmm_frame(hmm) < frame_idx) continue; score = hmm_vit_eval(hmm); if (score BETTER_THAN bs) { bs = score; } } return bs; } static void prune_hmms(state_align_search_t *sas, int frame_idx) { int nf = frame_idx + 1; int i; /* Check all phones to see if they remain active in the next frame. */ for (i = 0; i < sas->n_phones; ++i) { hmm_t *hmm = sas->hmms + i; if (hmm_frame(hmm) < frame_idx) continue; hmm_frame(hmm) = nf; } } static void phone_transition(state_align_search_t *sas, int frame_idx) { int nf = frame_idx + 1; int i; for (i = 0; i < sas->n_phones - 1; ++i) { hmm_t *hmm, *nhmm; int32 newphone_score; hmm = sas->hmms + i; if (hmm_frame(hmm) != nf) continue; newphone_score = hmm_out_score(hmm); /* Transition into next phone using the usual Viterbi rule. */ nhmm = hmm + 1; if (hmm_frame(nhmm) < frame_idx || newphone_score BETTER_THAN hmm_in_score(nhmm)) { hmm_enter(nhmm, newphone_score, hmm_out_history(hmm), nf); } } } #define TOKEN_STEP 20 static void extend_tokenstack(state_align_search_t *sas, int frame_idx) { if (frame_idx >= sas->n_fr_alloc) { sas->n_fr_alloc = frame_idx + TOKEN_STEP + 1; sas->tokens = ckd_realloc(sas->tokens, sas->n_emit_state * sas->n_fr_alloc * sizeof(*sas->tokens)); } memset(sas->tokens + frame_idx * sas->n_emit_state, 0xff, sas->n_emit_state * sizeof(*sas->tokens)); } static void record_transitions(state_align_search_t *sas, int frame_idx) { state_align_hist_t *tokens; int i; /* Push another frame of tokens on the stack. */ extend_tokenstack(sas, frame_idx); tokens = sas->tokens + frame_idx * sas->n_emit_state; /* Scan all active HMMs */ for (i = 0; i < sas->n_phones; ++i) { hmm_t *hmm = sas->hmms + i; int j; if (hmm_frame(hmm) < frame_idx) continue; for (j = 0; j < sas->hmmctx->n_emit_state; ++j) { int state_idx = i * sas->hmmctx->n_emit_state + j; /* Record their backpointers on the token stack. */ tokens[state_idx].id = hmm_history(hmm, j); tokens[state_idx].score = hmm_score(hmm, j); /* Update backpointer fields with state index. */ hmm_history(hmm, j) = state_idx; } } } static int state_align_search_step(ps_search_t *search, int frame_idx) { state_align_search_t *sas = (state_align_search_t *)search; acmod_t *acmod = ps_search_acmod(search); int16 const *senscr; int i; /* Calculate senone scores. */ for (i = 0; i < sas->n_phones; ++i) acmod_activate_hmm(acmod, sas->hmms + i); senscr = acmod_score(acmod, &frame_idx); /* Renormalize here if needed. */ /* FIXME: Make sure to (unit-)test this!!! */ if ((sas->best_score - 0x300000) WORSE_THAN WORST_SCORE) { E_INFO("Renormalizing Scores at frame %d, best score %d\n", frame_idx, sas->best_score); renormalize_hmms(sas, frame_idx, sas->best_score); } /* Viterbi step. */ sas->best_score = evaluate_hmms(sas, senscr, frame_idx); prune_hmms(sas, frame_idx); /* Transition out of non-emitting states. */ phone_transition(sas, frame_idx); /* Generate new tokens from best path results. */ record_transitions(sas, frame_idx); /* Update frame counter */ sas->frame = frame_idx; return 0; } static int state_align_search_finish(ps_search_t *search) { state_align_search_t *sas = (state_align_search_t *)search; hmm_t *final_phone = sas->hmms + sas->n_phones - 1; ps_alignment_iter_t *itor; ps_alignment_entry_t *ent; int last_frame, cur_frame; state_align_hist_t last, cur; /* Best state exiting the last cur_frame. */ last.id = cur.id = hmm_out_history(final_phone); last.score = hmm_out_score(final_phone); if (last.score == 0xffff) { E_ERROR("Failed to reach final state in alignment\n"); return -1; } itor = ps_alignment_states(sas->al); last_frame = sas->frame + 1; for (cur_frame = sas->frame - 1; cur_frame >= 0; --cur_frame) { cur = sas->tokens[cur_frame * sas->n_emit_state + cur.id]; /* State boundary, update alignment entry for next state. */ if (cur.id != last.id) { itor = ps_alignment_iter_goto(itor, last.id); assert(itor != NULL); ent = ps_alignment_iter_get(itor); ent->start = cur_frame + 1; ent->duration = last_frame - ent->start; ent->score = last.score - cur.score; E_DEBUG(1,("state %d start %d end %d\n", last.id, ent->start, last_frame)); last = cur; last_frame = cur_frame + 1; } } /* Update alignment entry for initial state. */ itor = ps_alignment_iter_goto(itor, 0); assert(itor != NULL); ent = ps_alignment_iter_get(itor); ent->start = 0; ent->duration = last_frame; E_DEBUG(1,("state %d start %d end %d\n", 0, ent->start, last_frame)); ps_alignment_iter_free(itor); ps_alignment_propagate(sas->al); return 0; } static int state_align_search_reinit(ps_search_t *search, dict_t *dict, dict2pid_t *d2p) { /* This does nothing. */ return 0; } static void state_align_search_free(ps_search_t *search) { state_align_search_t *sas = (state_align_search_t *)search; ps_search_base_free(search); ckd_free(sas->hmms); ckd_free(sas->tokens); hmm_context_free(sas->hmmctx); ckd_free(sas); } static ps_searchfuncs_t state_align_search_funcs = { /* start: */ state_align_search_start, /* step: */ state_align_search_step, /* finish: */ state_align_search_finish, /* reinit: */ state_align_search_reinit, /* free: */ state_align_search_free, /* lattice: */ NULL, /* hyp: */ NULL, /* prob: */ NULL, /* seg_iter: */ NULL, }; ps_search_t * state_align_search_init(const char *name, cmd_ln_t *config, acmod_t *acmod, ps_alignment_t *al) { state_align_search_t *sas; ps_alignment_iter_t *itor; hmm_t *hmm; sas = ckd_calloc(1, sizeof(*sas)); ps_search_init(ps_search_base(sas), &state_align_search_funcs, PS_SEARCH_TYPE_STATE_ALIGN, name, config, acmod, al->d2p->dict, al->d2p); sas->hmmctx = hmm_context_init(bin_mdef_n_emit_state(acmod->mdef), acmod->tmat->tp, NULL, acmod->mdef->sseq); if (sas->hmmctx == NULL) { ckd_free(sas); return NULL; } sas->al = al; /* Generate HMM vector from phone level of alignment. */ sas->n_phones = ps_alignment_n_phones(al); sas->n_emit_state = ps_alignment_n_states(al); sas->hmms = ckd_calloc(sas->n_phones, sizeof(*sas->hmms)); for (hmm = sas->hmms, itor = ps_alignment_phones(al); itor; ++hmm, itor = ps_alignment_iter_next(itor)) { ps_alignment_entry_t *ent = ps_alignment_iter_get(itor); hmm_init(sas->hmmctx, hmm, FALSE, ent->id.pid.ssid, ent->id.pid.tmatid); } return ps_search_base(sas); } pocketsphinx-5prealpha/src/libpocketsphinx/phone_loop_search.c0000664000175000017500000002727012520771215022241 00000000000000/* -*- 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 phone_loop_search.h Fast and rough context-independent phoneme loop search. */ #include #include "phone_loop_search.h" static int phone_loop_search_start(ps_search_t *search); static int phone_loop_search_step(ps_search_t *search, int frame_idx); static int phone_loop_search_finish(ps_search_t *search); static int phone_loop_search_reinit(ps_search_t *search, dict_t *dict, dict2pid_t *d2p); static void phone_loop_search_free(ps_search_t *search); static char const *phone_loop_search_hyp(ps_search_t *search, int32 *out_score, int32 *out_is_final); static int32 phone_loop_search_prob(ps_search_t *search); static ps_seg_t *phone_loop_search_seg_iter(ps_search_t *search, int32 *out_score); static ps_searchfuncs_t phone_loop_search_funcs = { /* start: */ phone_loop_search_start, /* step: */ phone_loop_search_step, /* finish: */ phone_loop_search_finish, /* reinit: */ phone_loop_search_reinit, /* free: */ phone_loop_search_free, /* lattice: */ NULL, /* hyp: */ phone_loop_search_hyp, /* prob: */ phone_loop_search_prob, /* seg_iter: */ phone_loop_search_seg_iter, }; static int phone_loop_search_reinit(ps_search_t *search, dict_t *dict, dict2pid_t *d2p) { phone_loop_search_t *pls = (phone_loop_search_t *)search; cmd_ln_t *config = ps_search_config(search); acmod_t *acmod = ps_search_acmod(search); int i; /* Free old dict2pid, dict, if necessary. */ ps_search_base_reinit(search, dict, d2p); /* Initialize HMM context. */ if (pls->hmmctx) hmm_context_free(pls->hmmctx); pls->hmmctx = hmm_context_init(bin_mdef_n_emit_state(acmod->mdef), acmod->tmat->tp, NULL, acmod->mdef->sseq); if (pls->hmmctx == NULL) return -1; /* Initialize penalty storage */ pls->n_phones = bin_mdef_n_ciphone(acmod->mdef); pls->window = cmd_ln_int32_r(config, "-pl_window"); if (pls->penalties) ckd_free(pls->penalties); pls->penalties = (int32 *)ckd_calloc(pls->n_phones, sizeof(*pls->penalties)); if (pls->pen_buf) ckd_free_2d(pls->pen_buf); pls->pen_buf = (int32 **)ckd_calloc_2d(pls->window, pls->n_phones, sizeof(**pls->pen_buf)); /* Initialize phone HMMs. */ if (pls->hmms) { for (i = 0; i < pls->n_phones; ++i) hmm_deinit((hmm_t *)&pls->hmms[i]); ckd_free(pls->hmms); } pls->hmms = (hmm_t *)ckd_calloc(pls->n_phones, sizeof(*pls->hmms)); for (i = 0; i < pls->n_phones; ++i) { hmm_init(pls->hmmctx, (hmm_t *)&pls->hmms[i], FALSE, bin_mdef_pid2ssid(acmod->mdef, i), bin_mdef_pid2tmatid(acmod->mdef, i)); } pls->penalty_weight = cmd_ln_float64_r(config, "-pl_weight"); pls->beam = logmath_log(acmod->lmath, cmd_ln_float64_r(config, "-pl_beam")) >> SENSCR_SHIFT; pls->pbeam = logmath_log(acmod->lmath, cmd_ln_float64_r(config, "-pl_pbeam")) >> SENSCR_SHIFT; pls->pip = logmath_log(acmod->lmath, cmd_ln_float32_r(config, "-pl_pip")) >> SENSCR_SHIFT; E_INFO("State beam %d Phone exit beam %d Insertion penalty %d\n", pls->beam, pls->pbeam, pls->pip); return 0; } ps_search_t * phone_loop_search_init(cmd_ln_t *config, acmod_t *acmod, dict_t *dict) { phone_loop_search_t *pls; /* Allocate and initialize. */ pls = (phone_loop_search_t *)ckd_calloc(1, sizeof(*pls)); ps_search_init(ps_search_base(pls), &phone_loop_search_funcs, PS_SEARCH_TYPE_PHONE_LOOP, PS_DEFAULT_PL_SEARCH, config, acmod, dict, NULL); phone_loop_search_reinit(ps_search_base(pls), ps_search_dict(pls), ps_search_dict2pid(pls)); return ps_search_base(pls); } static void phone_loop_search_free_renorm(phone_loop_search_t *pls) { gnode_t *gn; for (gn = pls->renorm; gn; gn = gnode_next(gn)) ckd_free(gnode_ptr(gn)); glist_free(pls->renorm); pls->renorm = NULL; } static void phone_loop_search_free(ps_search_t *search) { phone_loop_search_t *pls = (phone_loop_search_t *)search; int i; ps_search_base_free(search); for (i = 0; i < pls->n_phones; ++i) hmm_deinit((hmm_t *)&pls->hmms[i]); phone_loop_search_free_renorm(pls); ckd_free_2d(pls->pen_buf); ckd_free(pls->hmms); ckd_free(pls->penalties); hmm_context_free(pls->hmmctx); ckd_free(pls); } static int phone_loop_search_start(ps_search_t *search) { phone_loop_search_t *pls = (phone_loop_search_t *)search; int i; /* Reset and enter all phone HMMs. */ for (i = 0; i < pls->n_phones; ++i) { hmm_t *hmm = (hmm_t *)&pls->hmms[i]; hmm_clear(hmm); hmm_enter(hmm, 0, -1, 0); } memset(pls->penalties, 0, pls->n_phones * sizeof(*pls->penalties)); for (i = 0; i < pls->window; i++) memset(pls->pen_buf[i], 0, pls->n_phones * sizeof(*pls->pen_buf[i])); phone_loop_search_free_renorm(pls); pls->best_score = 0; pls->pen_buf_ptr = 0; return 0; } static void renormalize_hmms(phone_loop_search_t *pls, int frame_idx, int32 norm) { phone_loop_renorm_t *rn = (phone_loop_renorm_t *)ckd_calloc(1, sizeof(*rn)); int i; pls->renorm = glist_add_ptr(pls->renorm, rn); rn->frame_idx = frame_idx; rn->norm = norm; for (i = 0; i < pls->n_phones; ++i) { hmm_normalize((hmm_t *)&pls->hmms[i], norm); } } static void evaluate_hmms(phone_loop_search_t *pls, int16 const *senscr, int frame_idx) { int32 bs = WORST_SCORE; int i; hmm_context_set_senscore(pls->hmmctx, senscr); for (i = 0; i < pls->n_phones; ++i) { hmm_t *hmm = (hmm_t *)&pls->hmms[i]; int32 score; if (hmm_frame(hmm) < frame_idx) continue; score = hmm_vit_eval(hmm); if (score BETTER_THAN bs) { bs = score; } } pls->best_score = bs; } static void store_scores(phone_loop_search_t *pls, int frame_idx) { int i, j, itr; for (i = 0; i < pls->n_phones; ++i) { hmm_t *hmm = (hmm_t *)&pls->hmms[i]; pls->pen_buf[pls->pen_buf_ptr][i] = (hmm_bestscore(hmm) - pls->best_score) * pls->penalty_weight; } pls->pen_buf_ptr++; pls->pen_buf_ptr = pls->pen_buf_ptr % pls->window; //update penalties for (i = 0; i < pls->n_phones; ++i) { pls->penalties[i] = WORST_SCORE; for (j = 0, itr = pls->pen_buf_ptr + 1; j < pls->window; j++, itr++) { itr = itr % pls->window; if (pls->pen_buf[itr][i] > pls->penalties[i]) pls->penalties[i] = pls->pen_buf[itr][i]; } } } static void prune_hmms(phone_loop_search_t *pls, int frame_idx) { int32 thresh = pls->best_score + pls->beam; int nf = frame_idx + 1; int i; /* Check all phones to see if they remain active in the next frame. */ for (i = 0; i < pls->n_phones; ++i) { hmm_t *hmm = (hmm_t *)&pls->hmms[i]; if (hmm_frame(hmm) < frame_idx) continue; /* Retain if score better than threshold. */ if (hmm_bestscore(hmm) BETTER_THAN thresh) { hmm_frame(hmm) = nf; } else hmm_clear_scores(hmm); } } static void phone_transition(phone_loop_search_t *pls, int frame_idx) { int32 thresh = pls->best_score + pls->pbeam; int nf = frame_idx + 1; int i; /* Now transition out of phones whose last states are inside the * phone transition beam. */ for (i = 0; i < pls->n_phones; ++i) { hmm_t *hmm = (hmm_t *)&pls->hmms[i]; int32 newphone_score; int j; if (hmm_frame(hmm) != nf) continue; newphone_score = hmm_out_score(hmm) + pls->pip; if (newphone_score BETTER_THAN thresh) { /* Transition into all phones using the usual Viterbi rule. */ for (j = 0; j < pls->n_phones; ++j) { hmm_t *nhmm = (hmm_t *)&pls->hmms[j]; if (hmm_frame(nhmm) < frame_idx || newphone_score BETTER_THAN hmm_in_score(nhmm)) { hmm_enter(nhmm, newphone_score, hmm_out_history(hmm), nf); } } } } } static int phone_loop_search_step(ps_search_t *search, int frame_idx) { phone_loop_search_t *pls = (phone_loop_search_t *)search; acmod_t *acmod = ps_search_acmod(search); int16 const *senscr; int i; /* All CI senones are active all the time. */ if (!ps_search_acmod(pls)->compallsen) { acmod_clear_active(ps_search_acmod(pls)); for (i = 0; i < pls->n_phones; ++i) acmod_activate_hmm(acmod, (hmm_t *)&pls->hmms[i]); } /* Calculate senone scores for current frame. */ senscr = acmod_score(acmod, &frame_idx); /* Renormalize, if necessary. */ if (pls->best_score + (2 * pls->beam) WORSE_THAN WORST_SCORE) { E_INFO("Renormalizing Scores at frame %d, best score %d\n", frame_idx, pls->best_score); renormalize_hmms(pls, frame_idx, pls->best_score); } /* Evaluate phone HMMs for current frame. */ evaluate_hmms(pls, senscr, frame_idx); /* Store hmm scores for senone penaly calculation */ store_scores(pls, frame_idx); /* Prune phone HMMs. */ prune_hmms(pls, frame_idx); /* Do phone transitions. */ phone_transition(pls, frame_idx); return 0; } static int phone_loop_search_finish(ps_search_t *search) { /* Actually nothing to do here really. */ return 0; } static char const * phone_loop_search_hyp(ps_search_t *search, int32 *out_score, int32 *out_is_final) { E_WARN("Hypotheses are not returned from phone loop search"); return NULL; } static int32 phone_loop_search_prob(ps_search_t *search) { /* FIXME: Actually... they ought to be. */ E_WARN("Posterior probabilities are not returned from phone loop search"); return 0; } static ps_seg_t * phone_loop_search_seg_iter(ps_search_t *search, int32 *out_score) { E_WARN("Hypotheses are not returned from phone loop search"); return NULL; } pocketsphinx-5prealpha/src/libpocketsphinx/bin_mdef.h0000664000175000017500000002064312504317100020306 00000000000000/* -*- c-file-style: "linux" -*- */ /* ==================================================================== * 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 bin_mdef.h * * Binary format model definition files, with support for * heterogeneous topologies and variable-size N-phones * * @author David Huggins-Daines */ #ifndef __BIN_MDEF_H__ #define __BIN_MDEF_H__ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ /* SphinxBase headers. */ #include #include #include #include "mdef.h" #define BIN_MDEF_FORMAT_VERSION 1 /* Little-endian machines will write "BMDF" to disk, big-endian ones "FDMB". */ #define BIN_MDEF_NATIVE_ENDIAN 0x46444d42 /* 'BMDF' in little-endian order */ #define BIN_MDEF_OTHER_ENDIAN 0x424d4446 /* 'BMDF' in big-endian order */ #ifdef __GNUC__ #define __ATTRIBUTE_PACKED __attribute__((packed)) #else #define __ATTRIBUTE_PACKED #endif /** * Phone entry (on-disk, 12 bytes) */ typedef struct mdef_entry_s mdef_entry_t; struct mdef_entry_s { int32 ssid; /**< Senone sequence ID */ int32 tmat; /**< Transition matrix ID */ /* FIXME: is any of this actually necessary? */ union { /**< CI phone information - attributes (just "filler" for now) */ struct { uint8 filler; uint8 reserved[3]; } ci; /**< CD phone information - context info. */ struct { uint8 wpos; uint8 ctx[3]; /**< quintphones will require hacking */ } cd; } info; } __ATTRIBUTE_PACKED; /** * Invalid senone sequence ID (limited to 16 bits for PocketSphinx). */ #define BAD_SSID 0xffff /** * Invalid senone ID (limited to 16 bits for PocketSphinx). */ #define BAD_SENID 0xffff /** * Node in CD phone tree (on-disk, 8 bytes). */ typedef struct cd_tree_s cd_tree_t; struct cd_tree_s { int16 ctx; /**< Context (word position or CI phone) */ int16 n_down; /**< Number of children (0 for leafnode) */ union { int32 pid; /**< Phone ID (leafnode) */ int32 down; /**< Next level of the tree (offset from start of cd_trees) */ } c; }; /** * Model definition structure (in-memory). */ typedef struct bin_mdef_s bin_mdef_t; struct bin_mdef_s { int refcnt; int32 n_ciphone; /**< Number of base (CI) phones */ int32 n_phone; /**< Number of base (CI) phones + (CD) triphones */ int32 n_emit_state; /**< Number of emitting states per phone (0 for heterogeneous) */ int32 n_ci_sen; /**< Number of CI senones; these are the first */ int32 n_sen; /**< Number of senones (CI+CD) */ int32 n_tmat; /**< Number of transition matrices */ int32 n_sseq; /**< Number of unique senone sequences */ int32 n_ctx; /**< Number of phones of context */ int32 n_cd_tree; /**< Number of nodes in cd_tree (below) */ int16 sil; /**< CI phone ID for silence */ mmio_file_t *filemap;/**< File map for this file (if any) */ char **ciname; /**< CI phone names */ cd_tree_t *cd_tree; /**< Tree mapping CD phones to phone IDs */ mdef_entry_t *phone; /**< All phone structures */ uint16 **sseq; /**< Unique senone sequences (2D array built at load time) */ uint8 *sseq_len; /**< Number of states in each sseq (NULL for homogeneous) */ /* These two are not stored on disk, but are generated at load time. */ int16 *cd2cisen; /**< Parent CI-senone id for each senone */ int16 *sen2cimap; /**< Parent CI-phone for each senone (CI or CD) */ /** Allocation mode for this object. */ enum { BIN_MDEF_FROM_TEXT, BIN_MDEF_IN_MEMORY, BIN_MDEF_ON_DISK } alloc_mode; }; #define bin_mdef_is_fillerphone(m,p) (((p) < (m)->n_ciphone) \ ? (m)->phone[p].info.ci.filler \ : (m)->phone[(m)->phone[p].info.cd.ctx[0]].info.ci.filler) #define bin_mdef_is_ciphone(m,p) ((p) < (m)->n_ciphone) #define bin_mdef_n_ciphone(m) ((m)->n_ciphone) #define bin_mdef_n_phone(m) ((m)->n_phone) #define bin_mdef_n_sseq(m) ((m)->n_sseq) #define bin_mdef_n_emit_state(m) ((m)->n_emit_state) #define bin_mdef_n_emit_state_phone(m,p) ((m)->n_emit_state ? (m)->n_emit_state \ : (m)->sseq_len[(m)->phone[p].ssid]) #define bin_mdef_n_sen(m) ((m)->n_sen) #define bin_mdef_n_tmat(m) ((m)->n_tmat) #define bin_mdef_pid2ssid(m,p) ((m)->phone[p].ssid) #define bin_mdef_pid2tmatid(m,p) ((m)->phone[p].tmat) #define bin_mdef_silphone(m) ((m)->sil) #define bin_mdef_sen2cimap(m,s) ((m)->sen2cimap[s]) #define bin_mdef_sseq2sen(m,ss,pos) ((m)->sseq[ss][pos]) #define bin_mdef_pid2ci(m,p) (((p) < (m)->n_ciphone) ? (p) \ : (m)->phone[p].info.cd.ctx[0]) /** * Read a binary mdef from a file. */ POCKETSPHINX_EXPORT bin_mdef_t *bin_mdef_read(cmd_ln_t *config, const char *filename); /** * Read a text mdef from a file (creating an in-memory binary mdef). */ POCKETSPHINX_EXPORT bin_mdef_t *bin_mdef_read_text(cmd_ln_t *config, const char *filename); /** * Write a binary mdef to a file. */ POCKETSPHINX_EXPORT int bin_mdef_write(bin_mdef_t *m, const char *filename); /** * Write a binary mdef to a text file. */ POCKETSPHINX_EXPORT int bin_mdef_write_text(bin_mdef_t *m, const char *filename); /** * Retain a pointer to a bin_mdef_t. */ bin_mdef_t *bin_mdef_retain(bin_mdef_t *m); /** * Release a pointer to a binary mdef. */ int bin_mdef_free(bin_mdef_t *m); /** * Context-independent phone lookup. * @return phone id for ciphone. */ int bin_mdef_ciphone_id(bin_mdef_t *m, /**< In: Model structure being queried */ const char *ciphone); /**< In: ciphone for which id wanted */ /** * Case-insensitive context-independent phone lookup. * @return phone id for ciphone. */ int bin_mdef_ciphone_id_nocase(bin_mdef_t *m, /**< In: Model structure being queried */ const char *ciphone); /**< In: ciphone for which id wanted */ /* Return value: READ-ONLY ciphone string name for the given ciphone id */ const char *bin_mdef_ciphone_str(bin_mdef_t *m, /**< In: Model structure being queried */ int32 ci); /**< In: ciphone id for which name wanted */ /* Return value: phone id for the given constituents if found, else -1 */ int bin_mdef_phone_id(bin_mdef_t *m, /**< In: Model structure being queried */ int32 b, /**< In: base ciphone id */ int32 l, /**< In: left context ciphone id */ int32 r, /**< In: right context ciphone id */ int32 pos); /**< In: Word position */ /* Look up a phone id, backing off to other word positions. */ int bin_mdef_phone_id_nearest(bin_mdef_t * m, int32 b, int32 l, int32 r, int32 pos); /** * Create a phone string for the given phone (base or triphone) id in the given buf. * * @return 0 if successful, -1 if error. */ int bin_mdef_phone_str(bin_mdef_t *m, /**< In: Model structure being queried */ int pid, /**< In: phone id being queried */ char *buf); /**< Out: On return, buf has the string */ #ifdef __cplusplus }; /* extern "C" */ #endif /* __cplusplus */ #endif /* __BIN_MDEF_H__ */ pocketsphinx-5prealpha/src/libpocketsphinx/blkarray_list.c0000664000175000017500000001110212504317100021366 00000000000000/* -*- 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. * * ==================================================================== * */ /* * blkarray_list.c -- block array-based list structure. * * HISTORY * * 18-Feb-2004 M K Ravishankar (rkm@cs.cmu.edu) at Carnegie Mellon * Started. */ /* System headers. */ #include /* SphinxBase headers. */ #include #include #include /* Local headers. */ #include "blkarray_list.h" #define BLKARRAY_DEFAULT_MAXBLKS 16380 #define BLKARRAY_DEFAULT_BLKSIZE 16380 blkarray_list_t * _blkarray_list_init(int32 maxblks, int32 blksize) { blkarray_list_t *bl; if ((maxblks <= 0) || (blksize <= 0)) { E_ERROR("Cannot allocate %dx%d blkarray\n", maxblks, blksize); return NULL; } bl = (blkarray_list_t *) ckd_calloc(1, sizeof(blkarray_list_t)); bl->ptr = (void ***) ckd_calloc(maxblks, sizeof(void **)); bl->maxblks = maxblks; bl->blksize = blksize; bl->n_valid = 0; bl->cur_row = -1; /* No row is allocated (dummy) */ bl->cur_row_free = blksize; /* The dummy row is full */ return bl; } blkarray_list_t * blkarray_list_init(void) { return _blkarray_list_init(BLKARRAY_DEFAULT_MAXBLKS, BLKARRAY_DEFAULT_BLKSIZE); } void blkarray_list_free(blkarray_list_t *bl) { blkarray_list_reset(bl); ckd_free(bl->ptr); ckd_free(bl); } int32 blkarray_list_append(blkarray_list_t * bl, void *data) { int32 id; assert(bl); if (bl->cur_row_free >= bl->blksize) { /* Previous row is filled; need to allocate a new row */ bl->cur_row++; if (bl->cur_row >= bl->maxblks) { E_ERROR("Block array (%dx%d) exhausted\n", bl->maxblks, bl->blksize); bl->cur_row--; return -1; } /* Allocate the new row */ assert(bl->ptr[bl->cur_row] == NULL); bl->ptr[bl->cur_row] = (void **) ckd_malloc(bl->blksize * sizeof(void *)); bl->cur_row_free = 0; } bl->ptr[bl->cur_row][bl->cur_row_free] = data; (bl->cur_row_free)++; id = (bl->n_valid)++; assert(id >= 0); return id; } void blkarray_list_reset(blkarray_list_t * bl) { int32 i, j; /* Free all the allocated elements as well as the blocks */ for (i = 0; i < bl->cur_row; i++) { for (j = 0; j < bl->blksize; j++) ckd_free(bl->ptr[i][j]); ckd_free(bl->ptr[i]); bl->ptr[i] = NULL; } if (i == bl->cur_row) { /* NEED THIS! (in case cur_row < 0) */ for (j = 0; j < bl->cur_row_free; j++) ckd_free(bl->ptr[i][j]); ckd_free(bl->ptr[i]); bl->ptr[i] = NULL; } bl->n_valid = 0; bl->cur_row = -1; bl->cur_row_free = bl->blksize; } void * blkarray_list_get(blkarray_list_t *list, int32 n) { int32 r, c; if (n >= blkarray_list_n_valid(list)) return NULL; r = n / blkarray_list_blksize(list); c = n - (r * blkarray_list_blksize(list)); return blkarray_list_ptr(list, r, c); } pocketsphinx-5prealpha/src/libpocketsphinx/kws_detections.h0000664000175000017500000000470712525215221021577 00000000000000/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* ==================================================================== * Copyright (c) 2014 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. * * ==================================================================== * */ /* * kws_detections.h -- Structures for storing keyword spotting results. */ #ifndef __KWS_DETECTIONS_H__ #define __KWS_DETECTIONS_H__ /* SphinxBase headers. */ #include /* Local headers. */ #include "pocketsphinx_internal.h" #include "hmm.h" typedef struct kws_detection_s { const char* keyphrase; frame_idx_t sf; frame_idx_t ef; int32 prob; int32 ascr; } kws_detection_t; typedef struct kws_detections_s { glist_t detect_list; } kws_detections_t; /** * Reset history structure. */ void kws_detections_reset(kws_detections_t *detections); /** * Add history entry. */ void kws_detections_add(kws_detections_t *detections, const char* keyphrase, int sf, int ef, int prob, int ascr); /** * Compose hypothesis. */ char* kws_detections_hyp_str(kws_detections_t *detections, int frame, int delay); #endif /* __KWS_DETECTIONS_H__ */ pocketsphinx-5prealpha/src/libpocketsphinx/dict.h0000664000175000017500000001673712504317100017477 00000000000000/* -*- 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 _S3_DICT_H_ #define _S3_DICT_H_ /** \file dict.h * \brief Operations on dictionary. */ /* SphinxBase headers. */ #include /* Local headers. */ #include "s3types.h" #include "bin_mdef.h" #include "pocketsphinx_export.h" #define S3DICT_INC_SZ 4096 #ifdef __cplusplus extern "C" { #endif /** \struct dictword_t \brief a structure for one dictionary word. */ typedef struct { char *word; /**< Ascii word string */ s3cipid_t *ciphone; /**< Pronunciation */ int32 pronlen; /**< Pronunciation length */ s3wid_t alt; /**< Next alternative pronunciation id, NOT_S3WID if none */ s3wid_t basewid; /**< Base pronunciation id */ } dictword_t; /** \struct dict_t \brief a structure for a dictionary. */ typedef struct { int refcnt; bin_mdef_t *mdef; /**< Model definition used for phone IDs; NULL if none used */ dictword_t *word; /**< Array of entries in dictionary */ hash_table_t *ht; /**< Hash table for mapping word strings to word ids */ int32 max_words; /**< #Entries allocated in dict, including empty slots */ int32 n_word; /**< #Occupied entries in dict; ie, excluding empty slots */ int32 filler_start; /**< First filler word id (read from filler dict) */ int32 filler_end; /**< Last filler word id (read from filler dict) */ s3wid_t startwid; /**< FOR INTERNAL-USE ONLY */ s3wid_t finishwid; /**< FOR INTERNAL-USE ONLY */ s3wid_t silwid; /**< FOR INTERNAL-USE ONLY */ int nocase; } dict_t; /** * Initialize a new dictionary. * * If config and mdef are supplied, then the dictionary will be read * from the files specified by the -dict and -fdict options in config, * with case sensitivity determined by the -dictcase option. * * Otherwise an empty case-sensitive dictionary will be created. * * Return ptr to dict_t if successful, NULL otherwise. */ dict_t *dict_init(cmd_ln_t *config, /**< Configuration (-dict, -fdict, -dictcase) or NULL */ bin_mdef_t *mdef /**< For looking up CI phone IDs (or NULL) */ ); /** * Write dictionary to a file. */ int dict_write(dict_t *dict, char const *filename, char const *format); /** Return word id for given word string if present. Otherwise return BAD_S3WID */ POCKETSPHINX_EXPORT s3wid_t dict_wordid(dict_t *d, const char *word); /** * Return 1 if w is a filler word, 0 if not. A filler word is one that was read in from the * filler dictionary; however, sentence START and FINISH words are not filler words. */ int dict_filler_word(dict_t *d, /**< The dictionary structure */ s3wid_t w /**< The word ID */ ); /** * Test if w is a "real" word, i.e. neither a filler word nor START/FINISH. */ POCKETSPHINX_EXPORT int dict_real_word(dict_t *d, /**< The dictionary structure */ s3wid_t w /**< The word ID */ ); /** * Add a word with the given ciphone pronunciation list to the dictionary. * Return value: Result word id if successful, BAD_S3WID otherwise */ s3wid_t dict_add_word(dict_t *d, /**< The dictionary structure. */ char const *word, /**< The word. */ s3cipid_t const *p, /**< The pronunciation. */ int32 np /**< Number of phones. */ ); /** * Return value: CI phone string for the given word, phone position. */ const char *dict_ciphone_str(dict_t *d, /**< In: Dictionary to look up */ s3wid_t wid, /**< In: Component word being looked up */ int32 pos /**< In: Pronunciation phone position */ ); /** Packaged macro access to dictionary members */ #define dict_size(d) ((d)->n_word) #define dict_num_fillers(d) (dict_filler_end(d) - dict_filler_start(d)) /** * Number of "real words" in the dictionary. * * This is the number of words that are not fillers, , or . */ #define dict_num_real_words(d) \ (dict_size(d) - (dict_filler_end(d) - dict_filler_start(d)) - 2) #define dict_basewid(d,w) ((d)->word[w].basewid) #define dict_wordstr(d,w) ((w) < 0 ? NULL : (d)->word[w].word) #define dict_basestr(d,w) ((d)->word[dict_basewid(d,w)].word) #define dict_nextalt(d,w) ((d)->word[w].alt) #define dict_pronlen(d,w) ((d)->word[w].pronlen) #define dict_pron(d,w,p) ((d)->word[w].ciphone[p]) /**< The CI phones of the word w at position p */ #define dict_filler_start(d) ((d)->filler_start) #define dict_filler_end(d) ((d)->filler_end) #define dict_startwid(d) ((d)->startwid) #define dict_finishwid(d) ((d)->finishwid) #define dict_silwid(d) ((d)->silwid) #define dict_is_single_phone(d,w) ((d)->word[w].pronlen == 1) #define dict_first_phone(d,w) ((d)->word[w].ciphone[0]) #define dict_second_phone(d,w) ((d)->word[w].ciphone[1]) #define dict_second_last_phone(d,w) ((d)->word[w].ciphone[(d)->word[w].pronlen - 2]) #define dict_last_phone(d,w) ((d)->word[w].ciphone[(d)->word[w].pronlen - 1]) /* Hard-coded special words */ #define S3_START_WORD "" #define S3_FINISH_WORD "" #define S3_SILENCE_WORD "" #define S3_UNKNOWN_WORD "" /** * If the given word contains a trailing "(....)" (i.e., a Sphinx-II style alternative * pronunciation specification), strip that trailing portion from it. Note that the given * string is modified. * Return value: If string was modified, the character position at which the original string * was truncated; otherwise -1. */ int32 dict_word2basestr(char *word); /** * Retain a pointer to an dict_t. */ dict_t *dict_retain(dict_t *d); /** * Release a pointer to a dictionary. */ int dict_free(dict_t *d); /** Report a dictionary structure */ void dict_report(dict_t *d /**< A dictionary structure */ ); #ifdef __cplusplus } #endif #endif pocketsphinx-5prealpha/src/programs/0000775000175000017500000000000012560377662015116 500000000000000pocketsphinx-5prealpha/src/programs/Makefile.am0000664000175000017500000000114512504317100017046 00000000000000bin_PROGRAMS = \ pocketsphinx_batch \ pocketsphinx_continuous \ pocketsphinx_mdef_convert pocketsphinx_mdef_convert_SOURCES = mdef_convert.c pocketsphinx_mdef_convert_LDADD = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la pocketsphinx_batch_SOURCES = batch.c pocketsphinx_batch_LDADD = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la pocketsphinx_continuous_SOURCES = continuous.c pocketsphinx_continuous_LDADD = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la -lsphinxad AM_CFLAGS =-I$(top_srcdir)/include \ -I$(top_srcdir)/src/libpocketsphinx \ -I$(top_builddir)/include pocketsphinx-5prealpha/src/programs/Makefile.in0000664000175000017500000005306012525147724017102 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@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 = pocketsphinx_batch$(EXEEXT) \ pocketsphinx_continuous$(EXEEXT) \ pocketsphinx_mdef_convert$(EXEEXT) subdir = src/programs DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \ $(top_srcdir)/m4/ax_python_devel.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.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_pocketsphinx_batch_OBJECTS = batch.$(OBJEXT) pocketsphinx_batch_OBJECTS = $(am_pocketsphinx_batch_OBJECTS) pocketsphinx_batch_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am_pocketsphinx_continuous_OBJECTS = continuous.$(OBJEXT) pocketsphinx_continuous_OBJECTS = \ $(am_pocketsphinx_continuous_OBJECTS) pocketsphinx_continuous_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la am_pocketsphinx_mdef_convert_OBJECTS = mdef_convert.$(OBJEXT) pocketsphinx_mdef_convert_OBJECTS = \ $(am_pocketsphinx_mdef_convert_OBJECTS) pocketsphinx_mdef_convert_DEPENDENCIES = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(pocketsphinx_batch_SOURCES) \ $(pocketsphinx_continuous_SOURCES) \ $(pocketsphinx_mdef_convert_SOURCES) DIST_SOURCES = $(pocketsphinx_batch_SOURCES) \ $(pocketsphinx_continuous_SOURCES) \ $(pocketsphinx_mdef_convert_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ 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@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GST_CFLAGS = @GST_CFLAGS@ GST_LIBS = @GST_LIBS@ GST_MAJORMINOR = @GST_MAJORMINOR@ GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@ GStreamer_CFLAGS = @GStreamer_CFLAGS@ GStreamer_LIBS = @GStreamer_LIBS@ 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@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ 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_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SPHINXBASE_CFLAGS = @SPHINXBASE_CFLAGS@ SPHINXBASE_LIBS = @SPHINXBASE_LIBS@ SPHINXBASE_SWIG = @SPHINXBASE_SWIG@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ plugindir = @plugindir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ 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@ pocketsphinx_mdef_convert_SOURCES = mdef_convert.c pocketsphinx_mdef_convert_LDADD = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la pocketsphinx_batch_SOURCES = batch.c pocketsphinx_batch_LDADD = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la pocketsphinx_continuous_SOURCES = continuous.c pocketsphinx_continuous_LDADD = \ $(top_builddir)/src/libpocketsphinx/libpocketsphinx.la -lsphinxad AM_CFLAGS = -I$(top_srcdir)/include \ -I$(top_srcdir)/src/libpocketsphinx \ -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) --foreign src/programs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign src/programs/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 $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list pocketsphinx_batch$(EXEEXT): $(pocketsphinx_batch_OBJECTS) $(pocketsphinx_batch_DEPENDENCIES) $(EXTRA_pocketsphinx_batch_DEPENDENCIES) @rm -f pocketsphinx_batch$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pocketsphinx_batch_OBJECTS) $(pocketsphinx_batch_LDADD) $(LIBS) pocketsphinx_continuous$(EXEEXT): $(pocketsphinx_continuous_OBJECTS) $(pocketsphinx_continuous_DEPENDENCIES) $(EXTRA_pocketsphinx_continuous_DEPENDENCIES) @rm -f pocketsphinx_continuous$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pocketsphinx_continuous_OBJECTS) $(pocketsphinx_continuous_LDADD) $(LIBS) pocketsphinx_mdef_convert$(EXEEXT): $(pocketsphinx_mdef_convert_OBJECTS) $(pocketsphinx_mdef_convert_DEPENDENCIES) $(EXTRA_pocketsphinx_mdef_convert_DEPENDENCIES) @rm -f pocketsphinx_mdef_convert$(EXEEXT) $(AM_V_CCLD)$(LINK) $(pocketsphinx_mdef_convert_OBJECTS) $(pocketsphinx_mdef_convert_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/batch.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/continuous.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mdef_convert.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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 html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am 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 TAGS all all-am check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am 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 tags-am 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: pocketsphinx-5prealpha/src/programs/continuous.c0000664000175000017500000002356312560370306017405 00000000000000/* -*- c-basic-offset: 4; indent-tabs-mode: nil -*- */ /* ==================================================================== * Copyright (c) 1999-2010 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. * * ==================================================================== * */ /* * continuous.c - Simple pocketsphinx command-line application to test * both continuous listening/silence filtering from microphone * and continuous file transcription. */ /* * This is a simple example of pocketsphinx application that uses continuous listening * with silence filtering to automatically segment a continuous stream of audio input * into utterances that are then decoded. * * Remarks: * - Each utterance is ended when a silence segment of at least 1 sec is recognized. * - Single-threaded implementation for portability. * - Uses audio library; can be replaced with an equivalent custom library. */ #include #include #include #if defined(_WIN32) && !defined(__CYGWIN__) #include #else #include #endif #include #include #include "pocketsphinx.h" static const arg_t cont_args_def[] = { POCKETSPHINX_OPTIONS, /* Argument file. */ {"-argfile", ARG_STRING, NULL, "Argument file giving extra arguments."}, {"-adcdev", ARG_STRING, NULL, "Name of audio device to use for input."}, {"-infile", ARG_STRING, NULL, "Audio file to transcribe."}, {"-inmic", ARG_BOOLEAN, "no", "Transcribe audio from microphone."}, {"-time", ARG_BOOLEAN, "no", "Print word times in file transcription."}, CMDLN_EMPTY_OPTION }; static ps_decoder_t *ps; static cmd_ln_t *config; static FILE *rawfd; static void print_word_times() { int frame_rate = cmd_ln_int32_r(config, "-frate"); ps_seg_t *iter = ps_seg_iter(ps, NULL); while (iter != NULL) { int32 sf, ef, pprob; float conf; ps_seg_frames(iter, &sf, &ef); pprob = ps_seg_prob(iter, NULL, NULL, NULL); conf = logmath_exp(ps_get_logmath(ps), pprob); printf("%s %.3f %.3f %f\n", ps_seg_word(iter), ((float)sf / frame_rate), ((float) ef / frame_rate), conf); iter = ps_seg_next(iter); } } static int check_wav_header(char *header, int expected_sr) { int sr; if (header[34] != 0x10) { E_ERROR("Input audio file has [%d] bits per sample instead of 16\n", header[34]); return 0; } if (header[20] != 0x1) { E_ERROR("Input audio file has compression [%d] and not required PCM\n", header[20]); return 0; } if (header[22] != 0x1) { E_ERROR("Input audio file has [%d] channels, expected single channel mono\n", header[22]); return 0; } sr = ((header[24] & 0xFF) | ((header[25] & 0xFF) << 8) | ((header[26] & 0xFF) << 16) | ((header[27] & 0xFF) << 24)); if (sr != expected_sr) { E_ERROR("Input audio file has sample rate [%d], but decoder expects [%d]\n", sr, expected_sr); return 0; } return 1; } /* * Continuous recognition from a file */ static void recognize_from_file() { int16 adbuf[2048]; const char *fname; const char *hyp; int32 k; uint8 utt_started, in_speech; int32 print_times = cmd_ln_boolean_r(config, "-time"); fname = cmd_ln_str_r(config, "-infile"); if ((rawfd = fopen(fname, "rb")) == NULL) { E_FATAL_SYSTEM("Failed to open file '%s' for reading", fname); } if (strlen(fname) > 4 && strcmp(fname + strlen(fname) - 4, ".wav") == 0) { char waveheader[44]; fread(waveheader, 1, 44, rawfd); if (!check_wav_header(waveheader, (int)cmd_ln_float32_r(config, "-samprate"))) E_FATAL("Failed to process file '%s' due to format mismatch.\n", fname); } if (strlen(fname) > 4 && strcmp(fname + strlen(fname) - 4, ".mp3") == 0) { E_FATAL("Can not decode mp3 files, convert input file to WAV 16kHz 16-bit mono before decoding.\n"); } ps_start_utt(ps); utt_started = FALSE; while ((k = fread(adbuf, sizeof(int16), 2048, rawfd)) > 0) { ps_process_raw(ps, adbuf, k, FALSE, FALSE); in_speech = ps_get_in_speech(ps); if (in_speech && !utt_started) { utt_started = TRUE; } if (!in_speech && utt_started) { ps_end_utt(ps); hyp = ps_get_hyp(ps, NULL); if (hyp != NULL) printf("%s\n", hyp); if (print_times) print_word_times(); ps_start_utt(ps); utt_started = FALSE; } } ps_end_utt(ps); if (utt_started) { hyp = ps_get_hyp(ps, NULL); if (hyp != NULL) { printf("%s\n", hyp); if (print_times) { printf("!!! here\n"); print_word_times(); } } } fclose(rawfd); } /* Sleep for specified msec */ static void sleep_msec(int32 ms) { #if (defined(_WIN32) && !defined(GNUWINCE)) || defined(_WIN32_WCE) Sleep(ms); #else /* ------------------- Unix ------------------ */ struct timeval tmo; tmo.tv_sec = 0; tmo.tv_usec = ms * 1000; select(0, NULL, NULL, NULL, &tmo); #endif } /* * Main utterance processing loop: * for (;;) { * start utterance and wait for speech to process * decoding till end-of-utterance silence will be detected * print utterance result; * } */ static void recognize_from_microphone() { ad_rec_t *ad; int16 adbuf[2048]; uint8 utt_started, in_speech; int32 k; char const *hyp; if ((ad = ad_open_dev(cmd_ln_str_r(config, "-adcdev"), (int) cmd_ln_float32_r(config, "-samprate"))) == NULL) E_FATAL("Failed to open audio device\n"); if (ad_start_rec(ad) < 0) E_FATAL("Failed to start recording\n"); if (ps_start_utt(ps) < 0) E_FATAL("Failed to start utterance\n"); utt_started = FALSE; printf("READY....\n"); for (;;) { if ((k = ad_read(ad, adbuf, 2048)) < 0) E_FATAL("Failed to read audio\n"); ps_process_raw(ps, adbuf, k, FALSE, FALSE); in_speech = ps_get_in_speech(ps); if (in_speech && !utt_started) { utt_started = TRUE; printf("Listening...\n"); } if (!in_speech && utt_started) { /* speech -> silence transition, time to start new utterance */ ps_end_utt(ps); hyp = ps_get_hyp(ps, NULL ); if (hyp != NULL) printf("%s\n", hyp); if (ps_start_utt(ps) < 0) E_FATAL("Failed to start utterance\n"); utt_started = FALSE; printf("READY....\n"); } sleep_msec(100); } ad_close(ad); } int main(int argc, char *argv[]) { char const *cfg; config = cmd_ln_parse_r(NULL, cont_args_def, argc, argv, TRUE); /* Handle argument file as -argfile. */ if (config && (cfg = cmd_ln_str_r(config, "-argfile")) != NULL) { config = cmd_ln_parse_file_r(config, cont_args_def, cfg, FALSE); } if (config == NULL || (cmd_ln_str_r(config, "-infile") == NULL && cmd_ln_boolean_r(config, "-inmic") == FALSE)) { E_INFO("Specify '-infile ' to recognize from file or '-inmic yes' to recognize from microphone.\n"); cmd_ln_free_r(config); return 1; } ps_default_search_args(config); ps = ps_init(config); if (ps == NULL) { cmd_ln_free_r(config); return 1; } E_INFO("%s COMPILED ON: %s, AT: %s\n\n", argv[0], __DATE__, __TIME__); if (cmd_ln_str_r(config, "-infile") != NULL) { recognize_from_file(); } else if (cmd_ln_boolean_r(config, "-inmic")) { recognize_from_microphone(); } ps_free(ps); cmd_ln_free_r(config); return 0; } #if defined(_WIN32_WCE) #pragma comment(linker,"/entry:mainWCRTStartup") #include //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 pocketsphinx-5prealpha/src/programs/batch.c0000664000175000017500000006054512520771216016262 00000000000000/* -*- 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. * * ==================================================================== * */ /* System headers. */ #include /* SphinxBase headers. */ #include #include #include #include #include /* PocketSphinx headers. */ #include /* S3kr3t headerz. */ #include "pocketsphinx_internal.h" /* Silvio Moioli: setbuf doesn't exist in Windows CE */ #if defined(_WIN32_WCE) void setbuf(FILE* file, char* buf){ } #endif static const arg_t ps_args_def[] = { POCKETSPHINX_OPTIONS, /* Various options specific to batch-mode processing. */ /* Argument file. */ { "-argfile", ARG_STRING, NULL, "Argument file giving extra arguments." }, /* Control file. */ { "-ctl", ARG_STRING, NULL, "Control file listing utterances to be processed" }, { "-ctloffset", ARG_INT32, "0", "No. of utterances at the beginning of -ctl file to be skipped" }, { "-ctlcount", ARG_INT32, "-1", "No. of utterances to be processed (after skipping -ctloffset entries)" }, { "-ctlincr", ARG_INT32, "1", "Do every Nth line in the control file" }, { "-mllrctl", ARG_STRING, NULL, "Control file listing MLLR transforms to use for each utterance" }, { "-mllrdir", ARG_STRING, NULL, "Base directory for MLLR transforms" }, { "-mllrext", ARG_STRING, NULL, "File extension for MLLR transforms (including leading dot)" }, { "-lmnamectl", ARG_STRING, NULL, "Control file listing LM name to use for each utterance" }, { "-fsgctl", ARG_STRING, NULL, "Control file listing FSG file to use for each utterance" }, { "-fsgdir", ARG_STRING, NULL, "Base directory for FSG files" }, { "-fsgext", ARG_STRING, NULL, "File extension for FSG files (including leading dot)" }, /* Input file types and locations. */ { "-adcin", ARG_BOOLEAN, "no", "Input is raw audio data" }, { "-adchdr", ARG_INT32, "0", "Size of audio file header in bytes (headers are ignored)" }, { "-senin", ARG_BOOLEAN, "no", "Input is senone score dump files" }, { "-cepdir", ARG_STRING, NULL, "Input files directory (prefixed to filespecs in control file)" }, { "-cepext", ARG_STRING, ".mfc", "Input files extension (suffixed to filespecs in control file)" }, /* Output files. */ { "-hyp", ARG_STRING, NULL, "Recognition output file name" }, { "-hypseg", ARG_STRING, NULL, "Recognition output with segmentation file name" }, { "-ctm", ARG_STRING, NULL, "Recognition output in CTM file format (may require post-sorting)" }, { "-outlatdir", ARG_STRING, NULL, "Directory for dumping word lattices" }, { "-outlatfmt", ARG_STRING, "s3", "Format for dumping word lattices (s3 or htk)" }, { "-outlatext", ARG_STRING, ".lat", "Filename extension for dumping word lattices" }, { "-outlatbeam", ARG_FLOAT64, "1e-5", "Minimum posterior probability for output lattice nodes" }, { "-build_outdirs", ARG_BOOLEAN, "yes", "Create missing subdirectories in output directory" }, { "-nbestdir", ARG_STRING, NULL, "Directory for writing N-best hypothesis lists" }, { "-nbestext", ARG_STRING, ".hyp", "Extension for N-best hypothesis list files" }, { "-nbest", ARG_INT32, "0", "Number of N-best hypotheses to write to -nbestdir (0 for no N-best)" }, CMDLN_EMPTY_OPTION }; static mfcc_t ** read_mfc_file(FILE *infh, int sf, int ef, int *out_nfr, int ceplen) { long flen; int32 nmfc, nfr; float32 *floats; mfcc_t **mfcs; int swap, i; fseek(infh, 0, SEEK_END); flen = ftell(infh); fseek(infh, 0, SEEK_SET); if (fread(&nmfc, 4, 1, infh) != 1) { E_ERROR_SYSTEM("Failed to read 4 bytes from MFCC file"); return NULL; } swap = 0; if (nmfc != flen / 4 - 1) { SWAP_INT32(&nmfc); swap = 1; if (nmfc != flen / 4 - 1) { E_ERROR("File length mismatch: 0x%x != 0x%x, maybe it's not MFCC file\n", nmfc, flen / 4 - 1); return NULL; } } if (nmfc == 0) { E_ERROR("Empty mfcc file\n"); return NULL; } fseek(infh, sf * 4 * ceplen, SEEK_CUR); if (ef == -1) ef = nmfc / ceplen; nfr = ef - sf; mfcs = ckd_calloc_2d(nfr, ceplen, sizeof(**mfcs)); floats = (float32 *)mfcs[0]; if (fread(floats, 4, nfr * ceplen, infh) != nfr * ceplen) { E_ERROR_SYSTEM("Failed to read %d items from mfcfile"); ckd_free_2d(mfcs); return NULL; } if (swap) { for (i = 0; i < nfr * ceplen; ++i) SWAP_FLOAT32(&floats[i]); } #ifdef FIXED_POINT for (i = 0; i < nfr * ceplen; ++i) mfcs[0][i] = FLOAT2MFCC(floats[i]); #endif *out_nfr = nfr; return mfcs; } static int process_mllrctl_line(ps_decoder_t *ps, cmd_ln_t *config, char const *file) { char const *mllrdir, *mllrext; char *infile = NULL; ps_mllr_t *mllr; static char *lastfile; if (file == NULL) return 0; if (lastfile && 0 == strcmp(file, lastfile)) return 0; ckd_free(lastfile); lastfile = ckd_salloc(file); mllrext = cmd_ln_str_r(config, "-mllrext"); if ((mllrdir = cmd_ln_str_r(config, "-mllrdir"))) infile = string_join(mllrdir, "/", file, mllrext ? mllrext : "", NULL); else if (mllrext) infile = string_join(file, mllrext, NULL); else infile = ckd_salloc(file); if ((mllr = ps_mllr_read(infile)) == NULL) { ckd_free(infile); return -1; } if (ps_update_mllr(ps, mllr) == NULL) { ps_mllr_free(mllr); ckd_free(infile); return -1; } E_INFO("Using MLLR: %s\n", file); ckd_free(infile); return 0; } static int process_fsgctl_line(ps_decoder_t *ps, cmd_ln_t *config, char const *fname) { fsg_model_t *fsg; int err; char *path = NULL; const char *fsgdir = cmd_ln_str_r(config, "-fsgdir"); const char *fsgext = cmd_ln_str_r(config, "-fsgext"); if (fname == NULL) return 0; if (fsgdir) path = string_join(fsgdir, "/", fname, fsgext ? fsgext : "", NULL); else if (fsgext) path = string_join(fname, fsgext, NULL); else path = ckd_salloc(fname); fsg = fsg_model_readfile(path, ps_get_logmath(ps), cmd_ln_float32_r(config, "-lw")); err = 0; if (!fsg) { err = -1; goto error_out; } if (ps_set_fsg(ps, fname, fsg)) { err = -1; goto error_out; } E_INFO("Using FSG: %s\n", fname); if (ps_set_search(ps, fname)) err = -1; error_out: fsg_model_free(fsg); ckd_free(path); return err; } static int process_lmnamectl_line(ps_decoder_t *ps, cmd_ln_t *config, char const *lmname) { if (!lmname) return 0; E_INFO("Using language model: %s\n", lmname); if (ps_set_search(ps, lmname)) { E_ERROR("No such language model: %s\n", lmname); return -1; } return 0; } static int build_outdir_one(cmd_ln_t *config, char const *arg, char const *uttpath) { char const *dir; if ((dir = cmd_ln_str_r(config, arg)) != NULL) { char *dirname = string_join(dir, "/", uttpath, NULL); build_directory(dirname); ckd_free(dirname); } return 0; } static int build_outdirs(cmd_ln_t *config, char const *uttid) { char *uttpath = ckd_salloc(uttid); path2dirname(uttid, uttpath); build_outdir_one(config, "-outlatdir", uttpath); build_outdir_one(config, "-mfclogdir", uttpath); build_outdir_one(config, "-rawlogdir", uttpath); build_outdir_one(config, "-senlogdir", uttpath); build_outdir_one(config, "-nbestdir", uttpath); ckd_free(uttpath); return 0; } static int process_ctl_line(ps_decoder_t *ps, cmd_ln_t *config, char const *file, char const *uttid, int32 sf, int32 ef) { FILE *infh; char const *cepdir, *cepext; char *infile; if (ef != -1 && ef < sf) { E_ERROR("End frame %d is < start frame %d\n", ef, sf); return -1; } cepdir = cmd_ln_str_r(config, "-cepdir"); cepext = cmd_ln_str_r(config, "-cepext"); /* Build input filename. */ infile = string_join(cepdir ? cepdir : "", "/", file, cepext ? cepext : "", NULL); if (uttid == NULL) uttid = file; if ((infh = fopen(infile, "rb")) == NULL) { E_ERROR_SYSTEM("Failed to open %s", infile); ckd_free(infile); return -1; } /* Build output directories. */ if (cmd_ln_boolean_r(config, "-build_outdirs")) build_outdirs(config, uttid); if (cmd_ln_boolean_r(config, "-senin")) { /* start and end frames not supported. */ ps_decode_senscr(ps, infh); } else if (cmd_ln_boolean_r(config, "-adcin")) { if (ef != -1) { ef = (int32)((ef - sf) * (cmd_ln_float32_r(config, "-samprate") / cmd_ln_int32_r(config, "-frate")) + (cmd_ln_float32_r(config, "-samprate") * cmd_ln_float32_r(config, "-wlen"))); } sf = (int32)(sf * (cmd_ln_float32_r(config, "-samprate") / cmd_ln_int32_r(config, "-frate"))); fseek(infh, cmd_ln_int32_r(config, "-adchdr") + sf * sizeof(int16), SEEK_SET); ps_decode_raw(ps, infh, ef); } else { mfcc_t **mfcs; int nfr; if (NULL == (mfcs = read_mfc_file(infh, sf, ef, &nfr, cmd_ln_int32_r(config, "-ceplen")))) { E_ERROR("Failed to read MFCC from the file '%s'\n", infile); fclose(infh); ckd_free(infile); return -1; } ps_start_stream(ps); ps_start_utt(ps); ps_process_cep(ps, mfcs, nfr, FALSE, TRUE); ps_end_utt(ps); ckd_free_2d(mfcs); } fclose(infh); ckd_free(infile); return 0; } static int write_lattice(ps_decoder_t *ps, char const *latdir, char const *uttid) { ps_lattice_t *lat; logmath_t *lmath; cmd_ln_t *config; char *outfile; int32 beam; if ((lat = ps_get_lattice(ps)) == NULL) { E_ERROR("Failed to obtain word lattice for utterance %s\n", uttid); return -1; } config = ps_get_config(ps); outfile = string_join(latdir, "/", uttid, cmd_ln_str_r(config, "-outlatext"), NULL); /* Prune lattice. */ lmath = ps_get_logmath(ps); beam = logmath_log(lmath, cmd_ln_float64_r(config, "-outlatbeam")); ps_lattice_posterior_prune(lat, beam); if (0 == strcmp("htk", cmd_ln_str_r(config, "-outlatfmt"))) { if (ps_lattice_write_htk(lat, outfile) < 0) { E_ERROR("Failed to write lattice to %s\n", outfile); return -1; } } else { if (ps_lattice_write(lat, outfile) < 0) { E_ERROR("Failed to write lattice to %s\n", outfile); return -1; } } return 0; } static int write_nbest(ps_decoder_t *ps, char const *nbestdir, char const *uttid) { cmd_ln_t *config; char *outfile; FILE *fh; ps_nbest_t *nbest; int32 i, n, score; const char* hyp; config = ps_get_config(ps); outfile = string_join(nbestdir, "/", uttid, cmd_ln_str_r(config, "-nbestext"), NULL); n = cmd_ln_int32_r(config, "-nbest"); fh = fopen(outfile, "w"); if (fh == NULL) { E_ERROR_SYSTEM("Failed to write a lattice to file %s\n", outfile); return -1; } nbest = ps_nbest(ps, 0, -1, NULL, NULL); for (i = 0; i < n && nbest && (nbest = ps_nbest_next(nbest)); i++) { hyp = ps_nbest_hyp(nbest, &score); fprintf(fh, "%s %d\n", hyp, score); } if (nbest) ps_nbest_free(nbest); fclose(fh); return 0; } static int write_hypseg(FILE *fh, ps_decoder_t *ps, char const *uttid) { int32 score, lscr, sf, ef; ps_seg_t *itor = ps_seg_iter(ps, &score); /* Accumulate language model scores. */ lscr = 0; while (itor) { int32 ascr, wlscr; ps_seg_prob(itor, &ascr, &wlscr, NULL); lscr += wlscr; itor = ps_seg_next(itor); } fprintf(fh, "%s S %d T %d A %d L %d", uttid, 0, /* "scaling factor" which is mostly useless anyway */ score, score - lscr, lscr); /* Now print out words. */ itor = ps_seg_iter(ps, &score); while (itor) { char const *w = ps_seg_word(itor); int32 ascr, wlscr; ps_seg_prob(itor, &ascr, &wlscr, NULL); ps_seg_frames(itor, &sf, &ef); fprintf(fh, " %d %d %d %s", sf, ascr, wlscr, w); itor = ps_seg_next(itor); } fprintf(fh, " %d\n", ef); return 0; } static int write_ctm(FILE *fh, ps_decoder_t *ps, ps_seg_t *itor, char const *uttid, int32 frate) { logmath_t *lmath = ps_get_logmath(ps); char *dupid, *show, *channel, *c; double ustart = 0.0; /* We have semi-standardized on comma-separated uttids which * correspond to the fields of the STM file. So if there's a * comma in the uttid, take the first two fields as show and * channel, and also try to find the start time. */ show = dupid = ckd_salloc(uttid ? uttid : "(null)"); if ((c = strchr(dupid, ',')) != NULL) { *c++ = '\0'; channel = c; if ((c = strchr(c, ',')) != NULL) { *c++ = '\0'; if ((c = strchr(c, ',')) != NULL) { ustart = atof_c(c + 1); } } } else { channel = NULL; } while (itor) { int32 prob, sf, ef, wid; char const *w; /* Skip things that aren't "real words" (FIXME: currently * requires s3kr3t h34d3rz...) */ w = ps_seg_word(itor); wid = dict_wordid(ps->dict, w); if (wid >= 0 && dict_real_word(ps->dict, wid)) { prob = ps_seg_prob(itor, NULL, NULL, NULL); ps_seg_frames(itor, &sf, &ef); fprintf(fh, "%s %s %.2f %.2f %s %.3f\n", show, channel ? channel : "1", ustart + (double)sf / frate, (double)(ef - sf) / frate, /* FIXME: More s3kr3tz */ dict_basestr(ps->dict, wid), logmath_exp(lmath, prob)); } itor = ps_seg_next(itor); } ckd_free(dupid); return 0; } static void process_ctl(ps_decoder_t *ps, cmd_ln_t *config, FILE *ctlfh) { int32 ctloffset, ctlcount, ctlincr; int32 i; char *line; size_t len; FILE *hypfh = NULL, *hypsegfh = NULL, *ctmfh = NULL; FILE *mllrfh = NULL, *lmfh = NULL, *fsgfh = NULL; double n_speech, n_cpu, n_wall; char const *outlatdir; char const *nbestdir; char const *str; int frate; ctloffset = cmd_ln_int32_r(config, "-ctloffset"); ctlcount = cmd_ln_int32_r(config, "-ctlcount"); ctlincr = cmd_ln_int32_r(config, "-ctlincr"); outlatdir = cmd_ln_str_r(config, "-outlatdir"); nbestdir = cmd_ln_str_r(config, "-nbestdir"); frate = cmd_ln_int32_r(config, "-frate"); if ((str = cmd_ln_str_r(config, "-mllrctl"))) { mllrfh = fopen(str, "r"); if (mllrfh == NULL) { E_ERROR_SYSTEM("Failed to open MLLR control file file %s", str); goto done; } } if ((str = cmd_ln_str_r(config, "-fsgctl"))) { fsgfh = fopen(str, "r"); if (fsgfh == NULL) { E_ERROR_SYSTEM("Failed to open FSG control file file %s", str); goto done; } } if ((str = cmd_ln_str_r(config, "-lmnamectl"))) { lmfh = fopen(str, "r"); if (lmfh == NULL) { E_ERROR_SYSTEM("Failed to open LM name control file file %s", str); goto done; } } if ((str = cmd_ln_str_r(config, "-hyp"))) { hypfh = fopen(str, "w"); if (hypfh == NULL) { E_ERROR_SYSTEM("Failed to open hypothesis file %s for writing", str); goto done; } setbuf(hypfh, NULL); } if ((str = cmd_ln_str_r(config, "-hypseg"))) { hypsegfh = fopen(str, "w"); if (hypsegfh == NULL) { E_ERROR_SYSTEM("Failed to open hypothesis file %s for writing", str); goto done; } setbuf(hypsegfh, NULL); } if ((str = cmd_ln_str_r(config, "-ctm"))) { ctmfh = fopen(str, "w"); if (ctmfh == NULL) { E_ERROR_SYSTEM("Failed to open hypothesis file %s for writing", str); goto done; } setbuf(ctmfh, NULL); } i = 0; while ((line = fread_line(ctlfh, &len))) { char *wptr[4]; int32 nf, sf, ef; char *mllrline = NULL, *lmline = NULL, *fsgline = NULL; char *fsgfile = NULL, *lmname = NULL, *mllrfile = NULL; if (mllrfh) { mllrline = fread_line(mllrfh, &len); if (mllrline == NULL) { E_ERROR("File size mismatch between control and MLLR control\n"); ckd_free(line); ckd_free(mllrline); goto done; } mllrfile = string_trim(mllrline, STRING_BOTH); } if (lmfh) { lmline = fread_line(lmfh, &len); if (lmline == NULL) { E_ERROR("File size mismatch between control and LM control\n"); ckd_free(line); ckd_free(lmline); goto done; } lmname = string_trim(lmline, STRING_BOTH); } if (fsgfh) { fsgline = fread_line(fsgfh, &len); if (fsgline == NULL) { E_ERROR("File size mismatch between control and FSG control\n"); ckd_free(line); ckd_free(fsgline); goto done; } fsgfile = string_trim(fsgline, STRING_BOTH); } if (i < ctloffset) { i += ctlincr; goto nextline; } if (ctlcount != -1 && i >= ctloffset + ctlcount) { goto nextline; } sf = 0; ef = -1; nf = str2words(line, wptr, 4); if (nf == 0) { /* Do nothing. */ } else if (nf < 0) { E_ERROR("Unexpected extra data in control file at line %d\n", i); } else { char const *hyp, *file, *uttid; int32 score; file = wptr[0]; if (nf > 1) sf = atoi(wptr[1]); if (nf > 2) ef = atoi(wptr[2]); if (nf > 3) uttid = wptr[3]; else uttid = file; E_INFO("Decoding '%s'\n", uttid); /* Do actual decoding. */ if(process_mllrctl_line(ps, config, mllrfile) < 0) continue; if(process_lmnamectl_line(ps, config, lmname) < 0) continue; if(process_fsgctl_line(ps, config, fsgfile) < 0) continue; if(process_ctl_line(ps, config, file, uttid, sf, ef) < 0) continue; hyp = ps_get_hyp(ps, &score); /* Write out results and such. */ if (hypfh) { fprintf(hypfh, "%s (%s %d)\n", hyp ? hyp : "", uttid, score); } if (hypsegfh) { write_hypseg(hypsegfh, ps, uttid); } if (ctmfh) { ps_seg_t *itor = ps_seg_iter(ps, &score); write_ctm(ctmfh, ps, itor, uttid, frate); } if (outlatdir) { write_lattice(ps, outlatdir, uttid); } if (nbestdir) { write_nbest(ps, nbestdir, uttid); } ps_get_utt_time(ps, &n_speech, &n_cpu, &n_wall); E_INFO("%s: %.2f seconds speech, %.2f seconds CPU, %.2f seconds wall\n", uttid, n_speech, n_cpu, n_wall); E_INFO("%s: %.2f xRT (CPU), %.2f xRT (elapsed)\n", uttid, n_cpu / n_speech, n_wall / n_speech); /* help make the logfile somewhat less opaque (air) */ E_INFO_NOFN("%s (%s %d)\n", hyp ? hyp : "", uttid, score); E_INFO_NOFN("%s done --------------------------------------\n", uttid); } i += ctlincr; nextline: ckd_free(mllrline); ckd_free(fsgline); ckd_free(lmline); ckd_free(line); } ps_get_all_time(ps, &n_speech, &n_cpu, &n_wall); E_INFO("TOTAL %.2f seconds speech, %.2f seconds CPU, %.2f seconds wall\n", n_speech, n_cpu, n_wall); E_INFO("AVERAGE %.2f xRT (CPU), %.2f xRT (elapsed)\n", n_cpu / n_speech, n_wall / n_speech); done: if (hypfh) fclose(hypfh); if (hypsegfh) fclose(hypsegfh); if (ctmfh) fclose(ctmfh); } int main(int32 argc, char *argv[]) { ps_decoder_t *ps; cmd_ln_t *config; char const *ctl; FILE *ctlfh; config = cmd_ln_parse_r(NULL, ps_args_def, argc, argv, TRUE); /* Handle argument file as -argfile. */ if (config && (ctl = cmd_ln_str_r(config, "-argfile")) != NULL) { config = cmd_ln_parse_file_r(config, ps_args_def, ctl, FALSE); } if (config == NULL) { /* This probably just means that we got no arguments. */ return 1; } if ((ctl = cmd_ln_str_r(config, "-ctl")) == NULL) { E_FATAL("-ctl argument not present, nothing to do in batch mode!\n"); } if ((ctlfh = fopen(ctl, "r")) == NULL) { E_FATAL_SYSTEM("Failed to open control file '%s'", ctl); } ps_default_search_args(config); if (!(ps = ps_init(config))) { cmd_ln_free_r(config); fclose(ctlfh); E_FATAL("PocketSphinx decoder init failed\n"); } process_ctl(ps, config, ctlfh); fclose(ctlfh); ps_free(ps); cmd_ln_free_r(config); return 0; } #if defined(_WIN32_WCE) #pragma comment(linker,"/entry:mainWCRTStartup") #include /* 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 pocketsphinx-5prealpha/src/programs/mdef_convert.c0000664000175000017500000000676112504317100017642 00000000000000/* -*- 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. * * ==================================================================== * */ /** * mdef_convert.c - convert text to binary model definition files (and vice versa) * * Author: David Huggins-Daines **/ #include #include #include #include "bin_mdef.h" int main(int argc, char *argv[]) { const char *infile, *outfile; bin_mdef_t *bin; int tobin = 1; if (argc < 3 || argc > 4) { fprintf(stderr, "Usage: %s [-text | -bin] INPUT OUTPUT\n", argv[0]); return 1; } if (argv[1][0] == '-') { if (strcmp(argv[1], "-text") == 0) { tobin = 0; ++argv; } else if (strcmp(argv[1], "-bin") == 0) { tobin = 1; ++argv; } else { fprintf(stderr, "Unknown argument %s\n", argv[1]); fprintf(stderr, "Usage: %s [-text | -bin] INPUT OUTPUT\n", argv[0]); return 1; } } infile = argv[1]; outfile = argv[2]; if (tobin) { if ((bin = bin_mdef_read_text(NULL, infile)) == NULL) { fprintf(stderr, "Failed to read text mdef from %s\n", infile); return 1; } if (bin_mdef_write(bin, outfile) < 0) { fprintf(stderr, "Failed to write binary mdef to %s\n", outfile); return 1; } } else { if ((bin = bin_mdef_read(NULL, infile)) == NULL) { fprintf(stderr, "Failed to read binary mdef from %s\n", infile); return 1; } if (bin_mdef_write_text(bin, outfile) < 0) { fprintf(stderr, "Failed to write text mdef to %s\n", outfile); return 1; } } return 0; } pocketsphinx-5prealpha/src/Makefile.am0000664000175000017500000000006412504317100015213 00000000000000SUBDIRS = libpocketsphinx \ programs \ gst-plugin pocketsphinx-5prealpha/src/Makefile.in0000664000175000017500000004515712525147724015260 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@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.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \ $(top_srcdir)/m4/ax_python_devel.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.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-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 \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ 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@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GST_CFLAGS = @GST_CFLAGS@ GST_LIBS = @GST_LIBS@ GST_MAJORMINOR = @GST_MAJORMINOR@ GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@ GStreamer_CFLAGS = @GStreamer_CFLAGS@ GStreamer_LIBS = @GStreamer_LIBS@ 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@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ 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_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SPHINXBASE_CFLAGS = @SPHINXBASE_CFLAGS@ SPHINXBASE_LIBS = @SPHINXBASE_LIBS@ SPHINXBASE_SWIG = @SPHINXBASE_SWIG@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ plugindir = @plugindir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ 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 = libpocketsphinx \ programs \ gst-plugin 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) --foreign src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign 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 $(am__aclocal_m4_deps): 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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ 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; \ ($(am__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" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ 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 || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files 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 "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$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 \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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 html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: 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: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool cscopelist-am ctags \ ctags-am 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-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: pocketsphinx-5prealpha/m4/0000775000175000017500000000000012560377662013015 500000000000000pocketsphinx-5prealpha/m4/ltversion.m40000644000175000017500000000126212525147721015213 00000000000000# 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. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) pocketsphinx-5prealpha/m4/lt~obsolete.m40000644000175000017500000001375612525147721015553 00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 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 5 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_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])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) pocketsphinx-5prealpha/m4/ltoptions.m40000644000175000017500000003007312525147721015223 00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 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 7 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], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [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@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [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])]) pocketsphinx-5prealpha/m4/pkg.m40000664000175000017500000001214512504317077013753 00000000000000# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # # Copyright © 2004 Scott James Remnant . # # 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 .])], [$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 pocketsphinx-5prealpha/m4/ax_pkg_swig.m40000664000175000017500000001515312504317077015476 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_pkg_swig.html # =========================================================================== # # SYNOPSIS # # AX_PKG_SWIG([major.minor.micro], [action-if-found], [action-if-not-found]) # # DESCRIPTION # # This macro searches for a SWIG installation on your system. If found, # then SWIG is AC_SUBST'd; if not found, then $SWIG is empty. If SWIG is # found, then SWIG_LIB is set to the SWIG library path, and AC_SUBST'd. # # You can use the optional first argument to check if the version of the # available SWIG is greater than or equal to the value of the argument. It # should have the format: N[.N[.N]] (N is a number between 0 and 999. Only # the first N is mandatory.) If the version argument is given (e.g. # 1.3.17), AX_PKG_SWIG checks that the swig package is this version number # or higher. # # As usual, action-if-found is executed if SWIG is found, otherwise # action-if-not-found is executed. # # In configure.in, use as: # # AX_PKG_SWIG(1.3.17, [], [ AC_MSG_ERROR([SWIG is required to build..]) ]) # AX_SWIG_ENABLE_CXX # AX_SWIG_MULTI_MODULE_SUPPORT # AX_SWIG_PYTHON # # LICENSE # # Copyright (c) 2008 Sebastian Huber # Copyright (c) 2008 Alan W. Irwin # Copyright (c) 2008 Rafael Laboissiere # Copyright (c) 2008 Andrew Collier # Copyright (c) 2011 Murray Cumming # # 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, see . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 11 AC_DEFUN([AX_PKG_SWIG],[ # Ubuntu has swig 2.0 as /usr/bin/swig2.0 AC_PATH_PROGS([SWIG],[swig swig2.0]) if test -z "$SWIG" ; then m4_ifval([$3],[$3],[:]) elif test -n "$1" ; then AC_MSG_CHECKING([SWIG version]) [swig_version=`$SWIG -version 2>&1 | grep 'SWIG Version' | sed 's/.*\([0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\).*/\1/g'`] AC_MSG_RESULT([$swig_version]) if test -n "$swig_version" ; then # Calculate the required version number components [required=$1] [required_major=`echo $required | sed 's/[^0-9].*//'`] if test -z "$required_major" ; then [required_major=0] fi [required=`echo $required | sed 's/[0-9]*[^0-9]//'`] [required_minor=`echo $required | sed 's/[^0-9].*//'`] if test -z "$required_minor" ; then [required_minor=0] fi [required=`echo $required | sed 's/[0-9]*[^0-9]//'`] [required_patch=`echo $required | sed 's/[^0-9].*//'`] if test -z "$required_patch" ; then [required_patch=0] fi # Calculate the available version number components [available=$swig_version] [available_major=`echo $available | sed 's/[^0-9].*//'`] if test -z "$available_major" ; then [available_major=0] fi [available=`echo $available | sed 's/[0-9]*[^0-9]//'`] [available_minor=`echo $available | sed 's/[^0-9].*//'`] if test -z "$available_minor" ; then [available_minor=0] fi [available=`echo $available | sed 's/[0-9]*[^0-9]//'`] [available_patch=`echo $available | sed 's/[^0-9].*//'`] if test -z "$available_patch" ; then [available_patch=0] fi # Convert the version tuple into a single number for easier comparison. # Using base 100 should be safe since SWIG internally uses BCD values # to encode its version number. required_swig_vernum=`expr $required_major \* 10000 \ \+ $required_minor \* 100 \+ $required_patch` available_swig_vernum=`expr $available_major \* 10000 \ \+ $available_minor \* 100 \+ $available_patch` if test $available_swig_vernum -lt $required_swig_vernum; then AC_MSG_WARN([SWIG version >= $1 is required. You have $swig_version.]) SWIG='' m4_ifval([$3],[$3],[]) else AC_MSG_CHECKING([for SWIG library]) SWIG_LIB=`$SWIG -swiglib` AC_MSG_RESULT([$SWIG_LIB]) m4_ifval([$2],[$2],[]) fi else AC_MSG_WARN([cannot determine SWIG version]) SWIG='' m4_ifval([$3],[$3],[]) fi fi AC_SUBST([SWIG_LIB]) ]) pocketsphinx-5prealpha/m4/libtool.m40000644000175000017500000105743212525147721014645 00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 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, 2009, 2010, 2011 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 57 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_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl 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 _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) 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 "$cc_temp" | $SED "s%.*/%%; 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 AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl 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_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])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 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 # 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_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify 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' ]) # _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 "$][$1" | $SED "$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: # # ='`$ECHO "$" | $SED "$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' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$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 \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_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]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false 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 ." 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) 2011 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. 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) ])# 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 '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS 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)], [Go], [_LT_LANG(GO)], [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 m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _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([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) 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)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) 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], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _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 there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 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" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) 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" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # 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 if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _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=func_echo_all _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([TAGNAME]) # ---------------------------------- # 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. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`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 "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _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 '$LINENO' "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 ;; *-*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*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) 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_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR 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 \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _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_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _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:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $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 "$_lt_compiler_boilerplate" | $SED '/^$/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 "$_lt_linker_boilerplate" | $SED '/^$/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; ;; mint*) # On MiNT this can take a long time and run out of memory. 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 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; 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"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$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 $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #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 /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 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; else puts (dlerror ()); } /* 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:$LINENO: $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:$LINENO: \$? = $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 "$_lt_compiler_boilerplate" | $SED '/^$/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 m4_require([_LT_CHECK_SHELL_FEATURES])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 case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # 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 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # 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; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` 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 # correct to gnu/linux during the next big refactor 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 # correct to gnu/linux during the next big refactor 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.so # instead of lib.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=`func_echo_all "$lib" | $SED '\''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 # correct to gnu/linux during the next big refactor 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,$cc_basename in yes,*) # gcc 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}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; 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 dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. 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 # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # 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' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # 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 # correct to gnu/linux during the next big refactor 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 ;; 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[[23]].*) 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 # correct to gnu/linux during the next big refactor 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 ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" 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=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' 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' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor 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 # correct to gnu/linux during the next big refactor 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 glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu) version_type=linux # correct to gnu/linux during the next big refactor 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 AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no 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], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # 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;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 # correct to gnu/linux during the next big refactor 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 # correct to gnu/linux during the next big refactor 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 # correct to gnu/linux during the next big refactor 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 # correct to gnu/linux during the next big refactor 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 # correct to gnu/linux during the next big refactor 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 # correct to gnu/linux during the next big refactor 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([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _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 m4_require([_LT_PROG_ECHO_BACKSLASH])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 &1 /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 # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' 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 ;; haiku*) 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])(-bit)?( [LM]SB)? 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 glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-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_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi 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_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob 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. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi 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:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $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:$LINENO: 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_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-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 case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _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([AC_PROG_AWK])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};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /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 lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # 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 /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #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. */ LT@&t@_DLSYM_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_globsym_save_LIBS=$LIBS lt_globsym_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_globsym_save_LIBS CFLAGS=$lt_globsym_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 # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' 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_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _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)= 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)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $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 ;; 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). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; 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 | kopensolaris*-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* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _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* | sunCC*) # 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' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; 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 case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; 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 | kopensolaris*-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' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # 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* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _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\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # 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)='' ;; *Sun\ F* | *Sun*Fortran*) _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 ' ;; *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,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; 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* | sunf77* | sunf90* | sunf95*) _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_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # 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]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # 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_PATH_MANIFEST_TOOL])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' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] 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 # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". 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") || (\$ 2 == "W")) && ([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*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ 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_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 # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = 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 *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[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.19, 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 install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _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 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(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _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/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] 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 ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; 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 | kopensolaris*-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=' $pic_flag' 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; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # 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; func_echo_all \"$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]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; 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; func_echo_all \"$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* | bgf* | bgxlf* | mpixlf*) # 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)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_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 $linker_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 $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $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 $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $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 $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $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 # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". 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") || (\$ 2 == "W")) && ([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([$1]) _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 func_echo_all "${wl}${allow_undefined_flag}"; 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([$1]) _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' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _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. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # 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 $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _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' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _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 `func_echo_all "$deplibs" | $SED '\''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(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; 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 ;; # 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 $pic_flag -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 $pic_flag ${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 && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${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_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 && test "$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 $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${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' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_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 $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${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. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -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" && func_echo_all "-set_version $verstring"` -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" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${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" && func_echo_all "-set_version $verstring"` -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} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${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" && func_echo_all "-set_version $verstring"` -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 "-set_version $verstring"` -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 $pic_flag ${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 $pic_flag ${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_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$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_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_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* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_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_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([], [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([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _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_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], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl 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 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_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(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_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_CFLAGS=$CFLAGS 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++"} CFLAGS=$CXXFLAGS 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 $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -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 -v "^Configured with:" | $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([$1]) _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 func_echo_all "${wl}${allow_undefined_flag}"; 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([$1]) _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' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _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 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*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # 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 _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # 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 $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _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(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _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 ;; esac ;; 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 ;; freebsd2.*) # 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*) ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; 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; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${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; func_echo_all "$list"' ;; *) 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 $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${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" && func_echo_all "-set_version $verstring"` -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 $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -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 | kopensolaris*-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; func_echo_all "$list"' _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 | sort | $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 | sort | $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 | sort | $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 | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above 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; func_echo_all \"$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=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # 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; func_echo_all \"$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='func_echo_all' # 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=func_echo_all 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" && func_echo_all "${wl}-set_version $verstring"` -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" && func_echo_all "-set_version $verstring"` -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 "-set_version $verstring"` -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=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) 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" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${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 -v "^Configured with:" | $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* | sunCC*) # 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='func_echo_all' # 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 $pic_flag -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 $pic_flag -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 -v "^Configured with:" | $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 -v "^Configured with:" | $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(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _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 CFLAGS=$lt_save_CFLAGS 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_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf 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). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _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 AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])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 ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac 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 ${prev}${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 fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} 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 prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$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 CFLAGS=$_lt_libdeps_save_CFLAGS # 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* | sunCC*) # 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_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_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _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_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(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_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 lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS 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" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _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_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _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_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(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_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 lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS 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 CFLAGS=$lt_save_CFLAGS 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_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS 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 _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_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 CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # 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_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go 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 _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_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 CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_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_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= 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 CFLAGS=$lt_save_CFLAGS ])# _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_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # 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_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _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%"$_lt_dummy"}, \ = c,a/b,b/c, \ && 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_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # 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}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS pocketsphinx-5prealpha/m4/ltsugar.m40000644000175000017500000001042412525147721014647 00000000000000# 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 ]) pocketsphinx-5prealpha/m4/ax_python_devel.m40000664000175000017500000002562712520766177016402 00000000000000# =========================================================================== # http://www.gnu.org/software/autoconf-archive/ax_python_devel.html # =========================================================================== # # SYNOPSIS # # AX_PYTHON_DEVEL([version]) # # DESCRIPTION # # Note: Defines as a precious variable "PYTHON_VERSION". Don't override it # in your configure.ac. # # This macro checks for Python and tries to get the include path to # 'Python.h'. It provides the $(PYTHON_CPPFLAGS) and $(PYTHON_LDFLAGS) # output variables. It also exports $(PYTHON_EXTRA_LIBS) and # $(PYTHON_EXTRA_LDFLAGS) for embedding Python in your code. # # You can search for some particular version of Python by passing a # parameter to this macro, for example ">= '2.3.1'", or "== '2.4'". Please # note that you *have* to pass also an operator along with the version to # match, and pay special attention to the single quotes surrounding the # version number. Don't use "PYTHON_VERSION" for this: that environment # variable is declared as precious and thus reserved for the end-user. # # This macro should work for all versions of Python >= 2.1.0. As an end # user, you can disable the check for the python version by setting the # PYTHON_NOVERSIONCHECK environment variable to something else than the # empty string. # # If you need to use this macro for an older Python version, please # contact the authors. We're always open for feedback. # # LICENSE # # Copyright (c) 2009 Sebastian Huber # Copyright (c) 2009 Alan W. Irwin # Copyright (c) 2009 Rafael Laboissiere # Copyright (c) 2009 Andrew Collier # Copyright (c) 2009 Matteo Settenvini # Copyright (c) 2009 Horst Knorr # Copyright (c) 2013 Daniel Mullner # # 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 . # # As a special exception, the respective Autoconf Macro's copyright owner # gives unlimited permission to copy, distribute and modify the configure # scripts that are the output of Autoconf when processing the Macro. You # need not follow the terms of the GNU General Public License when using # or distributing such scripts, even though portions of the text of the # Macro appear in them. The GNU General Public License (GPL) does govern # all other use of the material that constitutes the Autoconf Macro. # # This special exception to the GPL applies to versions of the Autoconf # Macro released by the Autoconf Archive. When you make and distribute a # modified version of the Autoconf Macro, you may extend this special # exception to the GPL to apply to your modified version as well. #serial 17 AU_ALIAS([AC_PYTHON_DEVEL], [AX_PYTHON_DEVEL]) AC_DEFUN([AX_PYTHON_DEVEL],[ # # Allow the use of a (user set) custom python version # AC_ARG_VAR([PYTHON_VERSION],[The installed Python version to use, for example '2.3'. This string will be appended to the Python interpreter canonical name.]) AC_PATH_PROG([PYTHON],[python[$PYTHON_VERSION]]) if test -z "$PYTHON"; then AC_MSG_ERROR([Cannot find python$PYTHON_VERSION in your system path]) PYTHON_VERSION="" fi # # Check for a version of Python >= 2.1.0 # AC_MSG_CHECKING([for a version of Python >= '2.1.0']) ac_supports_python_ver=`$PYTHON -c "import sys; \ ver = sys.version.split ()[[0]]; \ print (ver >= '2.1.0')"` if test "$ac_supports_python_ver" != "True"; then if test -z "$PYTHON_NOVERSIONCHECK"; then AC_MSG_RESULT([no]) AC_MSG_FAILURE([ This version of the AC@&t@_PYTHON_DEVEL macro doesn't work properly with versions of Python before 2.1.0. You may need to re-run configure, setting the variables PYTHON_CPPFLAGS, PYTHON_LDFLAGS, PYTHON_SITE_PKG, PYTHON_EXTRA_LIBS and PYTHON_EXTRA_LDFLAGS by hand. Moreover, to disable this check, set PYTHON_NOVERSIONCHECK to something else than an empty string. ]) else AC_MSG_RESULT([skip at user request]) fi else AC_MSG_RESULT([yes]) fi # # if the macro parameter ``version'' is set, honour it # if test -n "$1"; then AC_MSG_CHECKING([for a version of Python $1]) ac_supports_python_ver=`$PYTHON -c "import sys; \ ver = sys.version.split ()[[0]]; \ print (ver $1)"` if test "$ac_supports_python_ver" = "True"; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) AC_MSG_ERROR([this package requires Python $1. If you have it installed, but it isn't the default Python interpreter in your system path, please pass the PYTHON_VERSION variable to configure. See ``configure --help'' for reference. ]) PYTHON_VERSION="" fi fi # # Check if you have distutils, else fail # AC_MSG_CHECKING([for the distutils Python package]) ac_distutils_result=`$PYTHON -c "import distutils" 2>&1` if test -z "$ac_distutils_result"; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) AC_MSG_ERROR([cannot import Python module "distutils". Please check your Python installation. The error was: $ac_distutils_result]) PYTHON_VERSION="" fi # # Check for Python include path # AC_MSG_CHECKING([for Python include path]) if test -z "$PYTHON_CPPFLAGS"; then python_path=`$PYTHON -c "import distutils.sysconfig; \ print (distutils.sysconfig.get_python_inc ());"` plat_python_path=`$PYTHON -c "import distutils.sysconfig; \ print (distutils.sysconfig.get_python_inc (plat_specific=1));"` if test -n "${python_path}"; then if test "${plat_python_path}" != "${python_path}"; then python_path="-I$python_path -I$plat_python_path" else python_path="-I$python_path" fi fi PYTHON_CPPFLAGS=$python_path fi AC_MSG_RESULT([$PYTHON_CPPFLAGS]) AC_SUBST([PYTHON_CPPFLAGS]) # # Check for Python library path # AC_MSG_CHECKING([for Python library path]) if test -z "$PYTHON_LDFLAGS"; then # (makes two attempts to ensure we've got a version number # from the interpreter) ac_python_version=`cat<]], [[Py_Initialize();]]) ],[pythonexists=yes],[pythonexists=no]) AC_LANG_POP([C]) # turn back to default flags CPPFLAGS="$ac_save_CPPFLAGS" LIBS="$ac_save_LIBS" AC_MSG_RESULT([$pythonexists]) if test ! "x$pythonexists" = "xyes"; then AC_MSG_FAILURE([ Could not link test program to Python. Maybe the main Python library has been installed in some non-standard library path. If so, pass it to configure, via the LDFLAGS environment variable. Example: ./configure LDFLAGS="-L/usr/non-standard-path/python/lib" ============================================================================ ERROR! You probably have to install the development version of the Python package for your distribution. The exact name of this package varies among them. ============================================================================ ]) PYTHON_VERSION="" fi # # all done! # ]) pocketsphinx-5prealpha/depcomp0000755000175000017500000005601612505035456013767 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2013 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, see . # 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 . 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 outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} 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" # Avoid interferences from the environment. gccflag= dashmflag= # 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 cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc 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 -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## 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). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - 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 -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # 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. ## 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. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -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 -ne 0; then 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 ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # 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 ;; 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. set_dir_from "$object" set_base_from "$object" 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 -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then 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. set_dir_from "$object" set_base_from "$object" 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 -ne 0; then 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,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_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. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool 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$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # 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 ;; #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 "X$1" != 'X--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|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | 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 "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi 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. -arch) eat=yes ;; -*|$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" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | 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 "X$1" != 'X--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. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # 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 ;; 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-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: pocketsphinx-5prealpha/config.sub0000755000175000017500000010531512505035455014371 00000000000000#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2013 Free Software Foundation, Inc. timestamp='2013-04-24' # 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 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 . # # 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 Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # 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. # You can get the latest version of this script from: # http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD # 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 ." version="\ GNU config.sub ($timestamp) Copyright 1992-2013 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-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \ knetbsd*-gnu* | netbsd*-gnu* | \ kopensolaris*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) 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 | -microblaze*) os= basic_machine=$1 ;; -bluegene*) os=-cnk ;; -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*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -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 \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | 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 \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 \ | or1k | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | rl78 | rx \ | score \ | sh | sh[1234] | sh[24]a | sh[24]aeb | 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 \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-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-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | 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-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | 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-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | romp-* | rs6000-* | rx-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | 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-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | 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 ;; aros) basic_machine=i386-pc os=-aros ;; 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 ;; bluegene*) basic_machine=powerpc-ibm os=-cnk ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; 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 | 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*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 ;; microblaze*) basic_machine=microblaze-xilinx ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; 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-/'` ;; msys) basic_machine=i386-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; 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 ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; 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 | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) 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-* | ppc64p7-*) 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 | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) 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 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; 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 ;; tile*) basic_machine=$basic_machine-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 ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; 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[24]aeb | 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. -auroraux) os=-auroraux ;; -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* | -cnk* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \ | -sym* | -kopensolaris* | -plan9* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* | -aros* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -bitrig* | -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* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -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* | -es*) # 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 ;; -zvmoe) os=-zvmoe ;; -dicos*) os=-dicos ;; -nacl*) ;; -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 ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) 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 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or1k-*) 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 ;; -cnk*|-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: pocketsphinx-5prealpha/NEWS0000664000175000017500000000314212504317105013074 00000000000000Pocketsphinx 0.8 ^^^^^^^^^^^^^^^^ Thanks: Tanel Alumae, Douglas Bagnall, Halle Winkler, Peter Grasch, Vyacheslav Klimkov Erik Andresen, Nicola Murino, Melmahdy, Scott Silliman, Riccardo Magliocchetti, Marc Legendre, Kho-And-Mica, Zheng6822, Pankaj Pailwar, Evandro Gouvea Improvements: * API is better exposed in Python, SWIG and gstreamer * New API for exact grammar match * Configurable type for the frame counter, allows utterances way longer than 5 minutes Fixes: * Memory leaks, refcounting and other memory-related issues * Use proper word bounary senones for the words added on the fly * Accurate FSG lextree construction Pocketsphinx 0.7 ^^^^^^^^^^^^^^^^ Thanks: David Huggins-Daines, Chen Tao, creative64, Edwin Miguel, Bhiksha Raj Improvements: * Nice performance improvements * Use arc iterators to build FSG lextrees, speeds this up immensely * Filler word propagation is responsible for 5% speedup * Continuous decoder can decode files, not from the microphone * Add senone score dumping and reloading capability * Functional alignment pass * Symbian support * Add the Android makefile and other JNI stuff * Case sensitive names, including phone names * Better error messages * Report timing for individual search passes Bug fixes: * Accuracy regression fixes * Fixes the bug with reading transition matrix on big-endian platforms * Fixes very important regression with NULL transitions in fsg search * Proper acoustic score scaling during posterior calculation. And many, many, many more intersting things! Pocketsphinx pre ^^^^^^^^^^^^^^^^ 2000-01-27 CMU Sphinx is going Open Source! pocketsphinx-5prealpha/autogen.sh0000775000175000017500000000601712504317105014402 00000000000000#!/bin/sh # Run this to generate all the initial makefiles, etc. srcdir=`dirname $0` PKG_NAME="the package." DIE=0 # Check tools (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 "^LT_INIT" $srcdir/configure.ac >/dev/null) && { if libtoolize --version /dev/null 2>&1; then LIBTOOLIZE=libtoolize elif glibtoolize --version /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/libtool-2.2.6b.tar.gz" echo "(or a newer version if it is available)" DIE=1 fi } (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/automake-1.11.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/automake-1.11.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.ac -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 "^LT_INIT" configure.ac >/dev/null; then echo "Running $LIBTOOLIZE..." $LIBTOOLIZE --force --copy fi echo "Running aclocal $aclocalinclude ..." aclocal -I m4 $aclocalinclude if grep "^AC_CONFIG_HEADER" configure.ac >/dev/null; then echo "Running autoheader..." autoheader fi echo "Running automake --foreign --copy $am_opt ..." automake --add-missing --foreign --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 pocketsphinx-5prealpha/pocketsphinx.sln0000664000175000017500000000746712504317656015663 00000000000000 Microsoft Visual Studio Solution File, Format Version 11.00 # Visual C++ Express 2010 Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pocketsphinx", "win32\pocketsphinx\pocketsphinx.vcxproj", "{94001A0E-A837-445C-8004-F918F10D0226}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pocketsphinx_continuous", "win32\pocketsphinx_continuous\pocketsphinx_continuous.vcxproj", "{1380AF76-C926-44D0-8002-06C228AC869A}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pocketsphinx_batch", "win32\pocketsphinx_batch\pocketsphinx_batch.vcxproj", "{CB47D94B-2F84-41BC-A3C4-A1EBDCDE922A}" EndProject Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pocketsphinx_mdef_convert", "win32\pocketsphinx_mdef_convert\pocketsphinx_mdef_convert.vcxproj", "{4FB65800-11B8-46BD-95B8-6E4F73BDAD91}" EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Release|Win32 = Release|Win32 Debug|Win32 = Debug|Win32 Release|x64 = Release|x64 Debug|x64 = Debug|x64 EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution {1380AF76-C926-44D0-8002-06C228AC869A}.Debug|Win32.ActiveCfg = Debug|Win32 {1380AF76-C926-44D0-8002-06C228AC869A}.Debug|Win32.Build.0 = Debug|Win32 {1380AF76-C926-44D0-8002-06C228AC869A}.Release|Win32.ActiveCfg = Release|Win32 {1380AF76-C926-44D0-8002-06C228AC869A}.Release|Win32.Build.0 = Release|Win32 {CB47D94B-2F84-41BC-A3C4-A1EBDCDE922A}.Debug|Win32.ActiveCfg = Debug|Win32 {CB47D94B-2F84-41BC-A3C4-A1EBDCDE922A}.Debug|Win32.Build.0 = Debug|Win32 {CB47D94B-2F84-41BC-A3C4-A1EBDCDE922A}.Release|Win32.ActiveCfg = Release|Win32 {CB47D94B-2F84-41BC-A3C4-A1EBDCDE922A}.Release|Win32.Build.0 = Release|Win32 {FDF5E3A4-147B-4AE4-901B-90BBFF17D5A4}.Debug|Win32.ActiveCfg = Debug|Win32 {94001A0E-A837-445C-8004-F918F10D0226}.Debug|Win32.ActiveCfg = Debug|Win32 {94001A0E-A837-445C-8004-F918F10D0226}.Debug|Win32.Build.0 = Debug|Win32 {94001A0E-A837-445C-8004-F918F10D0226}.Release|Win32.ActiveCfg = Release|Win32 {94001A0E-A837-445C-8004-F918F10D0226}.Release|Win32.Build.0 = Release|Win32 {4FB65800-11B8-46BD-95B8-6E4F73BDAD91}.Debug|Win32.ActiveCfg = Debug|Win32 {4FB65800-11B8-46BD-95B8-6E4F73BDAD91}.Debug|Win32.Build.0 = Debug|Win32 {4FB65800-11B8-46BD-95B8-6E4F73BDAD91}.Release|Win32.ActiveCfg = Release|Win32 {4FB65800-11B8-46BD-95B8-6E4F73BDAD91}.Release|Win32.Build.0 = Release|Win32 {1380AF76-C926-44D0-8002-06C228AC869A}.Debug|x64.ActiveCfg = Debug|x64 {1380AF76-C926-44D0-8002-06C228AC869A}.Debug|x64.Build.0 = Debug|x64 {1380AF76-C926-44D0-8002-06C228AC869A}.Release|x64.ActiveCfg = Release|x64 {1380AF76-C926-44D0-8002-06C228AC869A}.Release|x64.Build.0 = Release|x64 {CB47D94B-2F84-41BC-A3C4-A1EBDCDE922A}.Debug|x64.ActiveCfg = Debug|x64 {CB47D94B-2F84-41BC-A3C4-A1EBDCDE922A}.Debug|x64.Build.0 = Debug|x64 {CB47D94B-2F84-41BC-A3C4-A1EBDCDE922A}.Release|x64.ActiveCfg = Release|x64 {CB47D94B-2F84-41BC-A3C4-A1EBDCDE922A}.Release|x64.Build.0 = Release|x64 {FDF5E3A4-147B-4AE4-901B-90BBFF17D5A4}.Debug|x64.ActiveCfg = Debug|x64 {94001A0E-A837-445C-8004-F918F10D0226}.Debug|x64.ActiveCfg = Debug|x64 {94001A0E-A837-445C-8004-F918F10D0226}.Debug|x64.Build.0 = Debug|x64 {94001A0E-A837-445C-8004-F918F10D0226}.Release|x64.ActiveCfg = Release|x64 {94001A0E-A837-445C-8004-F918F10D0226}.Release|x64.Build.0 = Release|x64 {4FB65800-11B8-46BD-95B8-6E4F73BDAD91}.Debug|x64.ActiveCfg = Debug|x64 {4FB65800-11B8-46BD-95B8-6E4F73BDAD91}.Debug|x64.Build.0 = Debug|x64 {4FB65800-11B8-46BD-95B8-6E4F73BDAD91}.Release|x64.ActiveCfg = Release|x64 {4FB65800-11B8-46BD-95B8-6E4F73BDAD91}.Release|x64.Build.0 = Release|x64 EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE EndGlobalSection EndGlobal pocketsphinx-5prealpha/Makefile.am0000664000175000017500000000102312504317105014425 00000000000000SUBDIRS = src doc model include test swig EXTRA_DIST = \ autogen.sh \ m4/pkg.m4 \ pocketsphinx.pc.in \ pocketsphinx.sln \ win32/pocketsphinx/pocketsphinx.vcxproj \ win32/pocketsphinx/pocketsphinx.vcxproj.filters \ win32/pocketsphinx_batch/pocketsphinx_batch.vcxproj \ win32/pocketsphinx_continuous/pocketsphinx_continuous.vcxproj \ win32/pocketsphinx_mdef_convert/pocketsphinx_mdef_convert.vcxproj pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = pocketsphinx.pc CLEANFILES = pocketsphinx.pc ACLOCAL_AMFLAGS = -I m4 pocketsphinx-5prealpha/test-driver0000755000175000017500000000761112505035456014605 00000000000000#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2012-06-27.10; # UTC # Copyright (C) 2011-2013 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, see . # 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 or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <$log_file 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then estatus=1 fi case $estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # 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-time-zone: "UTC" # time-stamp-end: "; # UTC" # End: pocketsphinx-5prealpha/doc/0000775000175000017500000000000012560377662013242 500000000000000pocketsphinx-5prealpha/doc/pocketsphinx_continuous.10000664000175000017500000001217012525174512020240 00000000000000.TH POCKETSPHINX_CONTINUOUS 1 "2007-08-27" .SH NAME pocketsphinx_continuous \- Run speech recognition in continuous listening mode .SH SYNOPSIS .B pocketsphinx_continuous .RI \fB\-hmm\fR \fIhmmdir\fR \fB\-dict\fR \fIdictfile\fR [\fI options \fR]... .SH DESCRIPTION .PP This program opens the audio device and waits for speech. When it detects an utterance, it performs speech recognition on it. .TP .B \-adchdr Size of audio file header in bytes (headers are ignored) .TP .B \-adcin Input is raw audio data .TP .B \-agc Automatic gain control for c0 ('max', 'emax', 'noise', or 'none') .TP .B \-agcthresh Initial threshold for automatic gain control .TP .B \-allphone phoneme decoding with phonetic lm .TP .B \-allphone_ci Perform phoneme decoding with phonetic lm and context-independent units only .TP .B \-alpha Preemphasis parameter .TP .B \-argfile file giving extra arguments. .TP .B \-ascale Inverse of acoustic model scale for confidence score calculation .TP .B \-aw Inverse weight applied to acoustic scores. .TP .B \-backtrace Print results and backtraces to log file. .TP .B \-beam Beam width applied to every frame in Viterbi search (smaller values mean wider beam) .TP .B \-bestpath Run bestpath (Dijkstra) search over word lattice (3rd pass) .TP .B \-bestpathlw Language model probability weight for bestpath search .TP .B \-build_outdirs Create missing subdirectories in output directory .TP .B \-cepdir files directory (prefixed to filespecs in control file) .TP .B \-cepext Input files extension (suffixed to filespecs in control file) .TP .B \-ceplen Number of components in the input feature vector .TP .B \-cmn Cepstral mean normalization scheme ('current', 'prior', or 'none') .TP .B \-cmninit Initial values (comma-separated) for cepstral mean when 'prior' is used .TP .B \-compallsen Compute all senone scores in every frame (can be faster when there are many senones) .TP .B \-ctl file listing utterances to be processed .TP .B \-ctlcount No. of utterances to be processed (after skipping \fB\-ctloffset\fR entries) .TP .B \-ctlincr Do every Nth line in the control file .TP .B \-ctloffset No. of utterances at the beginning of \fB\-ctl\fR file to be skipped .TP .B \-ctm output in CTM file format (may require post-sorting) .TP .B \-debug level for debugging messages .TP .B \-dict pronunciation dictionary (lexicon) input file .TP .B \-dictcase Dictionary is case sensitive (NOTE: case insensitivity applies to ASCII characters only) .TP .B \-dither Add 1/2-bit noise .TP .B \-doublebw Use double bandwidth filters (same center freq) .TP .B \-ds Frame GMM computation downsampling ratio .TP .B \-fdict word pronunciation dictionary input file .TP .B \-feat Feature stream type, depends on the acoustic model .TP .B \-featparams containing feature extraction parameters. .TP .B \-fillprob Filler word transition probability .TP .B \-frate Frame rate .TP .B \-fsg format finite state grammar file .TP .B \-fsgctl file listing FSG file to use for each utterance .TP .B \-fsgdir directory for FSG files .TP .B \-fsgext extension for FSG files (including leading dot) .TP .B \-fsgusealtpron Add alternate pronunciations to FSG .TP .B \-fsgusefiller Insert filler words at each state. .TP .B \-fwdflat Run forward flat-lexicon search over word lattice (2nd pass) .TP .B \-fwdflatbeam Beam width applied to every frame in second-pass flat search .TP .B \-fwdflatefwid Minimum number of end frames for a word to be searched in fwdflat search .TP .B \-fwdflatlw Language model probability weight for flat lexicon (2nd pass) decoding .TP .B \-fwdflatsfwin Window of frames in lattice to search for successor words in fwdflat search .TP .B \-fwdflatwbeam Beam width applied to word exits in second-pass flat search .TP .B \-fwdtree Run forward lexicon-tree search (1st pass) .TP .B \-hmm containing acoustic model files. .TP .B \-hyp output file name .TP .B \-hypseg output with segmentation file name .TP .B \-input_endian Endianness of input data, big or little, ignored if NIST or MS Wav .TP .B \-jsgf grammar file .TP .B \-keyphrase to spot .TP .B \-kws file with keyphrases to spot, one per line .TP .B \-kws_delay Delay to wait for best detection score .TP .B \-kws_plp Phone loop probability for keyword spotting .TP .B \-kws_threshold Threshold for p(hyp)/p(alternatives) ratio .TP .B \-latsize Initial backpointer table size .TP .B \-lda containing transformation matrix to be applied to features (single-stream features only) .TP .B \-ldadim Dimensionality of output of feature transformation (0 to use entire matrix) .TP .B \-lifter Length of sin-curve for liftering, or 0 for no liftering. .TP .B \-lm trigram language model input file .TP .B \-lmctl a set of language model .PP The .B \-hmm and .B \-dict arguments are always required. Either .B \-lm or .B \-fsg is required, depending on whether you are using a statistical language model or a finite-state grammar. .SH AUTHOR Written by numerous people at CMU from 1994 onwards. This manual page by David Huggins-Daines .SH COPYRIGHT Copyright \(co 1994-2007 Carnegie Mellon University. See the file \fICOPYING\fR included with this package for more information. .br .SH "SEE ALSO" .BR pocketsphinx_batch (1), .BR sphinx_fe (1). .brpocketsphinx-5prealpha/doc/pocketsphinx_batch.10000664000175000017500000001315012525174512017112 00000000000000.TH POCKETSPHINX_BATCH 1 "2007-08-27" .SH NAME pocketsphinx_batch \- Run speech recognition in batch mode .SH SYNOPSIS .B pocketsphinx_batch .RI \fB\-hmm\fR \fIhmmdir\fR \fB\-dict\fR \fIdictfile\fR [\fI options \fR]... .SH DESCRIPTION .PP Run speech recognition over a list of utterances in batchmode. A list of arguments follows: .TP .B \-adchdr Size of audio file header in bytes (headers are ignored) .TP .B \-adcin Input is raw audio data .TP .B \-agc Automatic gain control for c0 ('max', 'emax', 'noise', or 'none') .TP .B \-agcthresh Initial threshold for automatic gain control .TP .B \-allphone phoneme decoding with phonetic lm .TP .B \-allphone_ci Perform phoneme decoding with phonetic lm and context-independent units only .TP .B \-alpha Preemphasis parameter .TP .B \-argfile file giving extra arguments. .TP .B \-ascale Inverse of acoustic model scale for confidence score calculation .TP .B \-aw Inverse weight applied to acoustic scores. .TP .B \-backtrace Print results and backtraces to log file. .TP .B \-beam Beam width applied to every frame in Viterbi search (smaller values mean wider beam) .TP .B \-bestpath Run bestpath (Dijkstra) search over word lattice (3rd pass) .TP .B \-bestpathlw Language model probability weight for bestpath search .TP .B \-build_outdirs Create missing subdirectories in output directory .TP .B \-cepdir files directory (prefixed to filespecs in control file) .TP .B \-cepext Input files extension (suffixed to filespecs in control file) .TP .B \-ceplen Number of components in the input feature vector .TP .B \-cmn Cepstral mean normalization scheme ('current', 'prior', or 'none') .TP .B \-cmninit Initial values (comma-separated) for cepstral mean when 'prior' is used .TP .B \-compallsen Compute all senone scores in every frame (can be faster when there are many senones) .TP .B \-ctl file listing utterances to be processed .TP .B \-ctlcount No. of utterances to be processed (after skipping \fB\-ctloffset\fR entries) .TP .B \-ctlincr Do every Nth line in the control file .TP .B \-ctloffset No. of utterances at the beginning of \fB\-ctl\fR file to be skipped .TP .B \-ctm output in CTM file format (may require post-sorting) .TP .B \-debug level for debugging messages .TP .B \-dict pronunciation dictionary (lexicon) input file .TP .B \-dictcase Dictionary is case sensitive (NOTE: case insensitivity applies to ASCII characters only) .TP .B \-dither Add 1/2-bit noise .TP .B \-doublebw Use double bandwidth filters (same center freq) .TP .B \-ds Frame GMM computation downsampling ratio .TP .B \-fdict word pronunciation dictionary input file .TP .B \-feat Feature stream type, depends on the acoustic model .TP .B \-featparams containing feature extraction parameters. .TP .B \-fillprob Filler word transition probability .TP .B \-frate Frame rate .TP .B \-fsg format finite state grammar file .TP .B \-fsgctl file listing FSG file to use for each utterance .TP .B \-fsgdir directory for FSG files .TP .B \-fsgext extension for FSG files (including leading dot) .TP .B \-fsgusealtpron Add alternate pronunciations to FSG .TP .B \-fsgusefiller Insert filler words at each state. .TP .B \-fwdflat Run forward flat-lexicon search over word lattice (2nd pass) .TP .B \-fwdflatbeam Beam width applied to every frame in second-pass flat search .TP .B \-fwdflatefwid Minimum number of end frames for a word to be searched in fwdflat search .TP .B \-fwdflatlw Language model probability weight for flat lexicon (2nd pass) decoding .TP .B \-fwdflatsfwin Window of frames in lattice to search for successor words in fwdflat search .TP .B \-fwdflatwbeam Beam width applied to word exits in second-pass flat search .TP .B \-fwdtree Run forward lexicon-tree search (1st pass) .TP .B \-hmm containing acoustic model files. .TP .B \-hyp output file name .TP .B \-hypseg output with segmentation file name .TP .B \-input_endian Endianness of input data, big or little, ignored if NIST or MS Wav .TP .B \-jsgf grammar file .TP .B \-keyphrase to spot .TP .B \-kws file with keyphrases to spot, one per line .TP .B \-kws_delay Delay to wait for best detection score .TP .B \-kws_plp Phone loop probability for keyword spotting .TP .B \-kws_threshold Threshold for p(hyp)/p(alternatives) ratio .TP .B \-latsize Initial backpointer table size .TP .B \-lda containing transformation matrix to be applied to features (single-stream features only) .TP .B \-ldadim Dimensionality of output of feature transformation (0 to use entire matrix) .TP .B \-lifter Length of sin-curve for liftering, or 0 for no liftering. .TP .B \-lm trigram language model input file .TP .B \-lmctl a set of language model .PP The .B \-hmm and .B \-dict arguments are always required. Either .B \-lm or .B \-fsg is required, depending on whether you are using a statistical language model or a finite-state grammar. To do batchmode recognition, you will need to specify a control file, using .B \-ctl This is a simple text file containing one entry per line. Each entry is the name of an input file relative to the .B \-cepdir directory, and without the filename extension (which is given in the .B \-cepext argument). .PP If you are using acoustic feature files as input (see .BR sphinx_fe (1) for information on how to generate these), you can also specify a subpart of a file, using the following format: .PP .RS .B FILENAME START\-FRAME END\-FRAME UTTERANCE-ID .RE .SH AUTHOR Written by numerous people at CMU from 1994 onwards. This manual page by David Huggins-Daines .SH COPYRIGHT Copyright \(co 1994-2007 Carnegie Mellon University. See the file \fICOPYING\fR included with this package for more information. .br .SH "SEE ALSO" .BR pocketsphinx_continuous (1), .BR sphinx_fe (1). .brpocketsphinx-5prealpha/doc/pocketsphinx_mdef_convert.10000664000175000017500000000145612504317104020503 00000000000000.TH POCKETSPHINX_MDEF_CONVERT 1 "2007-08-27" .SH NAME pocketsphinx_mdef_convert \- Convert text-format model definition files to and from PocketSphinx format .SH SYNOPSIS .B pocketsphinx_mdef_convert [\fI options \fR] .B INPUT OUTPUT .SH DESCRIPTION .PP This program converts the text format acoustic model definition files generated by SphinxTrain into the fast binary format used by PocketSphinx. It can also convert binary files back to text format. .TP .B -text The input is in text format, and is to be converted to binary. .TP .B -bin The input is in binary format, and is to be converted to text. .SH AUTHOR Written by David Huggins-Daines . .SH COPYRIGHT Copyright \(co 2006 Carnegie Mellon University. See the file \fICOPYING\fR included with this package for more information. .br pocketsphinx-5prealpha/doc/doxyfile.in0000664000175000017500000014537212535637372015350 00000000000000# 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 = PocketSphinx # 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 = @VERSION@ # 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 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 , where is the value of # the FILE_VERSION_FILTER tag, and 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/libpocketsphinx # 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/* */cmu6_lts_rules.* # 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 , where # is the value of the INPUT_FILTER tag, and 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 = a4wide # 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 = YES # 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 = @sphinxbasebuild@/doc/doxytags=../sphinxbase # 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 pocketsphinx-5prealpha/doc/Makefile.am0000664000175000017500000000236012525174512015205 00000000000000man_MANS = \ pocketsphinx_batch.1 \ pocketsphinx_continuous.1 \ pocketsphinx_mdef_convert.1 EXTRA_DIST = \ args2man.pl \ doxy2swig.py \ pocketsphinx_batch.1.in \ pocketsphinx_continuous.1.in \ pocketsphinx_batch.1 \ pocketsphinx_continuous.1 \ pocketsphinx_mdef_convert.1 # pocketsphinx_batch.1: pocketsphinx_batch.1.in # $(srcdir)/args2man.pl $(top_builddir)/src/programs/pocketsphinx_batch \ # < $< > $@ # pocketsphinx_continuous.1: pocketsphinx_continuous.1.in # $(srcdir)/args2man.pl $(top_builddir)/src/programs/pocketsphinx_continuous \ # < $< > $@ if BUILD_SWIG SWIG_DOC = pydoc.i pydoc.i: html/index.html $(PYTHON) $(srcdir)/doxy2swig.py -n xml/index.xml pydoc.i endif if BUILD_DOXYGEN all-local: html/index.html $(SWIG_DOC) endif headers = \ $(top_srcdir)/include/pocketsphinx.h \ $(top_srcdir)/include/ps_lattice.h \ $(top_srcdir)/include/ps_mllr.h \ $(top_srcdir)/include/ps_search.h latex/refman.pdf: doxyfile $(headers) doxygen $(MAKE) -C latex refman.pdf html/index.html: doxyfile $(headers) doxygen clean-local: -rm -rf html xml latex doxytags $(SWIG_DOC) # Totally CMU-specific rule for uploading documentation upload: html/index.html rsync -av html/ file:/usr12/apache2/htdocs/sphinx/doc/doxygen/pocketsphinx/ pocketsphinx-5prealpha/doc/pocketsphinx_continuous.1.in0000664000175000017500000000167112504317104020642 00000000000000.TH POCKETSPHINX_CONTINUOUS 1 "2007-08-27" .SH NAME pocketsphinx_continuous \- Run speech recognition in continuous listening mode .SH SYNOPSIS .B pocketsphinx_continuous .RI \fB\-hmm\fR \fIhmmdir\fR \fB\-dict\fR \fIdictfile\fR [\fI options \fR]... .SH DESCRIPTION .PP This program opens the audio device and waits for speech. When it detects an utterance, it performs speech recognition on it. .\" ### ARGUMENTS ### .PP The .B \-hmm and .B \-dict arguments are always required. Either .B \-lm or .B \-fsg is required, depending on whether you are using a statistical language model or a finite-state grammar. .SH AUTHOR Written by numerous people at CMU from 1994 onwards. This manual page by David Huggins-Daines .SH COPYRIGHT Copyright \(co 1994-2007 Carnegie Mellon University. See the file \fICOPYING\fR included with this package for more information. .br .SH "SEE ALSO" .BR pocketsphinx_batch (1), .BR sphinx_fe (1). .brpocketsphinx-5prealpha/doc/Makefile.in0000664000175000017500000004155312525174535015232 00000000000000# Makefile.in generated by automake 1.13.4 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@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.in $(srcdir)/Makefile.am \ $(srcdir)/doxyfile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/ax_pkg_swig.m4 \ $(top_srcdir)/m4/ax_python_devel.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.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_CLEAN_FILES = doxyfile CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac 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 = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" NROFF = nroff MANS = $(man_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ 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@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GREP = @GREP@ GST_CFLAGS = @GST_CFLAGS@ GST_LIBS = @GST_LIBS@ GST_MAJORMINOR = @GST_MAJORMINOR@ GST_PLUGIN_LDFLAGS = @GST_PLUGIN_LDFLAGS@ GStreamer_CFLAGS = @GStreamer_CFLAGS@ GStreamer_LIBS = @GStreamer_LIBS@ 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@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBOBJS = @LTLIBOBJS@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ 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_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PYTHON = @PYTHON@ PYTHON_CPPFLAGS = @PYTHON_CPPFLAGS@ PYTHON_EXEC_PREFIX = @PYTHON_EXEC_PREFIX@ PYTHON_EXTRA_LDFLAGS = @PYTHON_EXTRA_LDFLAGS@ PYTHON_EXTRA_LIBS = @PYTHON_EXTRA_LIBS@ PYTHON_LDFLAGS = @PYTHON_LDFLAGS@ PYTHON_PLATFORM = @PYTHON_PLATFORM@ PYTHON_PREFIX = @PYTHON_PREFIX@ PYTHON_SITE_PKG = @PYTHON_SITE_PKG@ PYTHON_VERSION = @PYTHON_VERSION@ RANLIB = @RANLIB@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SPHINXBASE_CFLAGS = @SPHINXBASE_CFLAGS@ SPHINXBASE_LIBS = @SPHINXBASE_LIBS@ SPHINXBASE_SWIG = @SPHINXBASE_SWIG@ STRIP = @STRIP@ SWIG = @SWIG@ SWIG_LIB = @SWIG_LIB@ VERSION = @VERSION@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ 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@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ pkgpyexecdir = @pkgpyexecdir@ pkgpythondir = @pkgpythondir@ plugindir = @plugindir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ pyexecdir = @pyexecdir@ pythondir = @pythondir@ 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@ man_MANS = \ pocketsphinx_batch.1 \ pocketsphinx_continuous.1 \ pocketsphinx_mdef_convert.1 EXTRA_DIST = \ args2man.pl \ doxy2swig.py \ pocketsphinx_batch.1.in \ pocketsphinx_continuous.1.in \ pocketsphinx_batch.1 \ pocketsphinx_continuous.1 \ pocketsphinx_mdef_convert.1 # pocketsphinx_batch.1: pocketsphinx_batch.1.in # $(srcdir)/args2man.pl $(top_builddir)/src/programs/pocketsphinx_batch \ # < $< > $@ # pocketsphinx_continuous.1: pocketsphinx_continuous.1.in # $(srcdir)/args2man.pl $(top_builddir)/src/programs/pocketsphinx_continuous \ # < $< > $@ @BUILD_SWIG_TRUE@SWIG_DOC = pydoc.i headers = \ $(top_srcdir)/include/pocketsphinx.h \ $(top_srcdir)/include/ps_lattice.h \ $(top_srcdir)/include/ps_mllr.h \ $(top_srcdir)/include/ps_search.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) --foreign doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --foreign 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 $(am__aclocal_m4_deps): 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 install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: 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 "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$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 $(MANS) all-local installdirs: for dir in "$(DESTDIR)$(man1dir)"; 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_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 html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am 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-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: all all-am all-local check check-am clean clean-generic \ clean-libtool clean-local cscopelist-am ctags-am 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-man1 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 tags-am uninstall \ uninstall-am uninstall-man uninstall-man1 @BUILD_SWIG_TRUE@pydoc.i: html/index.html @BUILD_SWIG_TRUE@ $(PYTHON) $(srcdir)/doxy2swig.py -n xml/index.xml pydoc.i @BUILD_DOXYGEN_TRUE@all-local: html/index.html $(SWIG_DOC) latex/refman.pdf: doxyfile $(headers) doxygen $(MAKE) -C latex refman.pdf html/index.html: doxyfile $(headers) doxygen clean-local: -rm -rf html xml latex doxytags $(SWIG_DOC) # Totally CMU-specific rule for uploading documentation upload: html/index.html rsync -av html/ file:/usr12/apache2/htdocs/sphinx/doc/doxygen/pocketsphinx/ # 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: pocketsphinx-5prealpha/doc/doxy2swig.py0000664000175000017500000003777712525147712015510 00000000000000#!/usr/bin/env python """Doxygen XML to SWIG docstring converter. Usage: doxy2swig.py [options] input.xml output.i Converts Doxygen generated XML files into a file containing docstrings that can be used by SWIG-1.3.x. Note that you need to get SWIG version > 1.3.23 or use Robin Dunn's docstring patch to be able to use the resulting output. input.xml is your doxygen generated XML file and output.i is where the output will be written (the file will be clobbered). """ ###################################################################### # # This code is implemented using Mark Pilgrim's code as a guideline: # http://www.faqs.org/docs/diveintopython/kgp_divein.html # # Author: Prabhu Ramachandran # License: BSD style # # Thanks: # Johan Hake: the include_function_definition feature # Bill Spotz: bug reports and testing. # Sebastian Henschel: Misc. enhancements. # ###################################################################### from xml.dom import minidom import re import textwrap import sys import types import os.path import optparse # TODO: do not process unnecessary files TYPEMAP = { 'ps_decoder_t': ('Decoder', 'ps_'), 'ps_lattice_t': ('Lattice', 'ps_lattice_'), 'ps_nbest_t': ('NBest', 'ps_nbest_'), 'ps_seg_t': ('Segment', 'ps_seg_') } USE_PREFIXES = [ 'ps_', ] def my_open_read(source): if hasattr(source, "read"): return source else: return open(source) def my_open_write(dest): if hasattr(dest, "write"): return dest else: return open(dest, 'w') class Doxy2SWIG: """Converts Doxygen generated XML files into a file containing docstrings that can be used by SWIG-1.3.x that have support for feature("docstring"). Once the data is parsed it is stored in self.pieces. """ def __init__(self, src, include_function_definition=True, quiet=False): """Initialize the instance given a source object. `src` can be a file or filename. If you do not want to include function definitions from doxygen then set `include_function_definition` to `False`. This is handy since this allows you to use the swig generated function definition using %feature("autodoc", [0,1]). """ f = my_open_read(src) self.my_dir = os.path.dirname(f.name) self.xmldoc = minidom.parse(f).documentElement f.close() self.pieces = [] self.pieces.append('\n// File: %s\n'%\ os.path.basename(f.name)) self.space_re = re.compile(r'\s+') self.lead_spc = re.compile(r'^(%feature\S+\s+\S+\s*?)"\s+(\S)') self.multi = 0 self.ignores = ['inheritancegraph', 'param', 'listofallmembers', 'innerclass', 'name', 'declname', 'incdepgraph', 'invincdepgraph', 'programlisting', 'type', 'references', 'referencedby', 'location', 'collaborationgraph', 'reimplements', 'reimplementedby', 'derivedcompoundref', 'basecompoundref'] #self.generics = [] self.include_function_definition = include_function_definition if not include_function_definition: self.ignores.append('argsstring') self.quiet = quiet def generate(self): """Parses the file set in the initialization. The resulting data is stored in `self.pieces`. """ self.parse(self.xmldoc) def parse(self, node): """Parse a given node. This function in turn calls the `parse_` functions which handle the respective nodes. """ pm = getattr(self, "parse_%s"%node.__class__.__name__) pm(node) def parse_Document(self, node): self.parse(node.documentElement) def parse_Text(self, node): txt = node.data txt = txt.replace('\\', r'\\\\') txt = txt.replace('"', r'\"') # ignore pure whitespace m = self.space_re.match(txt) if m and len(m.group()) == len(txt): pass else: self.add_text(textwrap.fill(txt, break_long_words=False)) def parse_Element(self, node): """Parse an `ELEMENT_NODE`. This calls specific `do_` handers for different elements. If no handler is available the `generic_parse` method is called. All tagNames specified in `self.ignores` are simply ignored. """ name = node.tagName ignores = self.ignores if name in ignores: return attr = "do_%s" % name if hasattr(self, attr): handlerMethod = getattr(self, attr) handlerMethod(node) else: self.generic_parse(node) #if name not in self.generics: self.generics.append(name) def parse_Comment(self, node): """Parse a `COMMENT_NODE`. This does nothing for now.""" return def add_text(self, value): """Adds text corresponding to `value` into `self.pieces`.""" if isinstance(value, tuple) or isinstance(value, list): self.pieces.extend(value) else: self.pieces.append(value) def get_specific_nodes(self, node, names): """Given a node and a sequence of strings in `names`, return a dictionary containing the names as keys and child `ELEMENT_NODEs`, that have a `tagName` equal to the name. """ nodes = [(x.tagName, x) for x in node.childNodes \ if x.nodeType == x.ELEMENT_NODE and \ x.tagName in names] return dict(nodes) def generic_parse(self, node, pad=0): """A Generic parser for arbitrary tags in a node. Parameters: - node: A node in the DOM. - pad: `int` (default: 0) If 0 the node data is not padded with newlines. If 1 it appends a newline after parsing the childNodes. If 2 it pads before and after the nodes are processed. Defaults to 0. """ npiece = 0 if pad: npiece = len(self.pieces) if pad == 2: self.add_text('\n') for n in node.childNodes: self.parse(n) if pad: if len(self.pieces) > npiece: self.add_text('\n') def space_parse(self, node): self.add_text(' ') self.generic_parse(node) do_ref = space_parse do_emphasis = space_parse do_bold = space_parse do_computeroutput = space_parse do_formula = space_parse def do_compoundname(self, node): self.add_text('\n\n') data = node.firstChild.data self.add_text('%%feature("docstring") %s "\n' % data) def do_compounddef(self, node): kind = node.attributes['kind'].value if kind in ('class', 'struct'): prot = node.attributes['prot'].value if prot != 'public': return names = ('compoundname', 'briefdescription', 'detaileddescription', 'includes') first = self.get_specific_nodes(node, names) for n in names: if first.has_key(n): self.parse(first[n]) self.add_text(['";','\n']) for n in node.childNodes: if n not in first.values(): self.parse(n) elif kind in ('file', 'namespace'): nodes = node.getElementsByTagName('sectiondef') for n in nodes: self.parse(n) def do_includes(self, node): self.add_text('C++ includes: ') self.generic_parse(node, pad=1) def do_parameterlist(self, node): text='unknown' for key, val in node.attributes.items(): if key == 'kind': if val == 'param': text = 'Parameters' elif val == 'exception': text = 'Exceptions' else: text = val break self.add_text(['\n', '\n', text, ':', '\n']) self.generic_parse(node, pad=1) def do_para(self, node): self.add_text('\n') self.generic_parse(node, pad=1) def do_parametername(self, node): self.add_text('\n') try: data=node.firstChild.data except AttributeError: # perhaps a tag in it data=node.firstChild.firstChild.data if data.find('Exception') != -1: self.add_text(data) else: self.add_text("%s: "%data) def do_parameterdefinition(self, node): self.generic_parse(node, pad=1) def do_detaileddescription(self, node): self.generic_parse(node, pad=1) def do_briefdescription(self, node): self.generic_parse(node, pad=1) def do_memberdef(self, node): prot = node.attributes['prot'].value id = node.attributes['id'].value kind = node.attributes['kind'].value tmp = node.parentNode.parentNode.parentNode compdef = tmp.getElementsByTagName('compounddef')[0] cdef_kind = compdef.attributes['kind'].value if prot == 'public': first = self.get_specific_nodes(node, ('definition', 'name')) name = first['name'].firstChild.data for n in node.getElementsByTagName('param'): arg_type = n.getElementsByTagName('type')[0] ref = self.get_specific_nodes(arg_type, ('ref')) if 'ref' in ref: type_name = ref['ref'].firstChild.data # TODO: check argument position if type_name in TYPEMAP: alias, prefix = TYPEMAP[type_name] short_name = name.replace(prefix, '') if not re.match(r'^\d', short_name): name = alias + '::' + name.replace(prefix, '') break if name[:8] == 'operator': # Don't handle operators yet. return if not ('definition' in first) or \ kind in ['variable', 'typedef']: return if self.include_function_definition: defn = first['definition'].firstChild.data else: defn = "" self.add_text('\n') self.add_text('%feature("docstring") ') anc = node.parentNode.parentNode if cdef_kind in ('file', 'namespace'): ns_node = anc.getElementsByTagName('innernamespace') if not ns_node and cdef_kind == 'namespace': ns_node = anc.getElementsByTagName('compoundname') if ns_node: ns = ns_node[0].firstChild.data self.add_text(' %s::%s "\n%s'%(ns, name, defn)) else: self.add_text(' %s "\n%s'%(name, defn)) elif cdef_kind in ('class', 'struct'): # Get the full function name. anc_node = anc.getElementsByTagName('compoundname') cname = anc_node[0].firstChild.data self.add_text(' %s::%s "\n%s'%(cname, name, defn)) for n in node.childNodes: if n not in first.values(): self.parse(n) self.add_text(['";', '\n']) def do_definition(self, node): data = node.firstChild.data self.add_text('%s "\n%s'%(data, data)) def do_sectiondef(self, node): kind = node.attributes['kind'].value if kind in ('public-func', 'func', 'user-defined', ''): self.generic_parse(node) def do_header(self, node): """For a user defined section def a header field is present which should not be printed as such, so we comment it in the output.""" data = node.firstChild.data self.add_text('\n/*\n %s \n*/\n'%data) # If our immediate sibling is a 'description' node then we # should comment that out also and remove it from the parent # node's children. parent = node.parentNode idx = parent.childNodes.index(node) if len(parent.childNodes) >= idx + 2: nd = parent.childNodes[idx+2] if nd.nodeName == 'description': nd = parent.removeChild(nd) self.add_text('\n/*') self.generic_parse(nd) self.add_text('\n*/\n') def do_simplesect(self, node): kind = node.attributes['kind'].value if kind in ('date', 'rcs', 'version'): pass elif kind == 'warning': self.add_text(['\n', 'WARNING: ']) self.generic_parse(node) elif kind == 'see': self.add_text('\n') self.add_text('See: ') self.generic_parse(node) else: self.generic_parse(node) def do_argsstring(self, node): self.generic_parse(node, pad=1) def do_member(self, node): kind = node.attributes['kind'].value refid = node.attributes['refid'].value if kind == 'function' and refid[:9] == 'namespace': self.generic_parse(node) def do_doxygenindex(self, node): self.multi = 1 comps = node.getElementsByTagName('compound') for c in comps: refid = c.attributes['refid'].value fname = refid + '.xml' for prefix in USE_PREFIXES: if fname.startswith(prefix): if not os.path.exists(fname): fname = os.path.join(self.my_dir, fname) if not self.quiet: print ("parsing file: %s" % fname) p = Doxy2SWIG(fname, self.include_function_definition, self.quiet) p.generate() self.pieces.extend(self.clean_pieces(p.pieces)) break def write(self, fname): o = my_open_write(fname) if self.multi: o.write("".join(self.pieces)) else: o.write("".join(self.clean_pieces(self.pieces))) o.close() def clean_pieces(self, pieces): """Cleans the list of strings given as `pieces`. It replaces multiple newlines by a maximum of 2 and returns a new list. It also wraps the paragraphs nicely. """ ret = [] count = 0 for i in pieces: if i == '\n': count = count + 1 else: if i == '";': if count: ret.append('\n') elif count > 2: ret.append('\n\n') elif count: ret.append('\n'*count) count = 0 ret.append(i) _data = "".join(ret) ret = [] for i in _data.split('\n\n'): if i == 'Parameters:' or i == 'Exceptions:': ret.extend([i, '\n-----------', '\n\n']) elif i.find('// File:') > -1: # leave comments alone. ret.extend([i, '\n']) else: _tmp = textwrap.fill(i.strip(), break_long_words=False) _tmp = self.lead_spc.sub(r'\1"\2', _tmp) ret.extend([_tmp, '\n\n']) return ret def convert(input, output, include_function_definition=True, quiet=False): p = Doxy2SWIG(input, include_function_definition, quiet) p.generate() p.write(output) def main(): usage = __doc__ parser = optparse.OptionParser(usage) parser.add_option("-n", '--no-function-definition', action='store_true', default=False, dest='func_def', help='do not include doxygen function definitions') parser.add_option("-q", '--quiet', action='store_true', default=False, dest='quiet', help='be quiet and minimize output') options, args = parser.parse_args() if len(args) != 2: parser.error("error: no input and output specified") convert(args[0], args[1], not options.func_def, options.quiet) if __name__ == '__main__': main() pocketsphinx-5prealpha/doc/pocketsphinx_batch.1.in0000664000175000017500000000265112504317104017514 00000000000000.TH POCKETSPHINX_BATCH 1 "2007-08-27" .SH NAME pocketsphinx_batch \- Run speech recognition in batch mode .SH SYNOPSIS .B pocketsphinx_batch .RI \fB\-hmm\fR \fIhmmdir\fR \fB\-dict\fR \fIdictfile\fR [\fI options \fR]... .SH DESCRIPTION .PP Run speech recognition over a list of utterances in batchmode. A list of arguments follows: .\" ### ARGUMENTS ### .PP The .B \-hmm and .B \-dict arguments are always required. Either .B \-lm or .B \-fsg is required, depending on whether you are using a statistical language model or a finite-state grammar. To do batchmode recognition, you will need to specify a control file, using .B \-ctl This is a simple text file containing one entry per line. Each entry is the name of an input file relative to the .B \-cepdir directory, and without the filename extension (which is given in the .B \-cepext argument). .PP If you are using acoustic feature files as input (see .BR sphinx_fe (1) for information on how to generate these), you can also specify a subpart of a file, using the following format: .PP .RS .B FILENAME START\-FRAME END\-FRAME UTTERANCE-ID .RE .SH AUTHOR Written by numerous people at CMU from 1994 onwards. This manual page by David Huggins-Daines .SH COPYRIGHT Copyright \(co 1994-2007 Carnegie Mellon University. See the file \fICOPYING\fR included with this package for more information. .br .SH "SEE ALSO" .BR pocketsphinx_continuous (1), .BR sphinx_fe (1). .brpocketsphinx-5prealpha/doc/args2man.pl0000775000175000017500000000304312504317104015213 00000000000000#!/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 () { 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 I E I